{"version":3,"sources":["webpack:///./node_modules/@babel/runtime/helpers/esm/callSuper.js","webpack:///./node_modules/@babel/runtime/helpers/esm/construct.js","webpack:///./node_modules/@babel/runtime/helpers/esm/get.js","webpack:///./node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","webpack:///./node_modules/@babel/runtime/helpers/esm/readOnlyError.js","webpack:///./node_modules/@babel/runtime/helpers/esm/superPropBase.js","webpack:///./node_modules/@babel/runtime/helpers/esm/superPropGet.js","webpack:///./node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","webpack:///./node_modules/@ckeditor/ckeditor5-basic-styles/src/attributecommand.js","webpack:///./node_modules/@ckeditor/ckeditor5-basic-styles/src/bold.js","webpack:///./node_modules/@ckeditor/ckeditor5-basic-styles/src/bold/boldediting.js","webpack:///./node_modules/@ckeditor/ckeditor5-basic-styles/src/bold/boldui.js","webpack:///./node_modules/@ckeditor/ckeditor5-basic-styles/src/italic.js","webpack:///./node_modules/@ckeditor/ckeditor5-basic-styles/src/italic/italicediting.js","webpack:///./node_modules/@ckeditor/ckeditor5-basic-styles/src/italic/italicui.js","webpack:///./node_modules/@ckeditor/ckeditor5-basic-styles/src/underline.js","webpack:///./node_modules/@ckeditor/ckeditor5-basic-styles/src/underline/underlineediting.js","webpack:///./node_modules/@ckeditor/ckeditor5-basic-styles/src/underline/underlineui.js","webpack:///./node_modules/@ckeditor/ckeditor5-basic-styles/theme/icons/bold.svg","webpack:///./node_modules/@ckeditor/ckeditor5-basic-styles/theme/icons/italic.svg","webpack:///./node_modules/@ckeditor/ckeditor5-basic-styles/theme/icons/underline.svg","webpack:///./node_modules/@ckeditor/ckeditor5-clipboard/src/clipboard.js","webpack:///./node_modules/@ckeditor/ckeditor5-clipboard/src/clipboardobserver.js","webpack:///./node_modules/@ckeditor/ckeditor5-clipboard/src/datatransfer.js","webpack:///./node_modules/@ckeditor/ckeditor5-clipboard/src/utils/normalizeclipboarddata.js","webpack:///./node_modules/@ckeditor/ckeditor5-clipboard/src/utils/plaintexttohtml.js","webpack:///./node_modules/@ckeditor/ckeditor5-clipboard/src/utils/viewtoplaintext.js","webpack:///./node_modules/@ckeditor/ckeditor5-core/src/command.js","webpack:///./node_modules/@ckeditor/ckeditor5-core/src/commandcollection.js","webpack:///./node_modules/@ckeditor/ckeditor5-core/src/editingkeystrokehandler.js","webpack:///./node_modules/@ckeditor/ckeditor5-core/src/editor/editor.js","webpack:///./node_modules/@ckeditor/ckeditor5-core/src/editor/editorui.js","webpack:///./node_modules/@ckeditor/ckeditor5-core/src/editor/utils/attachtoform.js","webpack:///./node_modules/@ckeditor/ckeditor5-core/src/editor/utils/dataapimixin.js","webpack:///./node_modules/@ckeditor/ckeditor5-core/src/editor/utils/elementapimixin.js","webpack:///./node_modules/@ckeditor/ckeditor5-core/src/plugin.js","webpack:///./node_modules/@ckeditor/ckeditor5-core/src/plugincollection.js","webpack:///./node_modules/@ckeditor/ckeditor5-core/theme/icons/cancel.svg","webpack:///./node_modules/@ckeditor/ckeditor5-core/theme/icons/check.svg","webpack:///./node_modules/@ckeditor/ckeditor5-core/theme/icons/pencil.svg","webpack:///./node_modules/@ckeditor/ckeditor5-core/theme/icons/three-vertical-dots.svg","webpack:///./node_modules/@ckeditor/ckeditor5-editor-classic/src/classiceditor.js","webpack:///./node_modules/@ckeditor/ckeditor5-editor-classic/src/classiceditorui.js","webpack:///./node_modules/@ckeditor/ckeditor5-editor-classic/src/classiceditoruiview.js","webpack:///./node_modules/@ckeditor/ckeditor5-editor-classic/theme/classiceditor.css?2173","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/controller/datacontroller.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/controller/editingcontroller.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/conversion/conversion.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/conversion/conversionhelpers.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/conversion/downcastdispatcher.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/conversion/downcasthelpers.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/conversion/mapper.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/conversion/modelconsumable.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/conversion/upcastdispatcher.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/conversion/upcasthelpers.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/conversion/viewconsumable.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/dataprocessor/basichtmlwriter.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/dataprocessor/htmldataprocessor.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/batch.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/differ.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/document.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/documentfragment.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/documentselection.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/element.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/history.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/liveposition.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/liverange.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/markercollection.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/model.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/node.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/nodelist.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/operation/attributeoperation.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/operation/detachoperation.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/operation/insertoperation.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/operation/markeroperation.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/operation/mergeoperation.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/operation/moveoperation.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/operation/nooperation.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/operation/operation.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/operation/renameoperation.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/operation/rootattributeoperation.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/operation/splitoperation.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/operation/transform.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/operation/utils.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/position.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/range.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/rootelement.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/schema.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/selection.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/text.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/textproxy.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/treewalker.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/utils/deletecontent.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/utils/getselectedcontent.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/utils/insertcontent.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/utils/modifyselection.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/utils/selection-post-fixer.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/model/writer.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/utils/bindtwostepcarettoattribute.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/attributeelement.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/containerelement.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/document.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/documentfragment.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/documentselection.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/domconverter.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/downcastwriter.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/editableelement.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/element.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/emptyelement.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/filler.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/matcher.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/node.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/observer/clickobserver.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/observer/compositionobserver.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/observer/domeventdata.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/observer/domeventobserver.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/observer/fakeselectionobserver.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/observer/focusobserver.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/observer/inputobserver.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/observer/keyobserver.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/observer/mutationobserver.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/observer/observer.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/observer/selectionobserver.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/placeholder.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/position.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/range.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/renderer.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/rooteditableelement.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/selection.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/text.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/textproxy.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/treewalker.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/uielement.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/view.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/theme/placeholder.css?1182","webpack:///./node_modules/@ckeditor/ckeditor5-enter/src/enter.js","webpack:///./node_modules/@ckeditor/ckeditor5-enter/src/entercommand.js","webpack:///./node_modules/@ckeditor/ckeditor5-enter/src/enterobserver.js","webpack:///./node_modules/@ckeditor/ckeditor5-enter/src/shiftenter.js","webpack:///./node_modules/@ckeditor/ckeditor5-enter/src/shiftentercommand.js","webpack:///./node_modules/@ckeditor/ckeditor5-enter/src/utils.js","webpack:///./node_modules/@ckeditor/ckeditor5-essentials/src/essentials.js","webpack:///./node_modules/@ckeditor/ckeditor5-link/src/findlinkrange.js","webpack:///./node_modules/@ckeditor/ckeditor5-link/src/link.js","webpack:///./node_modules/@ckeditor/ckeditor5-link/src/linkcommand.js","webpack:///./node_modules/@ckeditor/ckeditor5-link/src/linkediting.js","webpack:///./node_modules/@ckeditor/ckeditor5-link/src/linkui.js","webpack:///./node_modules/@ckeditor/ckeditor5-link/src/ui/linkactionsview.js","webpack:///./node_modules/@ckeditor/ckeditor5-link/src/ui/linkformview.js","webpack:///./node_modules/@ckeditor/ckeditor5-link/src/unlinkcommand.js","webpack:///./node_modules/@ckeditor/ckeditor5-link/src/utils.js","webpack:///./node_modules/@ckeditor/ckeditor5-link/src/utils/automaticdecorators.js","webpack:///./node_modules/@ckeditor/ckeditor5-link/src/utils/manualdecorator.js","webpack:///./node_modules/@ckeditor/ckeditor5-link/theme/icons/link.svg","webpack:///./node_modules/@ckeditor/ckeditor5-link/theme/icons/unlink.svg","webpack:///./node_modules/@ckeditor/ckeditor5-link/theme/link.css?0c9a","webpack:///./node_modules/@ckeditor/ckeditor5-link/theme/linkactions.css?9c30","webpack:///./node_modules/@ckeditor/ckeditor5-link/theme/linkform.css?050d","webpack:///./node_modules/@ckeditor/ckeditor5-list/src/converters.js","webpack:///./node_modules/@ckeditor/ckeditor5-list/src/indentcommand.js","webpack:///./node_modules/@ckeditor/ckeditor5-list/src/list.js","webpack:///./node_modules/@ckeditor/ckeditor5-list/src/listcommand.js","webpack:///./node_modules/@ckeditor/ckeditor5-list/src/listediting.js","webpack:///./node_modules/@ckeditor/ckeditor5-list/src/listui.js","webpack:///./node_modules/@ckeditor/ckeditor5-list/src/utils.js","webpack:///./node_modules/@ckeditor/ckeditor5-list/theme/icons/bulletedlist.svg","webpack:///./node_modules/@ckeditor/ckeditor5-list/theme/icons/numberedlist.svg","webpack:///./node_modules/@ckeditor/ckeditor5-paragraph/src/paragraph.js","webpack:///./node_modules/@ckeditor/ckeditor5-paragraph/src/paragraphcommand.js","webpack:///./node_modules/@ckeditor/ckeditor5-remove-format/src/removeformat.js","webpack:///./node_modules/@ckeditor/ckeditor5-remove-format/src/removeformatcommand.js","webpack:///./node_modules/@ckeditor/ckeditor5-remove-format/src/removeformatediting.js","webpack:///./node_modules/@ckeditor/ckeditor5-remove-format/src/removeformatui.js","webpack:///./node_modules/@ckeditor/ckeditor5-remove-format/theme/icons/remove-format.svg","webpack:///./node_modules/@ckeditor/ckeditor5-typing/src/delete.js","webpack:///./node_modules/@ckeditor/ckeditor5-typing/src/deletecommand.js","webpack:///./node_modules/@ckeditor/ckeditor5-typing/src/deleteobserver.js","webpack:///./node_modules/@ckeditor/ckeditor5-typing/src/input.js","webpack:///./node_modules/@ckeditor/ckeditor5-typing/src/inputcommand.js","webpack:///./node_modules/@ckeditor/ckeditor5-typing/src/typing.js","webpack:///./node_modules/@ckeditor/ckeditor5-typing/src/utils/changebuffer.js","webpack:///./node_modules/@ckeditor/ckeditor5-typing/src/utils/injecttypingmutationshandling.js","webpack:///./node_modules/@ckeditor/ckeditor5-typing/src/utils/injectunsafekeystrokeshandling.js","webpack:///./node_modules/@ckeditor/ckeditor5-typing/src/utils/utils.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/bindings/clickoutsidehandler.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/bindings/preventdefault.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/bindings/submithandler.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/button/buttonview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/button/switchbuttonview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/componentfactory.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/dropdown/button/dropdownbuttonview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/dropdown/dropdownpanelview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/dropdown/dropdownview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/dropdown/utils.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/editableui/editableuiview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/editableui/inline/inlineeditableuiview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/editorui/boxed/boxededitoruiview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/editorui/editoruiview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/focuscycler.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/icon/iconview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/inputtext/inputtextview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/label/labelview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/labeledinput/labeledinputview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/list/listitemview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/list/listseparatorview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/list/listview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/panel/balloon/balloonpanelview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/panel/balloon/contextualballoon.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/panel/sticky/stickypanelview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/template.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/toolbar/enabletoolbarkeyboardfocus.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/toolbar/normalizetoolbarconfig.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/toolbar/toolbarseparatorview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/toolbar/toolbarview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/tooltip/tooltipview.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/view.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/src/viewcollection.js","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/button/button.css?fb0d","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/button/switchbutton.css?cca2","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/dropdown/dropdown.css?b67d","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/dropdown/listdropdown.css?522e","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/dropdown/toolbardropdown.css?5c9c","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/editorui/editorui.css?bb5e","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/icon/icon.css?0dfb","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/inputtext/inputtext.css?f1b6","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/label/label.css?12bf","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/labeledinput/labeledinput.css?60fd","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/list/list.css?4d4c","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/panel/balloonpanel.css?4387","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/panel/balloonrotator.css?81b0","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/panel/fakepanel.css?7cf3","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/panel/stickypanel.css?bfd3","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/toolbar/toolbar.css?a003","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/tooltip/tooltip.css?369c","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/globals/globals.css?9307","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/icons/dropdown-arrow.svg","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/icons/next-arrow.svg","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/icons/previous-arrow.svg","webpack:///./node_modules/@ckeditor/ckeditor5-undo/src/basecommand.js","webpack:///./node_modules/@ckeditor/ckeditor5-undo/src/redocommand.js","webpack:///./node_modules/@ckeditor/ckeditor5-undo/src/undo.js","webpack:///./node_modules/@ckeditor/ckeditor5-undo/src/undocommand.js","webpack:///./node_modules/@ckeditor/ckeditor5-undo/src/undoediting.js","webpack:///./node_modules/@ckeditor/ckeditor5-undo/src/undoui.js","webpack:///./node_modules/@ckeditor/ckeditor5-undo/theme/icons/redo.svg","webpack:///./node_modules/@ckeditor/ckeditor5-undo/theme/icons/undo.svg","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/ckeditorerror.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/collection.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/comparearrays.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/config.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/count.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/diff.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/difftochanges.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/emittermixin.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/getancestors.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/getborderwidths.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/getcommonancestor.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/getdatafromelement.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/getpositionedancestor.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/getresizeobserver.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/global.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/indexof.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/insertat.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/isnode.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/isrange.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/istext.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/iswindow.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/position.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/rect.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/remove.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/scroll.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/setdatainelement.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/dom/tounit.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/elementreplacer.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/emittermixin.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/env.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/eventinfo.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/fastdiff.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/first.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/focustracker.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/isiterable.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/keyboard.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/keystrokehandler.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/locale.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/mix.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/objecttomap.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/observablemixin.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/priorities.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/spy.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/tomap.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/translation-service.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/uid.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/unicode.js","webpack:///./node_modules/@ckeditor/ckeditor5-utils/src/version.js","webpack:///./node_modules/@ckeditor/ckeditor5-vue/dist/ckeditor.js","webpack:///src/components/UI/TextEditor.vue","webpack:///./src/components/UI/TextEditor.vue","webpack:///./node_modules/core-js/internals/collection-weak.js","webpack:///./node_modules/core-js/internals/correct-is-regexp-logic.js","webpack:///./node_modules/core-js/internals/create-html.js","webpack:///./node_modules/core-js/internals/is-data-descriptor.js","webpack:///./node_modules/core-js/internals/not-a-regexp.js","webpack:///./node_modules/core-js/internals/number-parse-int.js","webpack:///./node_modules/core-js/internals/string-html-forced.js","webpack:///./node_modules/core-js/internals/string-repeat.js","webpack:///./node_modules/core-js/modules/es.iterator.every.js","webpack:///./node_modules/core-js/modules/es.number.parse-int.js","webpack:///./node_modules/core-js/modules/es.object.get-own-property-names.js","webpack:///./node_modules/core-js/modules/es.reflect.get.js","webpack:///./node_modules/core-js/modules/es.reflect.to-string-tag.js","webpack:///./node_modules/core-js/modules/es.string.anchor.js","webpack:///./node_modules/core-js/modules/es.string.ends-with.js","webpack:///./node_modules/core-js/modules/es.string.includes.js","webpack:///./node_modules/core-js/modules/es.string.match.js","webpack:///./node_modules/core-js/modules/es.string.repeat.js","webpack:///./node_modules/core-js/modules/es.string.split.js","webpack:///./node_modules/core-js/modules/es.string.starts-with.js","webpack:///./node_modules/core-js/modules/es.weak-map.constructor.js","webpack:///./node_modules/core-js/modules/es.weak-map.js","webpack:///./node_modules/core-js/modules/es.weak-set.constructor.js","webpack:///./node_modules/core-js/modules/es.weak-set.js","webpack:///./node_modules/@ckeditor/ckeditor5-editor-classic/theme/classiceditor.css","webpack:///./node_modules/@ckeditor/ckeditor5-engine/theme/placeholder.css","webpack:///./node_modules/@ckeditor/ckeditor5-link/theme/link.css","webpack:///./node_modules/@ckeditor/ckeditor5-link/theme/linkactions.css","webpack:///./node_modules/@ckeditor/ckeditor5-link/theme/linkform.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/button/button.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/button/switchbutton.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/dropdown/dropdown.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/dropdown/listdropdown.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/dropdown/toolbardropdown.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/editorui/editorui.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/icon/icon.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/inputtext/inputtext.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/label/label.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/labeledinput/labeledinput.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/list/list.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/panel/balloonpanel.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/panel/balloonrotator.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/panel/fakepanel.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/panel/stickypanel.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/toolbar/toolbar.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/components/tooltip/tooltip.css","webpack:///./node_modules/@ckeditor/ckeditor5-ui/theme/globals/globals.css","webpack:///./src/components/UI/TextEditor.vue?83d5","webpack:///./node_modules/lodash-es/_DataView.js","webpack:///./node_modules/lodash-es/_Hash.js","webpack:///./node_modules/lodash-es/_LazyWrapper.js","webpack:///./node_modules/lodash-es/_ListCache.js","webpack:///./node_modules/lodash-es/_LodashWrapper.js","webpack:///./node_modules/lodash-es/_Map.js","webpack:///./node_modules/lodash-es/_MapCache.js","webpack:///./node_modules/lodash-es/_Promise.js","webpack:///./node_modules/lodash-es/_Set.js","webpack:///./node_modules/lodash-es/_SetCache.js","webpack:///./node_modules/lodash-es/_Stack.js","webpack:///./node_modules/lodash-es/_Symbol.js","webpack:///./node_modules/lodash-es/_Uint8Array.js","webpack:///./node_modules/lodash-es/_WeakMap.js","webpack:///./node_modules/lodash-es/_apply.js","webpack:///./node_modules/lodash-es/_arrayAggregator.js","webpack:///./node_modules/lodash-es/_arrayEach.js","webpack:///./node_modules/lodash-es/_arrayEachRight.js","webpack:///./node_modules/lodash-es/_arrayEvery.js","webpack:///./node_modules/lodash-es/_arrayFilter.js","webpack:///./node_modules/lodash-es/_arrayIncludes.js","webpack:///./node_modules/lodash-es/_arrayIncludesWith.js","webpack:///./node_modules/lodash-es/_arrayLikeKeys.js","webpack:///./node_modules/lodash-es/_arrayMap.js","webpack:///./node_modules/lodash-es/_arrayPush.js","webpack:///./node_modules/lodash-es/_arrayReduce.js","webpack:///./node_modules/lodash-es/_arrayReduceRight.js","webpack:///./node_modules/lodash-es/_arraySample.js","webpack:///./node_modules/lodash-es/_arraySampleSize.js","webpack:///./node_modules/lodash-es/_arrayShuffle.js","webpack:///./node_modules/lodash-es/_arraySome.js","webpack:///./node_modules/lodash-es/_asciiSize.js","webpack:///./node_modules/lodash-es/_asciiToArray.js","webpack:///./node_modules/lodash-es/_asciiWords.js","webpack:///./node_modules/lodash-es/_assignMergeValue.js","webpack:///./node_modules/lodash-es/_assignValue.js","webpack:///./node_modules/lodash-es/_assocIndexOf.js","webpack:///./node_modules/lodash-es/_baseAggregator.js","webpack:///./node_modules/lodash-es/_baseAssign.js","webpack:///./node_modules/lodash-es/_baseAssignIn.js","webpack:///./node_modules/lodash-es/_baseAssignValue.js","webpack:///./node_modules/lodash-es/_baseAt.js","webpack:///./node_modules/lodash-es/_baseClamp.js","webpack:///./node_modules/lodash-es/_baseClone.js","webpack:///./node_modules/lodash-es/_baseConforms.js","webpack:///./node_modules/lodash-es/_baseConformsTo.js","webpack:///./node_modules/lodash-es/_baseCreate.js","webpack:///./node_modules/lodash-es/_baseDelay.js","webpack:///./node_modules/lodash-es/_baseDifference.js","webpack:///./node_modules/lodash-es/_baseEach.js","webpack:///./node_modules/lodash-es/_baseEachRight.js","webpack:///./node_modules/lodash-es/_baseEvery.js","webpack:///./node_modules/lodash-es/_baseExtremum.js","webpack:///./node_modules/lodash-es/_baseFill.js","webpack:///./node_modules/lodash-es/_baseFilter.js","webpack:///./node_modules/lodash-es/_baseFindIndex.js","webpack:///./node_modules/lodash-es/_baseFindKey.js","webpack:///./node_modules/lodash-es/_baseFlatten.js","webpack:///./node_modules/lodash-es/_baseFor.js","webpack:///./node_modules/lodash-es/_baseForOwn.js","webpack:///./node_modules/lodash-es/_baseForOwnRight.js","webpack:///./node_modules/lodash-es/_baseForRight.js","webpack:///./node_modules/lodash-es/_baseFunctions.js","webpack:///./node_modules/lodash-es/_baseGet.js","webpack:///./node_modules/lodash-es/_baseGetAllKeys.js","webpack:///./node_modules/lodash-es/_baseGetTag.js","webpack:///./node_modules/lodash-es/_baseGt.js","webpack:///./node_modules/lodash-es/_baseHas.js","webpack:///./node_modules/lodash-es/_baseHasIn.js","webpack:///./node_modules/lodash-es/_baseInRange.js","webpack:///./node_modules/lodash-es/_baseIndexOf.js","webpack:///./node_modules/lodash-es/_baseIndexOfWith.js","webpack:///./node_modules/lodash-es/_baseIntersection.js","webpack:///./node_modules/lodash-es/_baseInverter.js","webpack:///./node_modules/lodash-es/_baseInvoke.js","webpack:///./node_modules/lodash-es/_baseIsArguments.js","webpack:///./node_modules/lodash-es/_baseIsArrayBuffer.js","webpack:///./node_modules/lodash-es/_baseIsDate.js","webpack:///./node_modules/lodash-es/_baseIsEqual.js","webpack:///./node_modules/lodash-es/_baseIsEqualDeep.js","webpack:///./node_modules/lodash-es/_baseIsMap.js","webpack:///./node_modules/lodash-es/_baseIsMatch.js","webpack:///./node_modules/lodash-es/_baseIsNaN.js","webpack:///./node_modules/lodash-es/_baseIsNative.js","webpack:///./node_modules/lodash-es/_baseIsRegExp.js","webpack:///./node_modules/lodash-es/_baseIsSet.js","webpack:///./node_modules/lodash-es/_baseIsTypedArray.js","webpack:///./node_modules/lodash-es/_baseIteratee.js","webpack:///./node_modules/lodash-es/_baseKeys.js","webpack:///./node_modules/lodash-es/_baseKeysIn.js","webpack:///./node_modules/lodash-es/_baseLodash.js","webpack:///./node_modules/lodash-es/_baseLt.js","webpack:///./node_modules/lodash-es/_baseMap.js","webpack:///./node_modules/lodash-es/_baseMatches.js","webpack:///./node_modules/lodash-es/_baseMatchesProperty.js","webpack:///./node_modules/lodash-es/_baseMean.js","webpack:///./node_modules/lodash-es/_baseMerge.js","webpack:///./node_modules/lodash-es/_baseMergeDeep.js","webpack:///./node_modules/lodash-es/_baseNth.js","webpack:///./node_modules/lodash-es/_baseOrderBy.js","webpack:///./node_modules/lodash-es/_basePick.js","webpack:///./node_modules/lodash-es/_basePickBy.js","webpack:///./node_modules/lodash-es/_baseProperty.js","webpack:///./node_modules/lodash-es/_basePropertyDeep.js","webpack:///./node_modules/lodash-es/_basePropertyOf.js","webpack:///./node_modules/lodash-es/_basePullAll.js","webpack:///./node_modules/lodash-es/_basePullAt.js","webpack:///./node_modules/lodash-es/_baseRandom.js","webpack:///./node_modules/lodash-es/_baseRange.js","webpack:///./node_modules/lodash-es/_baseReduce.js","webpack:///./node_modules/lodash-es/_baseRepeat.js","webpack:///./node_modules/lodash-es/_baseRest.js","webpack:///./node_modules/lodash-es/_baseSample.js","webpack:///./node_modules/lodash-es/_baseSampleSize.js","webpack:///./node_modules/lodash-es/_baseSet.js","webpack:///./node_modules/lodash-es/_baseSetData.js","webpack:///./node_modules/lodash-es/_baseSetToString.js","webpack:///./node_modules/lodash-es/_baseShuffle.js","webpack:///./node_modules/lodash-es/_baseSlice.js","webpack:///./node_modules/lodash-es/_baseSome.js","webpack:///./node_modules/lodash-es/_baseSortBy.js","webpack:///./node_modules/lodash-es/_baseSortedIndex.js","webpack:///./node_modules/lodash-es/_baseSortedIndexBy.js","webpack:///./node_modules/lodash-es/_baseSortedUniq.js","webpack:///./node_modules/lodash-es/_baseSum.js","webpack:///./node_modules/lodash-es/_baseTimes.js","webpack:///./node_modules/lodash-es/_baseToNumber.js","webpack:///./node_modules/lodash-es/_baseToPairs.js","webpack:///./node_modules/lodash-es/_baseToString.js","webpack:///./node_modules/lodash-es/_baseTrim.js","webpack:///./node_modules/lodash-es/_baseUnary.js","webpack:///./node_modules/lodash-es/_baseUniq.js","webpack:///./node_modules/lodash-es/_baseUnset.js","webpack:///./node_modules/lodash-es/_baseUpdate.js","webpack:///./node_modules/lodash-es/_baseValues.js","webpack:///./node_modules/lodash-es/_baseWhile.js","webpack:///./node_modules/lodash-es/_baseWrapperValue.js","webpack:///./node_modules/lodash-es/_baseXor.js","webpack:///./node_modules/lodash-es/_baseZipObject.js","webpack:///./node_modules/lodash-es/_cacheHas.js","webpack:///./node_modules/lodash-es/_castArrayLikeObject.js","webpack:///./node_modules/lodash-es/_castFunction.js","webpack:///./node_modules/lodash-es/_castPath.js","webpack:///./node_modules/lodash-es/_castRest.js","webpack:///./node_modules/lodash-es/_castSlice.js","webpack:///./node_modules/lodash-es/_charsEndIndex.js","webpack:///./node_modules/lodash-es/_charsStartIndex.js","webpack:///./node_modules/lodash-es/_cloneArrayBuffer.js","webpack:///./node_modules/lodash-es/_cloneBuffer.js","webpack:///./node_modules/lodash-es/_cloneDataView.js","webpack:///./node_modules/lodash-es/_cloneRegExp.js","webpack:///./node_modules/lodash-es/_cloneSymbol.js","webpack:///./node_modules/lodash-es/_cloneTypedArray.js","webpack:///./node_modules/lodash-es/_compareAscending.js","webpack:///./node_modules/lodash-es/_compareMultiple.js","webpack:///./node_modules/lodash-es/_composeArgs.js","webpack:///./node_modules/lodash-es/_composeArgsRight.js","webpack:///./node_modules/lodash-es/_copyArray.js","webpack:///./node_modules/lodash-es/_copyObject.js","webpack:///./node_modules/lodash-es/_copySymbols.js","webpack:///./node_modules/lodash-es/_copySymbolsIn.js","webpack:///./node_modules/lodash-es/_coreJsData.js","webpack:///./node_modules/lodash-es/_countHolders.js","webpack:///./node_modules/lodash-es/_createAggregator.js","webpack:///./node_modules/lodash-es/_createAssigner.js","webpack:///./node_modules/lodash-es/_createBaseEach.js","webpack:///./node_modules/lodash-es/_createBaseFor.js","webpack:///./node_modules/lodash-es/_createBind.js","webpack:///./node_modules/lodash-es/_createCaseFirst.js","webpack:///./node_modules/lodash-es/_createCompounder.js","webpack:///./node_modules/lodash-es/_createCtor.js","webpack:///./node_modules/lodash-es/_createCurry.js","webpack:///./node_modules/lodash-es/_createFind.js","webpack:///./node_modules/lodash-es/_createFlow.js","webpack:///./node_modules/lodash-es/_createHybrid.js","webpack:///./node_modules/lodash-es/_createInverter.js","webpack:///./node_modules/lodash-es/_createMathOperation.js","webpack:///./node_modules/lodash-es/_createOver.js","webpack:///./node_modules/lodash-es/_createPadding.js","webpack:///./node_modules/lodash-es/_createPartial.js","webpack:///./node_modules/lodash-es/_createRange.js","webpack:///./node_modules/lodash-es/_createRecurry.js","webpack:///./node_modules/lodash-es/_createRelationalOperation.js","webpack:///./node_modules/lodash-es/_createRound.js","webpack:///./node_modules/lodash-es/_createSet.js","webpack:///./node_modules/lodash-es/_createToPairs.js","webpack:///./node_modules/lodash-es/_createWrap.js","webpack:///./node_modules/lodash-es/_customDefaultsAssignIn.js","webpack:///./node_modules/lodash-es/_customDefaultsMerge.js","webpack:///./node_modules/lodash-es/_customOmitClone.js","webpack:///./node_modules/lodash-es/_deburrLetter.js","webpack:///./node_modules/lodash-es/_defineProperty.js","webpack:///./node_modules/lodash-es/_equalArrays.js","webpack:///./node_modules/lodash-es/_equalByTag.js","webpack:///./node_modules/lodash-es/_equalObjects.js","webpack:///./node_modules/lodash-es/_escapeHtmlChar.js","webpack:///./node_modules/lodash-es/_escapeStringChar.js","webpack:///./node_modules/lodash-es/_flatRest.js","webpack:///./node_modules/lodash-es/_freeGlobal.js","webpack:///./node_modules/lodash-es/_getAllKeys.js","webpack:///./node_modules/lodash-es/_getAllKeysIn.js","webpack:///./node_modules/lodash-es/_getData.js","webpack:///./node_modules/lodash-es/_getFuncName.js","webpack:///./node_modules/lodash-es/_getHolder.js","webpack:///./node_modules/lodash-es/_getMapData.js","webpack:///./node_modules/lodash-es/_getMatchData.js","webpack:///./node_modules/lodash-es/_getNative.js","webpack:///./node_modules/lodash-es/_getPrototype.js","webpack:///./node_modules/lodash-es/_getRawTag.js","webpack:///./node_modules/lodash-es/_getSymbols.js","webpack:///./node_modules/lodash-es/_getSymbolsIn.js","webpack:///./node_modules/lodash-es/_getTag.js","webpack:///./node_modules/lodash-es/_getValue.js","webpack:///./node_modules/lodash-es/_getView.js","webpack:///./node_modules/lodash-es/_getWrapDetails.js","webpack:///./node_modules/lodash-es/_hasPath.js","webpack:///./node_modules/lodash-es/_hasUnicode.js","webpack:///./node_modules/lodash-es/_hasUnicodeWord.js","webpack:///./node_modules/lodash-es/_hashClear.js","webpack:///./node_modules/lodash-es/_hashDelete.js","webpack:///./node_modules/lodash-es/_hashGet.js","webpack:///./node_modules/lodash-es/_hashHas.js","webpack:///./node_modules/lodash-es/_hashSet.js","webpack:///./node_modules/lodash-es/_initCloneArray.js","webpack:///./node_modules/lodash-es/_initCloneByTag.js","webpack:///./node_modules/lodash-es/_initCloneObject.js","webpack:///./node_modules/lodash-es/_insertWrapDetails.js","webpack:///./node_modules/lodash-es/_isFlattenable.js","webpack:///./node_modules/lodash-es/_isIndex.js","webpack:///./node_modules/lodash-es/_isIterateeCall.js","webpack:///./node_modules/lodash-es/_isKey.js","webpack:///./node_modules/lodash-es/_isKeyable.js","webpack:///./node_modules/lodash-es/_isLaziable.js","webpack:///./node_modules/lodash-es/_isMaskable.js","webpack:///./node_modules/lodash-es/_isMasked.js","webpack:///./node_modules/lodash-es/_isPrototype.js","webpack:///./node_modules/lodash-es/_isStrictComparable.js","webpack:///./node_modules/lodash-es/_iteratorToArray.js","webpack:///./node_modules/lodash-es/_lazyClone.js","webpack:///./node_modules/lodash-es/_lazyReverse.js","webpack:///./node_modules/lodash-es/_lazyValue.js","webpack:///./node_modules/lodash-es/_listCacheClear.js","webpack:///./node_modules/lodash-es/_listCacheDelete.js","webpack:///./node_modules/lodash-es/_listCacheGet.js","webpack:///./node_modules/lodash-es/_listCacheHas.js","webpack:///./node_modules/lodash-es/_listCacheSet.js","webpack:///./node_modules/lodash-es/_mapCacheClear.js","webpack:///./node_modules/lodash-es/_mapCacheDelete.js","webpack:///./node_modules/lodash-es/_mapCacheGet.js","webpack:///./node_modules/lodash-es/_mapCacheHas.js","webpack:///./node_modules/lodash-es/_mapCacheSet.js","webpack:///./node_modules/lodash-es/_mapToArray.js","webpack:///./node_modules/lodash-es/_matchesStrictComparable.js","webpack:///./node_modules/lodash-es/_memoizeCapped.js","webpack:///./node_modules/lodash-es/_mergeData.js","webpack:///./node_modules/lodash-es/_metaMap.js","webpack:///./node_modules/lodash-es/_nativeCreate.js","webpack:///./node_modules/lodash-es/_nativeKeys.js","webpack:///./node_modules/lodash-es/_nativeKeysIn.js","webpack:///./node_modules/lodash-es/_nodeUtil.js","webpack:///./node_modules/lodash-es/_objectToString.js","webpack:///./node_modules/lodash-es/_overArg.js","webpack:///./node_modules/lodash-es/_overRest.js","webpack:///./node_modules/lodash-es/_parent.js","webpack:///./node_modules/lodash-es/_reEscape.js","webpack:///./node_modules/lodash-es/_reEvaluate.js","webpack:///./node_modules/lodash-es/_reInterpolate.js","webpack:///./node_modules/lodash-es/_realNames.js","webpack:///./node_modules/lodash-es/_reorder.js","webpack:///./node_modules/lodash-es/_replaceHolders.js","webpack:///./node_modules/lodash-es/_root.js","webpack:///./node_modules/lodash-es/_safeGet.js","webpack:///./node_modules/lodash-es/_setCacheAdd.js","webpack:///./node_modules/lodash-es/_setCacheHas.js","webpack:///./node_modules/lodash-es/_setData.js","webpack:///./node_modules/lodash-es/_setToArray.js","webpack:///./node_modules/lodash-es/_setToPairs.js","webpack:///./node_modules/lodash-es/_setToString.js","webpack:///./node_modules/lodash-es/_setWrapToString.js","webpack:///./node_modules/lodash-es/_shortOut.js","webpack:///./node_modules/lodash-es/_shuffleSelf.js","webpack:///./node_modules/lodash-es/_stackClear.js","webpack:///./node_modules/lodash-es/_stackDelete.js","webpack:///./node_modules/lodash-es/_stackGet.js","webpack:///./node_modules/lodash-es/_stackHas.js","webpack:///./node_modules/lodash-es/_stackSet.js","webpack:///./node_modules/lodash-es/_strictIndexOf.js","webpack:///./node_modules/lodash-es/_strictLastIndexOf.js","webpack:///./node_modules/lodash-es/_stringSize.js","webpack:///./node_modules/lodash-es/_stringToArray.js","webpack:///./node_modules/lodash-es/_stringToPath.js","webpack:///./node_modules/lodash-es/_toKey.js","webpack:///./node_modules/lodash-es/_toSource.js","webpack:///./node_modules/lodash-es/_trimmedEndIndex.js","webpack:///./node_modules/lodash-es/_unescapeHtmlChar.js","webpack:///./node_modules/lodash-es/_unicodeSize.js","webpack:///./node_modules/lodash-es/_unicodeToArray.js","webpack:///./node_modules/lodash-es/_unicodeWords.js","webpack:///./node_modules/lodash-es/_updateWrapDetails.js","webpack:///./node_modules/lodash-es/_wrapperClone.js","webpack:///./node_modules/lodash-es/add.js","webpack:///./node_modules/lodash-es/after.js","webpack:///./node_modules/lodash-es/array.default.js","webpack:///./node_modules/lodash-es/array.js","webpack:///./node_modules/lodash-es/ary.js","webpack:///./node_modules/lodash-es/assign.js","webpack:///./node_modules/lodash-es/assignIn.js","webpack:///./node_modules/lodash-es/assignInWith.js","webpack:///./node_modules/lodash-es/assignWith.js","webpack:///./node_modules/lodash-es/at.js","webpack:///./node_modules/lodash-es/attempt.js","webpack:///./node_modules/lodash-es/before.js","webpack:///./node_modules/lodash-es/bind.js","webpack:///./node_modules/lodash-es/bindAll.js","webpack:///./node_modules/lodash-es/bindKey.js","webpack:///./node_modules/lodash-es/camelCase.js","webpack:///./node_modules/lodash-es/capitalize.js","webpack:///./node_modules/lodash-es/castArray.js","webpack:///./node_modules/lodash-es/ceil.js","webpack:///./node_modules/lodash-es/chain.js","webpack:///./node_modules/lodash-es/chunk.js","webpack:///./node_modules/lodash-es/clamp.js","webpack:///./node_modules/lodash-es/clone.js","webpack:///./node_modules/lodash-es/cloneDeep.js","webpack:///./node_modules/lodash-es/cloneDeepWith.js","webpack:///./node_modules/lodash-es/cloneWith.js","webpack:///./node_modules/lodash-es/collection.default.js","webpack:///./node_modules/lodash-es/collection.js","webpack:///./node_modules/lodash-es/commit.js","webpack:///./node_modules/lodash-es/compact.js","webpack:///./node_modules/lodash-es/concat.js","webpack:///./node_modules/lodash-es/cond.js","webpack:///./node_modules/lodash-es/conforms.js","webpack:///./node_modules/lodash-es/conformsTo.js","webpack:///./node_modules/lodash-es/constant.js","webpack:///./node_modules/lodash-es/countBy.js","webpack:///./node_modules/lodash-es/create.js","webpack:///./node_modules/lodash-es/curry.js","webpack:///./node_modules/lodash-es/curryRight.js","webpack:///./node_modules/lodash-es/date.default.js","webpack:///./node_modules/lodash-es/date.js","webpack:///./node_modules/lodash-es/debounce.js","webpack:///./node_modules/lodash-es/deburr.js","webpack:///./node_modules/lodash-es/defaultTo.js","webpack:///./node_modules/lodash-es/defaults.js","webpack:///./node_modules/lodash-es/defaultsDeep.js","webpack:///./node_modules/lodash-es/defer.js","webpack:///./node_modules/lodash-es/delay.js","webpack:///./node_modules/lodash-es/difference.js","webpack:///./node_modules/lodash-es/differenceBy.js","webpack:///./node_modules/lodash-es/differenceWith.js","webpack:///./node_modules/lodash-es/divide.js","webpack:///./node_modules/lodash-es/drop.js","webpack:///./node_modules/lodash-es/dropRight.js","webpack:///./node_modules/lodash-es/dropRightWhile.js","webpack:///./node_modules/lodash-es/dropWhile.js","webpack:///./node_modules/lodash-es/each.js","webpack:///./node_modules/lodash-es/eachRight.js","webpack:///./node_modules/lodash-es/endsWith.js","webpack:///./node_modules/lodash-es/entries.js","webpack:///./node_modules/lodash-es/entriesIn.js","webpack:///./node_modules/lodash-es/eq.js","webpack:///./node_modules/lodash-es/escape.js","webpack:///./node_modules/lodash-es/escapeRegExp.js","webpack:///./node_modules/lodash-es/every.js","webpack:///./node_modules/lodash-es/extend.js","webpack:///./node_modules/lodash-es/extendWith.js","webpack:///./node_modules/lodash-es/fill.js","webpack:///./node_modules/lodash-es/filter.js","webpack:///./node_modules/lodash-es/find.js","webpack:///./node_modules/lodash-es/findIndex.js","webpack:///./node_modules/lodash-es/findKey.js","webpack:///./node_modules/lodash-es/findLast.js","webpack:///./node_modules/lodash-es/findLastIndex.js","webpack:///./node_modules/lodash-es/findLastKey.js","webpack:///./node_modules/lodash-es/first.js","webpack:///./node_modules/lodash-es/flatMap.js","webpack:///./node_modules/lodash-es/flatMapDeep.js","webpack:///./node_modules/lodash-es/flatMapDepth.js","webpack:///./node_modules/lodash-es/flatten.js","webpack:///./node_modules/lodash-es/flattenDeep.js","webpack:///./node_modules/lodash-es/flattenDepth.js","webpack:///./node_modules/lodash-es/flip.js","webpack:///./node_modules/lodash-es/floor.js","webpack:///./node_modules/lodash-es/flow.js","webpack:///./node_modules/lodash-es/flowRight.js","webpack:///./node_modules/lodash-es/forEach.js","webpack:///./node_modules/lodash-es/forEachRight.js","webpack:///./node_modules/lodash-es/forIn.js","webpack:///./node_modules/lodash-es/forInRight.js","webpack:///./node_modules/lodash-es/forOwn.js","webpack:///./node_modules/lodash-es/forOwnRight.js","webpack:///./node_modules/lodash-es/fromPairs.js","webpack:///./node_modules/lodash-es/function.default.js","webpack:///./node_modules/lodash-es/function.js","webpack:///./node_modules/lodash-es/functions.js","webpack:///./node_modules/lodash-es/functionsIn.js","webpack:///./node_modules/lodash-es/get.js","webpack:///./node_modules/lodash-es/groupBy.js","webpack:///./node_modules/lodash-es/gt.js","webpack:///./node_modules/lodash-es/gte.js","webpack:///./node_modules/lodash-es/has.js","webpack:///./node_modules/lodash-es/hasIn.js","webpack:///./node_modules/lodash-es/head.js","webpack:///./node_modules/lodash-es/identity.js","webpack:///./node_modules/lodash-es/inRange.js","webpack:///./node_modules/lodash-es/includes.js","webpack:///./node_modules/lodash-es/indexOf.js","webpack:///./node_modules/lodash-es/initial.js","webpack:///./node_modules/lodash-es/intersection.js","webpack:///./node_modules/lodash-es/intersectionBy.js","webpack:///./node_modules/lodash-es/intersectionWith.js","webpack:///./node_modules/lodash-es/invert.js","webpack:///./node_modules/lodash-es/invertBy.js","webpack:///./node_modules/lodash-es/invoke.js","webpack:///./node_modules/lodash-es/invokeMap.js","webpack:///./node_modules/lodash-es/isArguments.js","webpack:///./node_modules/lodash-es/isArray.js","webpack:///./node_modules/lodash-es/isArrayBuffer.js","webpack:///./node_modules/lodash-es/isArrayLike.js","webpack:///./node_modules/lodash-es/isArrayLikeObject.js","webpack:///./node_modules/lodash-es/isBoolean.js","webpack:///./node_modules/lodash-es/isBuffer.js","webpack:///./node_modules/lodash-es/isDate.js","webpack:///./node_modules/lodash-es/isElement.js","webpack:///./node_modules/lodash-es/isEmpty.js","webpack:///./node_modules/lodash-es/isEqual.js","webpack:///./node_modules/lodash-es/isEqualWith.js","webpack:///./node_modules/lodash-es/isError.js","webpack:///./node_modules/lodash-es/isFinite.js","webpack:///./node_modules/lodash-es/isFunction.js","webpack:///./node_modules/lodash-es/isInteger.js","webpack:///./node_modules/lodash-es/isLength.js","webpack:///./node_modules/lodash-es/isMap.js","webpack:///./node_modules/lodash-es/isMatch.js","webpack:///./node_modules/lodash-es/isMatchWith.js","webpack:///./node_modules/lodash-es/isNaN.js","webpack:///./node_modules/lodash-es/isNative.js","webpack:///./node_modules/lodash-es/isNil.js","webpack:///./node_modules/lodash-es/isNull.js","webpack:///./node_modules/lodash-es/isNumber.js","webpack:///./node_modules/lodash-es/isObject.js","webpack:///./node_modules/lodash-es/isObjectLike.js","webpack:///./node_modules/lodash-es/isPlainObject.js","webpack:///./node_modules/lodash-es/isRegExp.js","webpack:///./node_modules/lodash-es/isSafeInteger.js","webpack:///./node_modules/lodash-es/isSet.js","webpack:///./node_modules/lodash-es/isString.js","webpack:///./node_modules/lodash-es/isSymbol.js","webpack:///./node_modules/lodash-es/isTypedArray.js","webpack:///./node_modules/lodash-es/isUndefined.js","webpack:///./node_modules/lodash-es/isWeakMap.js","webpack:///./node_modules/lodash-es/isWeakSet.js","webpack:///./node_modules/lodash-es/iteratee.js","webpack:///./node_modules/lodash-es/join.js","webpack:///./node_modules/lodash-es/kebabCase.js","webpack:///./node_modules/lodash-es/keyBy.js","webpack:///./node_modules/lodash-es/keys.js","webpack:///./node_modules/lodash-es/keysIn.js","webpack:///./node_modules/lodash-es/lang.default.js","webpack:///./node_modules/lodash-es/lang.js","webpack:///./node_modules/lodash-es/last.js","webpack:///./node_modules/lodash-es/lastIndexOf.js","webpack:///./node_modules/lodash-es/lodash.default.js","webpack:///./node_modules/lodash-es/lodash.js","webpack:///./node_modules/lodash-es/lowerCase.js","webpack:///./node_modules/lodash-es/lowerFirst.js","webpack:///./node_modules/lodash-es/lt.js","webpack:///./node_modules/lodash-es/lte.js","webpack:///./node_modules/lodash-es/map.js","webpack:///./node_modules/lodash-es/mapKeys.js","webpack:///./node_modules/lodash-es/mapValues.js","webpack:///./node_modules/lodash-es/matches.js","webpack:///./node_modules/lodash-es/matchesProperty.js","webpack:///./node_modules/lodash-es/math.default.js","webpack:///./node_modules/lodash-es/math.js","webpack:///./node_modules/lodash-es/max.js","webpack:///./node_modules/lodash-es/maxBy.js","webpack:///./node_modules/lodash-es/mean.js","webpack:///./node_modules/lodash-es/meanBy.js","webpack:///./node_modules/lodash-es/memoize.js","webpack:///./node_modules/lodash-es/merge.js","webpack:///./node_modules/lodash-es/mergeWith.js","webpack:///./node_modules/lodash-es/method.js","webpack:///./node_modules/lodash-es/methodOf.js","webpack:///./node_modules/lodash-es/min.js","webpack:///./node_modules/lodash-es/minBy.js","webpack:///./node_modules/lodash-es/mixin.js","webpack:///./node_modules/lodash-es/multiply.js","webpack:///./node_modules/lodash-es/negate.js","webpack:///./node_modules/lodash-es/next.js","webpack:///./node_modules/lodash-es/noop.js","webpack:///./node_modules/lodash-es/now.js","webpack:///./node_modules/lodash-es/nth.js","webpack:///./node_modules/lodash-es/nthArg.js","webpack:///./node_modules/lodash-es/number.default.js","webpack:///./node_modules/lodash-es/number.js","webpack:///./node_modules/lodash-es/object.default.js","webpack:///./node_modules/lodash-es/object.js","webpack:///./node_modules/lodash-es/omit.js","webpack:///./node_modules/lodash-es/omitBy.js","webpack:///./node_modules/lodash-es/once.js","webpack:///./node_modules/lodash-es/orderBy.js","webpack:///./node_modules/lodash-es/over.js","webpack:///./node_modules/lodash-es/overArgs.js","webpack:///./node_modules/lodash-es/overEvery.js","webpack:///./node_modules/lodash-es/overSome.js","webpack:///./node_modules/lodash-es/pad.js","webpack:///./node_modules/lodash-es/padEnd.js","webpack:///./node_modules/lodash-es/padStart.js","webpack:///./node_modules/lodash-es/parseInt.js","webpack:///./node_modules/lodash-es/partial.js","webpack:///./node_modules/lodash-es/partialRight.js","webpack:///./node_modules/lodash-es/partition.js","webpack:///./node_modules/lodash-es/pick.js","webpack:///./node_modules/lodash-es/pickBy.js","webpack:///./node_modules/lodash-es/plant.js","webpack:///./node_modules/lodash-es/property.js","webpack:///./node_modules/lodash-es/propertyOf.js","webpack:///./node_modules/lodash-es/pull.js","webpack:///./node_modules/lodash-es/pullAll.js","webpack:///./node_modules/lodash-es/pullAllBy.js","webpack:///./node_modules/lodash-es/pullAllWith.js","webpack:///./node_modules/lodash-es/pullAt.js","webpack:///./node_modules/lodash-es/random.js","webpack:///./node_modules/lodash-es/range.js","webpack:///./node_modules/lodash-es/rangeRight.js","webpack:///./node_modules/lodash-es/rearg.js","webpack:///./node_modules/lodash-es/reduce.js","webpack:///./node_modules/lodash-es/reduceRight.js","webpack:///./node_modules/lodash-es/reject.js","webpack:///./node_modules/lodash-es/remove.js","webpack:///./node_modules/lodash-es/repeat.js","webpack:///./node_modules/lodash-es/replace.js","webpack:///./node_modules/lodash-es/rest.js","webpack:///./node_modules/lodash-es/result.js","webpack:///./node_modules/lodash-es/reverse.js","webpack:///./node_modules/lodash-es/round.js","webpack:///./node_modules/lodash-es/sample.js","webpack:///./node_modules/lodash-es/sampleSize.js","webpack:///./node_modules/lodash-es/seq.default.js","webpack:///./node_modules/lodash-es/seq.js","webpack:///./node_modules/lodash-es/set.js","webpack:///./node_modules/lodash-es/setWith.js","webpack:///./node_modules/lodash-es/shuffle.js","webpack:///./node_modules/lodash-es/size.js","webpack:///./node_modules/lodash-es/slice.js","webpack:///./node_modules/lodash-es/snakeCase.js","webpack:///./node_modules/lodash-es/some.js","webpack:///./node_modules/lodash-es/sortBy.js","webpack:///./node_modules/lodash-es/sortedIndex.js","webpack:///./node_modules/lodash-es/sortedIndexBy.js","webpack:///./node_modules/lodash-es/sortedIndexOf.js","webpack:///./node_modules/lodash-es/sortedLastIndex.js","webpack:///./node_modules/lodash-es/sortedLastIndexBy.js","webpack:///./node_modules/lodash-es/sortedLastIndexOf.js","webpack:///./node_modules/lodash-es/sortedUniq.js","webpack:///./node_modules/lodash-es/sortedUniqBy.js","webpack:///./node_modules/lodash-es/split.js","webpack:///./node_modules/lodash-es/spread.js","webpack:///./node_modules/lodash-es/startCase.js","webpack:///./node_modules/lodash-es/startsWith.js","webpack:///./node_modules/lodash-es/string.default.js","webpack:///./node_modules/lodash-es/string.js","webpack:///./node_modules/lodash-es/stubArray.js","webpack:///./node_modules/lodash-es/stubFalse.js","webpack:///./node_modules/lodash-es/stubObject.js","webpack:///./node_modules/lodash-es/stubString.js","webpack:///./node_modules/lodash-es/stubTrue.js","webpack:///./node_modules/lodash-es/subtract.js","webpack:///./node_modules/lodash-es/sum.js","webpack:///./node_modules/lodash-es/sumBy.js","webpack:///./node_modules/lodash-es/tail.js","webpack:///./node_modules/lodash-es/take.js","webpack:///./node_modules/lodash-es/takeRight.js","webpack:///./node_modules/lodash-es/takeRightWhile.js","webpack:///./node_modules/lodash-es/takeWhile.js","webpack:///./node_modules/lodash-es/tap.js","webpack:///./node_modules/lodash-es/template.js","webpack:///./node_modules/lodash-es/templateSettings.js","webpack:///./node_modules/lodash-es/throttle.js","webpack:///./node_modules/lodash-es/thru.js","webpack:///./node_modules/lodash-es/times.js","webpack:///./node_modules/lodash-es/toArray.js","webpack:///./node_modules/lodash-es/toFinite.js","webpack:///./node_modules/lodash-es/toInteger.js","webpack:///./node_modules/lodash-es/toIterator.js","webpack:///./node_modules/lodash-es/toJSON.js","webpack:///./node_modules/lodash-es/toLength.js","webpack:///./node_modules/lodash-es/toLower.js","webpack:///./node_modules/lodash-es/toNumber.js","webpack:///./node_modules/lodash-es/toPairs.js","webpack:///./node_modules/lodash-es/toPairsIn.js","webpack:///./node_modules/lodash-es/toPath.js","webpack:///./node_modules/lodash-es/toPlainObject.js","webpack:///./node_modules/lodash-es/toSafeInteger.js","webpack:///./node_modules/lodash-es/toString.js","webpack:///./node_modules/lodash-es/toUpper.js","webpack:///./node_modules/lodash-es/transform.js","webpack:///./node_modules/lodash-es/trim.js","webpack:///./node_modules/lodash-es/trimEnd.js","webpack:///./node_modules/lodash-es/trimStart.js","webpack:///./node_modules/lodash-es/truncate.js","webpack:///./node_modules/lodash-es/unary.js","webpack:///./node_modules/lodash-es/unescape.js","webpack:///./node_modules/lodash-es/union.js","webpack:///./node_modules/lodash-es/unionBy.js","webpack:///./node_modules/lodash-es/unionWith.js","webpack:///./node_modules/lodash-es/uniq.js","webpack:///./node_modules/lodash-es/uniqBy.js","webpack:///./node_modules/lodash-es/uniqWith.js","webpack:///./node_modules/lodash-es/uniqueId.js","webpack:///./node_modules/lodash-es/unset.js","webpack:///./node_modules/lodash-es/unzip.js","webpack:///./node_modules/lodash-es/unzipWith.js","webpack:///./node_modules/lodash-es/update.js","webpack:///./node_modules/lodash-es/updateWith.js","webpack:///./node_modules/lodash-es/upperCase.js","webpack:///./node_modules/lodash-es/upperFirst.js","webpack:///./node_modules/lodash-es/util.default.js","webpack:///./node_modules/lodash-es/util.js","webpack:///./node_modules/lodash-es/value.js","webpack:///./node_modules/lodash-es/valueOf.js","webpack:///./node_modules/lodash-es/values.js","webpack:///./node_modules/lodash-es/valuesIn.js","webpack:///./node_modules/lodash-es/without.js","webpack:///./node_modules/lodash-es/words.js","webpack:///./node_modules/lodash-es/wrap.js","webpack:///./node_modules/lodash-es/wrapperAt.js","webpack:///./node_modules/lodash-es/wrapperChain.js","webpack:///./node_modules/lodash-es/wrapperLodash.js","webpack:///./node_modules/lodash-es/wrapperReverse.js","webpack:///./node_modules/lodash-es/wrapperValue.js","webpack:///./node_modules/lodash-es/xor.js","webpack:///./node_modules/lodash-es/xorBy.js","webpack:///./node_modules/lodash-es/xorWith.js","webpack:///./node_modules/lodash-es/zip.js","webpack:///./node_modules/lodash-es/zipObject.js","webpack:///./node_modules/lodash-es/zipObjectDeep.js","webpack:///./node_modules/lodash-es/zipWith.js","webpack:///./src/components/UI/TextEditor.vue?99e5","webpack:///(webpack)/buildin/harmony-module.js","webpack:///./src/components/UI/TextEditor.vue?8a9f","webpack:///./src/components/UI/TextEditor.vue?8498","webpack:///./src/components/UI/TextEditor.vue?4359","webpack:///./src/components/UI/TextEditor.vue?a98c"],"names":["_callSuper","t","o","e","getPrototypeOf","possibleConstructorReturn","isNativeReflectConstruct","Reflect","construct","constructor","apply","_construct","r","arguments","push","p","bind","setPrototypeOf","prototype","_get","get","superPropBase","n","Object","getOwnPropertyDescriptor","call","length","value","_isNativeFunction","Function","toString","indexOf","_readOnlyError","TypeError","_superPropBase","hasOwnProperty","_superPropGet","_wrapNativeSuper","Map","isNativeFunction","has","set","Wrapper","create","enumerable","writable","configurable","props","type","String","default","configType","height","language","error","Array","components","ckeditor","CKEditor","component","data","editor","ClassicEditor","mValue","configuration","lite","plugins","Essentials","RemoveFormat","Bold","Italic","Underline","toolbar","standard","forcePasteAsPlainText","Link","List","computed","hasError","isArray","methods","onReady","clipboardPlugin","editingView","editing","view","document","on","evt","isReadOnly","dataTransfer","content","plainTextToHtml","getData","_htmlDataProcessor","toView","fire","scrollToTheSelection","stop","isSoft","execute","preventDefault","priority","onBlur","$emit","onChange","onFocus","onInput","render","_vm","_c","_self","attrs","name","mode","class","staticClass","config","ready","blur","keyup","focus","input","model","callback","$$v","expression","domProps","innerHTML","_s","_l","message","index","key","concat","_e","staticRenderFns","_withStripped"],"mappings":";;;;;;;;;;;;;;;;;;AAAiD;AACoB;AACE;AACvE,SAASA,UAAUA,CAACC,CAAC,EAAEC,CAAC,EAAEC,CAAC,EAAE;EAC3B,OAAOD,CAAC,GAAGE,0EAAc,CAACF,CAAC,CAAC,EAAEG,qFAAyB,CAACJ,CAAC,EAAEK,oFAAwB,CAAC,CAAC,GAAGC,OAAO,CAACC,SAAS,CAACN,CAAC,EAAEC,CAAC,IAAI,EAAE,EAAEC,0EAAc,CAACH,CAAC,CAAC,CAACQ,WAAW,CAAC,GAAGP,CAAC,CAACQ,KAAK,CAACT,CAAC,EAAEE,CAAC,CAAC,CAAC;AACvK;;;;;;;;;;;;;;;;;;;;;;;ACLqE;AACpB;AACjD,SAASQ,UAAUA,CAACV,CAAC,EAAEE,CAAC,EAAES,CAAC,EAAE;EAC3B,IAAIN,oFAAwB,CAAC,CAAC,EAAE,OAAOC,OAAO,CAACC,SAAS,CAACE,KAAK,CAAC,IAAI,EAAEG,SAAS,CAAC;EAC/E,IAAIX,CAAC,GAAG,CAAC,IAAI,CAAC;EACdA,CAAC,CAACY,IAAI,CAACJ,KAAK,CAACR,CAAC,EAAEC,CAAC,CAAC;EAClB,IAAIY,CAAC,GAAG,KAAKd,CAAC,CAACe,IAAI,CAACN,KAAK,CAACT,CAAC,EAAEC,CAAC,CAAC,EAAE,CAAC;EAClC,OAAOU,CAAC,IAAIK,0EAAc,CAACF,CAAC,EAAEH,CAAC,CAACM,SAAS,CAAC,EAAEH,CAAC;AAC/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACR+C;AAC/C,SAASI,IAAIA,CAAA,EAAG;EACd,OAAOA,IAAI,GAAG,WAAW,IAAI,OAAOZ,OAAO,IAAIA,OAAO,CAACa,GAAG,GAAGb,OAAO,CAACa,GAAG,CAACJ,IAAI,CAAC,CAAC,GAAG,UAAUb,CAAC,EAAEF,CAAC,EAAEW,CAAC,EAAE;IACnG,IAAIG,CAAC,GAAGM,yEAAa,CAAClB,CAAC,EAAEF,CAAC,CAAC;IAC3B,IAAIc,CAAC,EAAE;MACL,IAAIO,CAAC,GAAGC,MAAM,CAACC,wBAAwB,CAACT,CAAC,EAAEd,CAAC,CAAC;MAC7C,OAAOqB,CAAC,CAACF,GAAG,GAAGE,CAAC,CAACF,GAAG,CAACK,IAAI,CAACZ,SAAS,CAACa,MAAM,GAAG,CAAC,GAAGvB,CAAC,GAAGS,CAAC,CAAC,GAAGU,CAAC,CAACK,KAAK;IACnE;EACF,CAAC,EAAER,IAAI,CAACT,KAAK,CAAC,IAAI,EAAEG,SAAS,CAAC;AAChC;;;;;;;;;;;;;;;;;;;;;ACTA,SAASe,iBAAiBA,CAAC3B,CAAC,EAAE;EAC5B,IAAI;IACF,OAAO,CAAC,CAAC,KAAK4B,QAAQ,CAACC,QAAQ,CAACL,IAAI,CAACxB,CAAC,CAAC,CAAC8B,OAAO,CAAC,eAAe,CAAC;EAClE,CAAC,CAAC,OAAOT,CAAC,EAAE;IACV,OAAO,UAAU,IAAI,OAAOrB,CAAC;EAC/B;AACF;;;;;;;;;;;;;;;;;ACNA,SAAS+B,cAAcA,CAACpB,CAAC,EAAE;EACzB,MAAM,IAAIqB,SAAS,CAAC,GAAG,GAAGrB,CAAC,GAAG,gBAAgB,CAAC;AACjD;;;;;;;;;;;;;;ACFA;AAAA;AAAiD;AACjD,SAASsB,cAAcA,CAACjC,CAAC,EAAEC,CAAC,EAAE;EAC5B,OAAO,CAAC,CAAC,CAAC,CAACiC,cAAc,CAACV,IAAI,CAACxB,CAAC,EAAEC,CAAC,CAAC,IAAI,IAAI,MAAMD,CAAC,GAAGG,0EAAc,CAACH,CAAC,CAAC,CAAC,EAAE;EAC1E,OAAOA,CAAC;AACV;;;;;;;;;;;;;;ACJA;AAAA;AAAA;AAA2B;AACsB;AACjD,SAASmC,aAAaA,CAACnC,CAAC,EAAEC,CAAC,EAAEC,CAAC,EAAES,CAAC,EAAE;EACjC,IAAIG,CAAC,GAAGK,+DAAG,CAAChB,0EAAc,CAAC,CAAC,GAAGQ,CAAC,GAAGX,CAAC,CAACiB,SAAS,GAAGjB,CAAC,CAAC,EAAEC,CAAC,EAAEC,CAAC,CAAC;EAC1D,OAAO,CAAC,GAAGS,CAAC,IAAI,UAAU,IAAI,OAAOG,CAAC,GAAG,UAAUd,CAAC,EAAE;IACpD,OAAOc,CAAC,CAACL,KAAK,CAACP,CAAC,EAAEF,CAAC,CAAC;EACtB,CAAC,GAAGc,CAAC;AACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPiD;AACA;AACI;AACd;AACvC,SAASsB,gBAAgBA,CAACpC,CAAC,EAAE;EAC3B,IAAIW,CAAC,GAAG,UAAU,IAAI,OAAO0B,GAAG,GAAG,IAAIA,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;EACrD,OAAOD,gBAAgB,GAAG,SAASA,gBAAgBA,CAACpC,CAAC,EAAE;IACrD,IAAI,IAAI,KAAKA,CAAC,IAAI,CAACsC,4EAAgB,CAACtC,CAAC,CAAC,EAAE,OAAOA,CAAC;IAChD,IAAI,UAAU,IAAI,OAAOA,CAAC,EAAE,MAAM,IAAIgC,SAAS,CAAC,oDAAoD,CAAC;IACrG,IAAI,KAAK,CAAC,KAAKrB,CAAC,EAAE;MAChB,IAAIA,CAAC,CAAC4B,GAAG,CAACvC,CAAC,CAAC,EAAE,OAAOW,CAAC,CAACQ,GAAG,CAACnB,CAAC,CAAC;MAC7BW,CAAC,CAAC6B,GAAG,CAACxC,CAAC,EAAEyC,OAAO,CAAC;IACnB;IACA,SAASA,OAAOA,CAAA,EAAG;MACjB,OAAOlC,qEAAS,CAACP,CAAC,EAAEY,SAAS,EAAET,0EAAc,CAAC,IAAI,CAAC,CAACK,WAAW,CAAC;IAClE;IACA,OAAOiC,OAAO,CAACxB,SAAS,GAAGK,MAAM,CAACoB,MAAM,CAAC1C,CAAC,CAACiB,SAAS,EAAE;MACpDT,WAAW,EAAE;QACXkB,KAAK,EAAEe,OAAO;QACdE,UAAU,EAAE,CAAC,CAAC;QACdC,QAAQ,EAAE,CAAC,CAAC;QACZC,YAAY,EAAE,CAAC;MACjB;IACF,CAAC,CAAC,EAAE7B,0EAAc,CAACyB,OAAO,EAAEzC,CAAC,CAAC;EAChC,CAAC,EAAEoC,gBAAgB,CAACpC,CAAC,CAAC;AACxB;;;;;;;;;;;;;;ACzBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2D;;AAE3D;AACA,6BAA6B,kCAAkC;AAC/D;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,2BAA2B,6CAA6C;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iCAAiC;AAC9C,aAAa,OAAO;AACpB;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA,QAAQ,uFAAuF;AAC/F;AACA,8CAA8C;AAC9C,0CAA0C;AAC1C;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;;AAEA;AACA,4BAA4B,aAAa,MAAM,iBAAiB;AAChE;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC;AACnC;AACA;AACA;AACA,uDAAuD,sDAAsD;AAC7G;AACA;AACA,2DAA2D,+CAA+C;AAC1G;AACA,QAAQ,sDAAsD;AAC9D;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA,0BAA0B,6IAA0B;AACpD;AACA;AACA,+BAA+B,+BAA+B;AAC9D;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,oFAAO;;;;;;;;;;;;;;AChLT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AACZ;AACV;;AAEnC;AACA;AACA;AACA,sCAAsC;AACtC,YAAY,qCAAqC;AACjD;AACA,4CAA4C;AAC5C,QAAQ,6DAA6D;AACrE;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,iEAAW,EAAE,4DAAM;AACjC;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;ACrDR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC5C;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AACN;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;;AAEP;AACA,oCAAoC,iEAAgB;;AAEpD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;ACrFR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACyD;AACa;AACpB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kIAAe;AACvB,eAAe,6HAAU;AACzB;AACA,IAAI,4HAAS;AACb,WAAW,+HAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4FAAU;AAC7C;AACA;AACA,8BAA8B,qEAAQ;AACtC;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA,SAAS;AACT,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;ACxDR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AACN;AACV;;AAEzC;AACA;AACA;AACA,sCAAsC;AACtC,YAAY,qCAAqC;AACjD;AACA,4CAA4C,6DAA6D;AACzG,IAAI,mDAAmD;AACvD;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,qEAAa,EAAE,gEAAQ;AACrC;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;ACrDR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AACN;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;;AAEP;AACA,sCAAsC,iEAAgB;;AAEtD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;AC1ER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACyD;AACa;AAChB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kIAAe;AACvB,eAAe,6HAAU;AACzB;AACA,IAAI,4HAAS;AACb,WAAW,+HAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4FAAU;AAC7C;AACA;AACA,8BAA8B,uEAAU;AACxC;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA,SAAS;AACT,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;ACxDR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AACG;AACV;;AAElD;AACA;AACA;AACA,sCAAsC;AACtC,YAAY,qCAAqC;AACjD;AACA,4CAA4C,sEAAsE;AAClH,IAAI,4DAA4D;AAChE;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAgB,EAAE,sEAAW;AAC3C;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;ACrDR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AACN;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA,yCAAyC,iEAAgB;;AAEzD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;AC1ER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACyD;AACa;AACV;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kIAAe;AACvB,eAAe,6HAAU;AACzB;AACA,IAAI,4HAAS;AACb,WAAW,+HAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4FAAU;AAC7C;AACA;AACA,8BAA8B,0EAAa;AAC3C;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA,SAAS;AACT,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;ACxDO,oyB;;;;;;;;;;;;;ACAA,wf;;;;;;;;;;;;;ACAA,8T;;;;;;;;;;;;;ACAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AACjD;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AACL;AACE;AACc;AACX;AACsC;;AAE/F;AACA;AACA;AACA;AACA;AACA,iDAAiD,kEAAkE;AACnH;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,gEAAgE;AAClF;AACA,oCAAoC,+GAAiB;AACrD,uBAAuB,kEAAiB;;AAExC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,oBAAoB,qFAAsB;AAC1C,SAAS;AACT,oBAAoB,8EAAe;AACnC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;;AAEP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,kDAAkD,iFAAe;AACjE;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;AACR;AACA;AACA;AACA;AACA;AACA,wBAAwB,sFAAsF;AAC9G;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,qDAAqD;AAChE;AACA,IAAI,kEAAkE;AACtE,WAAW,2CAA2C;AACtD;AACA;AACA,aAAa,sDAAsD,MAAM;AACzE;AACA;AACA,wBAAwB,wFAAwF;AAChH;AACA;AACA;AACA;AACA,WAAW,oDAAoD;AAC/D;AACA;AACA,qBAAqB,iEAAiE;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2CAA2C;AACvD;AACA;AACA;AACA,+CAA+C,kEAAkE;AACjH;AACA,YAAY,qDAAqD;AACjE;AACA;AACA;AACA;AACA,YAAY,aAAa;AACzB;;;;;;;;;;;;;;ACzMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AACpD;AACK;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE6F;AAC7B;AACtB;;AAE1C;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,MAAM;AACN,MAAM;AACN,MAAM;AACN,MAAM;AACN,MAAM;AACN;AACA;AACA,iDAAiD,2CAA2C;AAC5F,QAAQ,oEAAoE;AAC5E,IAAI,2CAA2C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,0BAA0B,uFAAS;AACnC;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA,0BAA0B,6DAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,6GAAgB;AACsB;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA,+BAA+B,mBAAmB,MAAM,kBAAkB;AAC1E;AACA,wBAAwB,sFAAsF;AAC9G;AACA;AACA;AACA;AACA,2EAA2E;AAC3E,yBAAyB,2CAA2C,SAAS,+CAA+C;AAC5H,qBAAqB,2CAA2C;AAChE;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,2CAA2C;AACtD,WAAW,uCAAuC;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,2DAA2D;AAC7E;AACA,2EAA2E;AAC3E,yBAAyB,2CAA2C,SAAS,+CAA+C;AAC5H,qBAAqB,2CAA2C;AAChE;AACA;AACA;AACA,WAAW,sDAAsD;AACjE;;AAEA;AACA;AACA;AACA,kBAAkB,2DAA2D;AAC7E;AACA,2EAA2E;AAC3E,yBAAyB,2CAA2C,SAAS,+CAA+C;AAC5H,qBAAqB,2CAA2C;AAChE;AACA;AACA;AACA,WAAW,sDAAsD;AACjE,WAAW,+BAA+B;AAC1C;;AAEA;AACA;AACA;AACA,kBAAkB,2DAA2D;AAC7E;AACA,2EAA2E;AAC3E,yBAAyB,2CAA2C,SAAS,+CAA+C;AAC5H,qBAAqB,2CAA2C;AAChE;AACA;AACA;AACA,WAAW,sDAAsD;AACjE;;AAEA;AACA;AACA;AACA,kBAAkB,2DAA2D;AAC7E;AACA,2EAA2E;AAC3E,yBAAyB,2CAA2C,SAAS,+CAA+C;AAC5H,qBAAqB,2CAA2C;AAChE;AACA;AACA;AACA,WAAW,sDAAsD;AACjE;;AAEA;AACA;AACA;AACA,kBAAkB,2DAA2D;AAC7E;AACA,2EAA2E;AAC3E,yBAAyB,2CAA2C,SAAS,+CAA+C;AAC5H,qBAAqB,2CAA2C;AAChE;AACA;AACA;AACA,WAAW,sDAAsD;AACjE;;AAEA;AACA,qBAAqB,uDAAuD;AAC5E,IAAI,sDAAsD,MAAM,qDAAqD;AACrH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,2CAA2C;AACvD,G;;;;;;;;;;;;;ACxNA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACxD;AACF;AACD;AACW;AACL;AACH;AACI;AACD;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,C;;;;;;;;;;;;;AC5FA;AAAA;AAAA;AAAA;AAAA;AAA2C;AACG;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACe;AACf;AACA,6FAA6F;AAC7F;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,C;;;;;;;;;;;;;AC1BA;AAAA;AAAA;AAAA;AAAA;AAA2C;AACG;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACe;AACf;AACA;AACA,sBAAsB,sBAAsB;AAC5C;AACA;AACA;AACA,yBAAyB,yBAAyB;AAClD;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,C;;;;;;;;;;;;;ACpCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AAClF;AACD;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,6CAA6C;AAC1D;AACA,WAAW,6BAA6B;AACxC,aAAa,OAAO;AACpB;AACe;AACf;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,oBAAoB,6IAA0B;AAC9C;AACA;AACA,yBAAyB,+BAA+B;AACxD;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AC5DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACpD;AACb;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE4E;AACxB;;AAEpD;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAA8C;AACtD;AACA,2DAA2D,kEAAkE;AAC7H,oDAAoD,kEAAkE;AACtH;AACA,2DAA2D,4DAA4D;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iCAAiC;AAC9C;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,2BAA2B;AACxG;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6EAA6E,2BAA2B;AACxG;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,sBAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA,8BAA8B,qBAAqB;AACnD;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;;AAEA;AACA,2DAA2D,iBAAiB,MAAM,aAAa;AAC/F;AACA;AACA;AACA,MAAM,iGAAiG;AACvG;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qEAAqE,wCAAwC;AAC7G,4DAA4D,0CAA0C;AACtG;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,0BAA0B;AAC1B;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,qDAAqD,0BAA0B;AAC/E;AACA,eAAe,OAAO,2DAA2D,wCAAwC;AACzH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA,qDAAqD,0BAA0B,OAAO,0BAA0B;AAChH;AACA,eAAe,OAAO,mDAAmD,qBAAqB;AAC9F;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kEAAkE;AAClE;AACA;AACA,sFAAsF,iBAAiB;AACvG,wEAAwE,qBAAqB;AAC7F;AACA,wEAAwE,iBAAiB;AACzF;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA,YAAY,4DAA4D;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AAC6B;AAC9B,0FAAG,UAAU,8FAAe;;AAE5B;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AC1QA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AAChB;AACZ;AACM;AACN;AACrD;AACZ;AACa;AACD;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwE;;AAExE;AACA,yDAAyD,kEAAkE;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,4BAA4B;AACzC;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA,kBAAkB,4FAAa;AAC/B;AACA,SAAS;AACT;AACA,4FAA4F,aAAa;AACzG;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB,aAAa,+HAAY;AACzB;AACA;AACA,8BAA8B,qIAAkB;AAChD;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB,aAAa,+HAAY;AACzB;AACA;AACA,+BAA+B,qIAAkB;AACjD;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;;ACjKD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE8E;;AAE9E;AACA;AACA,OAAO,kDAAkD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iCAAiC;AAC9C;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,6BAA6B;AAC1C,UAAU,2CAA2C;AACrD,aAAa,gBAAgB;AAC7B,MAAM,iEAAiE;AACvE;AACA,MAAM,0EAA0E;AAChF;AACA,aAAa,OAAO,YAAY;AAChC,aAAa,8CAA8C;AAC3D;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,gIAAa;AACnB;AACA,GAAG;AACH,CAAC,CAAC,8FAAgB;;;;;;;;;;;;;;ACnFlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACxD;AACI;AAChD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE0D;AACkC;AACzC;AACE;AACK;AAC4B;AACR;AACf;AACE;AACW;AACxB;AACoB;;AAExE;AACA;AACA;AACA;AACA;AACA,qCAAqC,wDAAwD;AAC7F,IAAI,qDAAqD;AACzD;AACA;AACA;AACA,uDAAuD,uCAAuC;AAC9F;AACA;AACA;AACA;AACA,4CAA4C,mDAAmD;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,yDAAyD;AAChH;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,IAAI,kIAAe;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,sBAAsB,oFAAM;AAC5B;;AAEA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA,gBAAgB;AAChB;AACA,uBAAuB,iEAAgB;;AAEvC;AACA;AACA;AACA,0BAA0B,kCAAkC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,wBAAwB,kEAAiB;AACzC;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA,sBAAsB,oFAAM;AAC5B;AACA;AACA,KAAK;;AAEL;AACA,sBAAsB,mCAAmC;AACzD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oEAAoE,gEAAgE;AACpI;AACA,sDAAsD;AACtD;AACA,iCAAiC,kCAAkC;AACnE;AACA;AACA,gBAAgB,mCAAmC;AACnD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;;AAEL;AACA;AACA;AACA,qCAAqC,yBAAyB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,qBAAqB,2FAAK;;AAE1B;AACA,YAAY,6EAA6E;AACzF;AACA;AACA;AACA,gBAAgB;AAChB;AACA,oBAAoB,wGAAc;;AAElC;AACA,YAAY,sFAAsF;AAClG;AACA;AACA;AACA,gBAAgB;AAChB;AACA,uBAAuB,2GAAiB;AACxC;;AAEA;AACA;AACA;AACA,YAAY,qDAAqD;AACjE;AACA;AACA,gBAAgB;AAChB;AACA,0BAA0B,qGAAU;AACpC;AACA;;AAEA;AACA,wBAAwB,kEAAkE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,QAAQ,iEAAiE;AACzE;AACA;AACA,gBAAgB;AAChB;AACA,0BAA0B,yEAAuB;AACjD;AACA;;AAEA;AACA;AACA;AACA,eAAe,2CAA2C;AAC1D;AACA;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB,kCAAkC;AAC3D;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,QAAQ,4FAAa;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AAC4B;AAC7B,0FAAG,SAAS,8FAAe;;AAE3B;AACA,eAAe,8EAA8E;AAC7F;AACA;AACA;AACA;AACA,IAAI,gEAAgE;AACpE;AACA;AACA;AACA,iBAAiB,4BAA4B;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4BAA4B;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,4DAA4D;AACrE;AACA,KAAK,gFAAgF;AACrF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC,sCAAsC;AACtC,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,sCAAsC;AACtC,qCAAqC;AACrC,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,sCAAsC;AACtC,qCAAqC;AACrC,MAAM;AACN;AACA,aAAa,qDAAqD;AAClE;AACA;AACA,YAAY,iBAAiB;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,iCAAiC;AACjC,MAAM;AACN;AACA;AACA;AACA,8BAA8B,SAAS;AACvC;AACA,iCAAiC;AACjC,iCAAiC;AACjC,MAAM;AACN;AACA,aAAa,sDAAsD;AACnE;AACA;AACA,YAAY,OAAO;AACnB,G;;;;;;;;;;;;;ACjbA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACjE;AACa;AACD;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAE2E;AACL;AACA;AAClB;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iCAAiC;AAC9C;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;;AAEA;AACA,2BAA2B,kDAAkD;AAC7E;AACA;AACA;AACA,gBAAgB,4CAA4C;AAC5D;AACA,gCAAgC,2FAAgB;;AAEhD;AACA;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA,4BAA4B,0FAAY;;AAExC;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,sBAAsB,wDAAwD;AAC9E,qDAAqD;AACrD;AACA,MAAM,8DAA8D;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,iEAAiE;AACnF;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,YAAY;AAC3B;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,GAAG;AACH;AACA;AACA;AACA,cAAc,0FAA0F;AACxG,wEAAwE,iDAAiD;AACzH,UAAU,iDAAiD;AAC3D;AACA;AACA,iBAAiB,qCAAqC;AACtD;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,yEAAyE;AAC9F;AACA;AACA;;AAEA;AACA;AACA;AACA,iDAAiD,+DAA+D;AAChH,8CAA8C,kDAAkD;AAChG;AACA;AACA;AACA,GAAG;AACH,CAAC;AAC8B;AAC/B,0FAAG,WAAW,0FAAY,E;;;;;;;;;;;;;AC/N1B;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAEuC;AACiC;;AAExE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,+EAA+E;AAC5G;AACA,WAAW,iCAAiC;AAC5C;AACe;AACf,OAAO,oEAAU;AACjB;AACA;AACA,QAAQ,0DAA0D;AAClE;AACA;AACA;AACA,cAAc,2FAAa;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,oEAAU;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,C;;;;;;;;;;;;;AC9DA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0BAA0B,oDAAoD;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACe,qEAAY,EAAC;;AAE5B;AACA;AACA,cAAc,0DAA0D;AACxE;AACA,wCAAwC,uCAAuC;AAC/E;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,yCAAyC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,YAAY,yCAAyC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA,sFAAsF;AACtF,aAAa,OAAO;AACpB,G;;;;;;;;;;;;;AC7EA;AAAA;AAAA;AACA;AACA;AACA;;AAEwE;AACU;;AAElF;AACA;AACA;;AAEA;AACA,0BAA0B,0DAA0D;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,8DAA8D;AAC5E;AACA;AACA;AACA;AACA,gBAAgB,2FAAa;AAC7B;AACA,IAAI,0GAAgB;AACpB;AACA;AACe,wEAAe,EAAC;;AAE/B;AACA;AACA;AACA;AACA,IAAI,gIAAgI;AACpI;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;;AAEA;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA,G;;;;;;;;;;;;;AC3DA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACpG;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE4E;AACxB;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA,6CAA6C,mDAAmD;AAChG,oBAAoB,uCAAuC;AAC3D,0EAA0E;AAC1E;AACA;AACA;AACA,iDAAiD,uCAAuC;AACxF,4CAA4C,uCAAuC;AACnF,aAAa,mDAAmD;AAChE;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AAC4B;AAC7B,yFAAG,SAAS,6FAAe;;AAE3B;AACA;AACA;AACA,uEAAuE;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,gCAAgC;AAC7F,IAAI,mDAAmD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,gDAAgD,uDAAuD;AACvG,IAAI,6DAA6D;AACjE;AACA;AACA;AACA,2CAA2C,kEAAkE;AAC7G,mEAAmE,uDAAuD;AAC1H,IAAI,iEAAiE;AACrE,+CAA+C;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,YAAY,MAAM,iBAAiB;AAChD;AACA,8CAA8C,+DAA+D;AAC7G,IAAI,YAAY,MAAM,iBAAiB;AACvC;AACA,2EAA2E,YAAY;AACvF;AACA,IAAI,iBAAiB;AACrB,gCAAgC,qEAAqE;AACrG;AACA;AACA,WAAW,iCAAiC;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2BAA2B;AACvC;;AAEA;AACA;AACA,IAAI,wDAAwD;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,wFAAwF;AAC5F;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;;AAEA;AACA,mCAAmC,mBAAmB;AACtD;AACA;AACA,mDAAmD,+DAA+D;AAClH;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA,kEAAkE,mBAAmB,MAAM,YAAY;AACvG;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA,aAAa,2CAA2C;AACxD,G;;;;;;;;;;;;;AChMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwG;AACJ;AAC4B;AACtB;AACN;AACrD;AACH;AACF;AACI;AACL;AACC;AACE;AACC;AACO;AACL;AACE;AACL;AACG;AACZ;AACa;AACb;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACA;AACU;AACA;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEuG;AACjC;AAClB;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iCAAiC;AAC9C,aAAa,iBAAiB;AAC9B,WAAW,yDAAyD;AACpE;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,+BAA+B;AAC/C;AACA;;AAEA;AACA;AACA,gBAAgB,IAAI;AACpB;AACA;AACA,oBAAoB,6IAA0B;AAC9C;AACA;AACA,yBAAyB,+BAA+B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA,IAAI,+HAAY;AAChB;AACA,aAAa,+HAAY;AACzB;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,6EAA6E,gCAAgC;AAC7G;AACA;AACA,eAAe,gBAAgB,gCAAgC,yDAAyD;AACxH,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA,mCAAmC,6EAA6E;AAChH;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB,gCAAgC,yDAAyD;AACxH,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,wBAAwB,sBAAsB;AAC7D,WAAW,iEAAiE;AAC5E,8CAA8C,mBAAmB;AACjE,eAAe,wBAAwB;AACvC;AACA,iBAAiB,2CAA2C;AAC5D;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA,4DAA4D,sCAAsC;AAClG;AACA;AACA,4BAA4B,6DAA6D;AACzF;AACA;AACA;AACA;AACA;AACA,YAAY,uGAAuG;AACnH;AACA;AACA,mBAAmB,eAAe;AAClC;AACA;;AAEA;AACA,sBAAsB,sHAAyB;AAC/C;AACA,SAAS;AACT,kCAAkC,4FAAa;AAC/C;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,gBAAgB;AAChB;AACA;AACA,qBAAqB,OAAO;AAC5B;AACA,wBAAwB,sHAAyB;AACjD;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,SAAS;AACpC,2BAA2B,SAAS;AACpC;AACA,0BAA0B,4FAAa;AACvC;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,oBAAoB,iIAAc;AAClC;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,mCAAmC;AAClD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,oDAAoD;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,4BAA4B,8EAA8E;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uEAAuE;AACnG;AACA;AACA,mBAAmB,OAAO;AAC1B,mBAAmB,SAAS;AAC5B,mBAAmB,SAAS;AAC5B;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,GAAG;AACH,CAAC;AACsC;AACvC,0FAAG,mBAAmB,2FAAY,E;;;;;;;;;;;;;ACjdnB,sV;;;;;;;;;;;;;ACAA,4S;;;;;;;;;;;;;ACAA,gjB;;;;;;;;;;;;;ACAA,gQ;;;;;;;;;;;;;ACAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9C;AAChD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEgE;AACkB;AACM;AACN;AACa;AAC/C;AACQ;AAC8B;AAClC;AACd;AACkC;;AAExE;AACA,QAAQ,4DAA4D;AACpE;AACA,YAAY,2CAA2C;AACvD;AACA;AACA,IAAI,wFAAwF;AAC5F;AACA;AACA;AACA;AACA;AACA,oCAAoC,2DAA2D;AAC/F;AACA,IAAI,qCAAqC;AACzC;AACA,iBAAiB,4EAA4E;AAC7F;AACA;AACA;AACA,IAAI,wFAAwF;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,wFAAwF;AAC9F;AACA;AACA,aAAa,mBAAmB;AAChC;AACA,MAAM,wFAAwF;AAC9F,aAAa,6CAA6C;AAC1D;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB,QAAQ,oEAAS;AACjB;AACA;AACA,+BAA+B,+GAAiB;AAChD;AACA,mBAAmB,iEAAe,YAAY,qEAAmB;AACjE,IAAI,8GAAY;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gIAAa;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sFAAsF;AACtG;AACA;AACA;AACA;AACA;AACA,QAAQ,2CAA2C;AACnD;AACA;AACA;AACA,QAAQ,qFAAqF;AAC7F,QAAQ,yEAAyE;AACjF,sBAAsB,uEAAuE;AAC7F;AACA,eAAe,mBAAmB;AAClC;AACA;AACA;AACA,gBAAgB,mFAAmF;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,wFAAwF;AAC1H;AACA,eAAe,6CAA6C;AAC5D,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,oEAAS;AACzC,SAAS;AACT,eAAe,oEAAS;AACxB;AACA,sBAAsB,4FAAa;AACnC;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT,OAAO;AACP;AACA,GAAG;AACH,CAAC,CAAC,0FAAM;AAC4B;AACpC,0FAAG,gBAAgB,sGAAY;AAC/B,0FAAG,gBAAgB,yGAAe;AAClC;AACA,SAAS,oEAAS,wBAAwB,6GAAkB;AAC5D,C;;;;;;;;;;;;;AC9NA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AACjD;AACF;AACG;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoE;AACmC;AACR;AACX;AACR;;AAE5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iCAAiC;AAC9C,aAAa,6CAA6C;AAC1D;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB,6CAA6C;AAC7D;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,2BAA2B,kHAAsB;;AAEjD;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,iCAAiC,8FAAe;AAChD;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,gIAAa;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qHAA0B;AAChC;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kHAAiB;AACzB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;AACH,CAAC,CAAC,4FAAQ;;;;;;;;;;;;;;ACpMV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE4F;AACS;AACf;AACb;AACrC;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2BAA2B,aAAa,8CAA8C;AACnG,aAAa,6BAA6B;AAC1C;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA,+DAA+D;AAC/D;AACA;AACA;AACA,gBAAgB;AAChB;AACA,4BAA4B,uGAAe;;AAE3C;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,wBAAwB,8FAAW;AACnC;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,yBAAyB,iHAAoB;AAC7C;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA,MAAM,gIAAa;;AAEnB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,2GAAiB;;;;;;;;;;;;AClFnB;;AAEA;AACA,cAAc,mBAAO,CAAC,6WAAgL;AACtM;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,gHAAmD;AACrE,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;;;ACXf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwG;AACwB;AACtB;AACN;AACtD;AACJ;AACG;AACF;AACK;AACD;AACJ;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoD;AACwB;AACJ;AAC9B;AACwB;AACP;AACG;AACoB;AACtB;AAChB;AACY;AAChB;;AAExC;AACA;AACA,iFAAiF;AACjF,QAAQ,8BAA8B,cAAc;AACpD;AACA;AACA,MAAM,6EAA6E;AACnF;AACA;AACA;AACA,kEAAkE;AAClE;AACA;AACA,sBAAsB,yBAAyB,GAAG;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gCAAgC;AAC7C,aAAa,wDAAwD;AACrE;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,sBAAsB,mEAAM;;AAE5B;AACA,wCAAwC,sBAAsB;AAC9D;AACA;AACA,gBAAgB;AAChB;AACA,kCAAkC,+EAAkB;AACpD;AACA,KAAK;AACL,+CAA+C,uFAAU;AACzD;AACA,KAAK;;AAEL;AACA,sCAAsC,sBAAsB;AAC5D;AACA;AACA,gBAAgB;AAChB;AACA,gCAAgC,6EAAgB;AAChD;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,qCAAqC,sFAAW;AAChD;AACA,KAAK;AACL,wCAAwC,iGAAsB;AAC9D;AACA,KAAK;AACL,iDAAiD,iGAAsB;AACvE;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;;AAEA;AACA,6EAA6E,0BAA0B;AACvG,uBAAuB,gCAAgC;AACvD;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB;AACA,uFAAuF;AACvF,eAAe,OAAO;AACtB;AACA,SAAS,+HAAY;AACrB;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF;AAChF;AACA,oBAAoB,WAAW;AAC/B;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,yCAAyC,0DAA0D;AACnG,QAAQ,oFAAoF;AAC5F,oBAAoB,0BAA0B,uBAAuB,gCAAgC;AACrG;AACA,eAAe,0FAA0F;AACzG;AACA,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,yCAAyC,wDAAwD;AACjG,QAAQ,oFAAoF;AAC5F,+BAA+B,0BAA0B;AACzD,QAAQ,kFAAkF;AAC1F;AACA,eAAe,0FAA0F;AACzG;AACA,iBAAiB,qDAAqD;AACtE;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,6DAAU;AACjC,qCAAqC,uEAAoB;;AAEzD;AACA;AACA,2BAA2B,qEAAkB,KAAK,+DAAY;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,+BAA+B;AAC5D,8BAA8B,iIAAc;AAC5C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA8C,gCAAgC;AAC9E,yBAAyB,iDAAiD;AAC1E,sDAAsD,oDAAoD;AAC1G;AACA,gCAAgC,sEAAsE;AACtG;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA,8BAA8B,4CAA4C,GAAG;AAC7E;AACA;AACA,eAAe,8BAA8B;AAC7C;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,iDAAiD,4CAA4C;AAC7F,oDAAoD,uCAAuC;AAC3F,qBAAqB,oDAAoD;AACzE;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA,gCAAgC;AAChC,OAAO;AACP;AACA;AACA;AACA;AACA,+EAA+E;AAC/E;AACA,oBAAoB,YAAY;AAChC;AACA,yBAAyB,0CAA0C;AACnE;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA,iEAAiE,0BAA0B;AAC3F;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,sCAAsC,gCAAgC;AACtE,yBAAyB,iDAAiD;AAC1E;AACA,QAAQ,qEAAqE;AAC7E;AACA;AACA,YAAY,aAAa;AACzB;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,6BAA6B,4CAA4C,GAAG;AAC5E;AACA,eAAe,8BAA8B;AAC7C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,OAAO;AACP;AACA;AACA;AACA;AACA,8EAA8E;AAC9E;AACA,oBAAoB,WAAW;AAC/B;AACA,wBAAwB,0CAA0C;AAClE;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;AACA,+DAA+D,4BAA4B;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,uCAAuC,gCAAgC;AACvE,wBAAwB,wBAAwB;AAChD;AACA;AACA,eAAe,OAAO;AACtB,eAAe,mDAAmD;AAClE,wCAAwC,yEAAyE;AACjH,iBAAiB,sDAAsD;AACvE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wCAAwC,sDAAsD;AAC9F,QAAQ,kFAAkF;AAC1F,QAAQ,iDAAiD,cAAc,4DAA4D;AACnI;AACA;AACA,QAAQ,uFAAuF;AAC/F;AACA,eAAe,wFAAwF;AACvG;AACA,eAAe,mDAAmD;AAClE,wCAAwC,yEAAyE;AACjH,iBAAiB,sDAAsD;AACvE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,eAAe;AAC9B,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,0BAA0B,0BAA0B,4BAA4B;AAC1G,2FAA2F;AAC3F;AACA;AACA,+CAA+C,YAAY;AAC3D,YAAY,4DAA4D;AACxE;AACA;AACA;AACA,GAAG;AACH,CAAC;AACoC;AACrC,0FAAG,iBAAiB,8FAAe;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6DAAU;AAC/B,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,C;;;;;;;;;;;;;AC9eA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACvD;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE8D;AAC9B;AACU;AACwB;AACoE;AAC1D;AACxB;AACiB;;AAErE;AACA,uEAAuE,qCAAqC;AAC5G,sDAAsD,mCAAmC;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gCAAgC;AAC7C;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,oBAAoB,0DAAI;;AAExB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,sBAAsB,kEAAM;;AAE5B;AACA,oEAAoE,6BAA6B;AACjG;AACA;AACA,gBAAgB,+DAA+D;AAC/E;AACA,kCAAkC,8EAAkB;AACpD;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA,KAAK;;AAEL;AACA,yDAAyD,iGAAsB;;AAE/E;AACA,+CAA+C,sFAAU;AACzD;AACA,KAAK;AACL,yCAAyC,kFAAM;AAC/C;AACA,KAAK;;AAEL;AACA,4CAA4C,2FAAe;AAC3D;AACA,KAAK;AACL,4CAA4C,iGAAqB;AACjE;AACA,KAAK;AACL,4CAA4C,qGAAyB;AACrE;AACA,KAAK;;AAEL,cAAc,uEAAuE;AACrF,QAAQ,yEAAyE;AACjF;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAmB;AAC5C;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACuC;AACxC,yFAAG,oBAAoB,6FAAe,E;;;;;;;;;;;;;ACzJtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgH;AACZ;AAC4B;AACtB;AACN;AACpG,2BAA2B,+HAAY;AACvC,0BAA0B,+HAAY;AACQ;AACD;AACV;AACa;AACD;AACA;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwE;AAC5B;AACI;;AAEhD;AACA;AACA;AACA,6BAA6B,gFAAgF;AAC7G;AACA;AACA;AACA,IAAI,sEAAsE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,iEAAiE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,2FAA2F;AACjG;AACA,MAAM,+FAA+F;AACrG;AACA,MAAM,mGAAmG;AACzG;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,4EAA4E;AAC5E,aAAa;AACb,wEAAwE;AACxE;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa;AACb,gEAAgE;AAChE;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,QAAQ,oFAAoF;AAC5F;AACA;AACA,YAAY,+EAA+E;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA,UAAU,qGAAqG;AAC/G,UAAU,yGAAyG;AACnH,UAAU,6GAA6G;AACvH,UAAU,mGAAmG;AAC7G,UAAU,uGAAuG;AACjH;AACA;AACA;AACA,UAAU,iGAAiG;AAC3G,UAAU,qGAAqG;AAC/G,UAAU,yGAAyG;AACnH,UAAU,+FAA+F;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,SAAS;AACT;AACA,sCAAsC;AACtC,YAAY,qEAAqE;AACjF;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6CAA6C,gCAAgC;AAC7E;AACA;AACA,6CAA6C,6DAA6D;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,YAAY,8DAA8D;AAC1E;AACA,eAAe,wDAAwD;AACvE;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+CAA+C,gCAAgC;AAC/E;AACA;AACA,+CAA+C,sDAAsD;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,sHAAsH,aAAa;AACnI;AACA,YAAY,8DAA8D;AAC1E;AACA,eAAe,wDAAwD;AACvE;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,4DAA4D,wDAAwD;AACpH,mCAAmC;AACnC;AACA;AACA;AACA,iDAAiD,+BAA+B;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,qBAAqB,4BAA4B,qDAAqD,wBAAwB;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uBAAuB,qDAAqD,uBAAuB;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uBAAuB;AACnC;AACA;AACA;AACA,WAAW,gDAAgD,gBAAgB,gDAAgD;AAC3H;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B,eAAe,cAAc;AAC7B,eAAe,4FAA4F;AAC3G;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe;AACf,mEAAmE;AACnE,eAAe,QAAQ;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA,qCAAqC,iEAAe,oBAAoB,+DAAa;AACrF;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,cAAc,EAAE;AAChB;AACA,cAAc,8DAA8D;AAC5E;AACA;AACA,cAAc,4FAA4F;AAC1G;AACA,yEAAyE,gDAAgD;AACzH;AACA,cAAc,uCAAuC;AACrD;AACA;AACA;AACA;AACA,WAAW,wDAAwD;AACnE,aAAa,MAAM;AACc;AACjC;AACA;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6IAA0B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,qIAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,qIAAkB;AAC5C;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6IAA0B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,C;;;;;;;;;;;;;AC5wBA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,iEAAiE;AACjE;AACA;AACA,IAAI,kIAAe;AACnB;AACA;;AAEA;AACA;AACA;AACA,+CAA+C,0EAA0E;AACzH;AACA;AACA,aAAa,SAAS;AACtB,eAAe;AACf;AACA,SAAS,+HAAY;AACrB;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;;ACpDD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AAC1D;AACG;AACO;AACP;AACG;AACL;AACA;AACI;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2C;AACR;AACmC;AAClB;AACjB;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,+CAA+C;AACvG;AACA;AACA;AACA,iFAAiF,6CAA6C;AAC9H;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR,QAAQ,+FAA+F;AACvG,mCAAmC,2EAA2E;AAC9G;AACA;AACA;AACA;AACA,wDAAwD,yDAAyD;AACjH;AACA,MAAM,qFAAqF;AAC3F,MAAM,wFAAwF;AAC9F;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,IAAI,gFAAgF;AACpF;AACA;AACA,IAAI,gFAAgF;AACpF;AACA;AACA;AACA,IAAI,4EAA4E;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA,gBAAgB;AAChB;AACA,yBAAyB,iEAAM;AAC/B;AACA,KAAK;AACL;;AAEA;AACA,YAAY,qDAAqD;AACjE;AACA,aAAa,kCAAkC;AAC/C,aAAa,sDAAsD;AACnE,aAAa,iDAAiD;AAC9D;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA,+BAA+B,6DAAK;AACpC,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC,0CAA0C;AAC9E,QAAQ,gDAAgD;AACxD;AACA;AACA;AACA,eAAe,gCAAgC;AAC/C,eAAe,iDAAiD;AAChE;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA,0BAA0B,6DAAK;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,yDAAyD,iCAAiC;AAC1F;AACA,eAAe,sCAAsC;AACrD,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,iDAAiD;AAChE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,4CAA4C,uCAAuC;AACnF;AACA;AACA,eAAe,gCAAgC;AAC/C,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,iDAAiD;AAChE;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA,0BAA0B,6DAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA+B,wDAAwD;AACvF;AACA;AACA;AACA;AACA,eAAe,wCAAwC;AACvD,eAAe,sDAAsD;AACrE,eAAe,iDAAiD;AAChE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,gEAAgE,iCAAiC;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,gCAAgC;AAC/C,eAAe,iDAAiD;AAChE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,2BAA2B,iEAAU;AACrC;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6DAAK;AACxB;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,kDAAkD,uCAAuC;AACzF;AACA;AACA,eAAe,OAAO;AACtB,eAAe,gCAAgC;AAC/C,eAAe,iDAAiD;AAChE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,gBAAgB,+DAA+D;AAC/E;AACA;AACA;AACA,eAAe,gCAAgC;AAC/C,iBAAiB,yDAAyD;AAC1E;AACA,GAAG;AACH;AACA;AACA,2BAA2B,iEAAU;AACrC,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,+DAA+D;AAC/E;AACA;AACA,eAAe,gCAAgC;AAC/C,eAAe,OAAO;AACtB,iBAAiB,yDAAyD;AAC1E;AACA,GAAG;AACH;AACA;AACA,2BAA2B,iEAAU;AACrC,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,mCAAmC;AAChE;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,+DAA+D;AAC/E;AACA;AACA,eAAe,wCAAwC;AACvD,eAAe,uDAAuD;AACtE,iBAAiB,yDAAyD;AAC1E;AACA,GAAG;AACH;AACA;AACA,2BAA2B,iEAAU;AACrC;AACA,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,mCAAmC;AAChE;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,mCAAmC;AAChE;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wDAAwD,gDAAgD;AACxG,WAAW,oDAAoD;AAC/D;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,8BAA8B;AAC7C,eAAe,gCAAgC;AAC/C,eAAe,kEAAkE;AACjF;AACA;;AAEA;AACA;AACA;AACA;AACA,wDAAwD,gDAAgD;AACxG,eAAe,oDAAoD;AACnE;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sCAAsC;AACrD,eAAe,OAAO;AACtB,eAAe,kEAAkE;AACjF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,gDAAgD;AACpG,eAAe,oDAAoD;AACnE;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sFAAsF;AACrG;AACA,eAAe,gCAAgC;AAC/C,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,kEAAkE;AACjF;AACA;;AAEA;AACA,kBAAkB,wDAAwD;AAC1E;AACA;AACA,eAAe,wCAAwC;AACvD,eAAe,kEAAkE;AACjF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sEAAsE;AACrF;AACA,eAAe,gCAAgC;AAC/C;AACA,eAAe,gCAAgC;AAC/C,eAAe,OAAO;AACtB,eAAe,kEAAkE;AACjF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,gCAAgC;AAC/C,eAAe,OAAO;AACtB,eAAe,kEAAkE;AACjF;AACA;AACA,GAAG;AACH,CAAC;AACwC;AACzC,0FAAG,qBAAqB,2FAAY;;AAEpC;AACA;AACA;AACA,WAAW,sCAAsC;AACjD,WAAW,4CAA4C;AACvD,WAAW,uCAAuC;AAClD,aAAa;AACb;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA,sDAAsD;AACtD,4CAA4C;AAC5C;AACA;AACA;AACA;;AAEA;AACA,QAAQ,qEAAqE;AAC7E;AACA,YAAY,+DAA+D;AAC3E;;AAEA;AACA;AACA,0DAA0D,gFAAgF;AAC1I;AACA,YAAY,yDAAyD;AACrE;;AAEA;AACA,QAAQ,6CAA6C;AACrD;AACA,YAAY,uCAAuC;AACnD;;AAEA;AACA,QAAQ,uDAAuD;AAC/D;AACA,YAAY,iDAAiD;AAC7D,G;;;;;;;;;;;;;ACnyBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0F;AACsC;AACtB;AACN;AACJ;AACF;AACpD;AACG;AACF;AACK;AACL;AACA;AACc;AACzD;AACA;AACA;AACA;;AAEA;AACA,qDAAqD,qEAAqE;AAC1H;AACA;AACA;;AAEwC;AACQ;AACJ;AACgB;AACD;AACP;AACd;AACkC;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,YAAY,4EAA4E;AACxF;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,gEAAgE;AAC/E,yCAAyC;AACzC;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA,YAAY,4EAA4E;AACxF;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc,8DAA8D,cAAc;AACzG;AACA,eAAe,uEAAuE;AACtF,iDAAiD;AACjD;AACA;AACA,eAAe,uCAAuC;AACtD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yCAAyC,uDAAuD;AAChG,SAAS;AACT;AACA,YAAY,4EAA4E;AACxF;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc,8DAA8D,wBAAwB;AACnH;AACA,eAAe,uBAAuB,0CAA0C,aAAa;AAC7F,iDAAiD,aAAa;AAC9D;AACA;AACA,SAAS,aAAa;AACtB,eAAe,uCAAuC;AACtD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ,6DAA6D;AACrE,QAAQ,wFAAwF;AAChG,QAAQ,qFAAqF;AAC7F;AACA;AACA;AACA;AACA;AACA,YAAY,4EAA4E;AACxF;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,gEAAgE;AAC/E;AACA,eAAe,uCAAuC;AACtD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ,mEAAmE;AAC3E;AACA,mCAAmC,2DAA2D;AAC9F;AACA;AACA;AACA,QAAQ,2DAA2D;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,0BAA0B,qBAAqB,EAAE;AACjH;AACA;AACA;AACA,gBAAgB,yBAAyB;AACzC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ,wFAAwF;AAChG,qDAAqD,qFAAqF;AAC1I;AACA,YAAY,4EAA4E;AACxF;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,sEAAsE;AACrF;AACA,eAAe,uCAAuC;AACtD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mEAAiB;AACnB;AACA;AACA;AACA;AACA,IAAI,qEAAqE;AACzE;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACsC;AAC/B;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,6IAA0B;AAC9C;AACA;AACA,yBAAyB,+BAA+B;AACxD;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,kFAAkF;AACzG,oBAAoB,wFAAwF;AAC5G;AACA;AACA,WAAW,6DAA6D;AACxE,aAAa;AACb;AACO;AACP,wBAAwB,uEAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6EAA6E;AAC7E,SAAS,4EAA4E;AACrF;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6IAA0B;AAC/C;AACA;AACA,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,yEAAyE,8DAA8D;AACvI,MAAM,4EAA4E;AAClF;AACA,IAAI,8EAA8E;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,+DAA+D;AAC5E;AACA;AACA,aAAa,SAAS;AACtB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI,8DAA8D;AAClE,IAAI,mFAAmF;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,aAAa,SAAS;AACtB;AACO;AACP;AACA;AACA;AACA,qBAAqB,6IAA0B;AAC/C;AACA;AACA,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,WAAW;AACtB;AACA;AACA;AACA,IAAI,uGAAuG;AAC3G,gDAAgD,yCAAyC;AACzF;AACA;AACA;AACA;AACA,IAAI,qEAAqE;AACzE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,iEAAc,yBAAyB,yEAAiB;AACrF;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI,iGAAiG;AACrG,gDAAgD,yCAAyC;AACzF;AACA;AACA;AACA,IAAI,qEAAqE;AACzE;AACA;AACA;AACA;AACA;AACA,0DAA0D,qDAAqD;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI,6DAA6D;AACjE;AACA,4FAA4F,qBAAqB;AACjH;AACA;AACA;AACA,wEAAwE,iEAAiE;AACzI;AACA;AACA,WAAW,gDAAgD;AAC3D;AACA,aAAa,SAAS;AACtB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,6IAA0B;AAC/C;AACA;AACA,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6IAA0B;AAC/C;AACA;AACA,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qEAAqE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,KAAK;AACL;AACA,WAAW,SAAS;AACpB,mEAAmE,sDAAsD;AACzH;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mCAAmC,0DAA0D;AAC7F,aAAa,6GAA6G;AAC1H;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B;AAChE,WAAW;AACX;AACA,gEAAgE;AAChE,cAAc,qDAAqD;AACnE,UAAU;AACV,sBAAsB,sDAAsD;AAC5E;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,2DAA2D,0BAA0B;AACrF,YAAY;AACZ;AACA,WAAW;AACX;AACA;AACA;AACA,gBAAgB,4FAAa;AAC7B;;AAEA;AACA;AACA;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA,sCAAsC,mBAAmB;AACzD;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA,0CAA0C,qBAAqB;AAC/D;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,2DAA2D;AAC/D,QAAQ,uFAAuF;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,6EAA6E;AAClH,cAAc,iEAAiE;AAC/E;AACA,WAAW,sEAAsE;AACjF,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,+BAA+B,iEAAc,yBAAyB,yEAAiB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,iEAAc,yBAAyB,yEAAiB;AACrF;AACA,KAAK;AACL;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI,4EAA4E;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,8EAA8E;AAC/G,QAAQ,iEAAiE;AACzE;AACA,WAAW,sEAAsE;AACjF,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,+BAA+B,+DAAY;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,6IAA0B,CAAC,6DAAU;AAC5D;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uCAAuC,6EAA6E;AACpH,uCAAuC,kEAAkE;AACzG;AACA;AACA,IAAI,4EAA4E;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sEAAsE;AACjF,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6IAA0B;AAC/C;AACA;AACA,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,8EAA8E;AACtF;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,gEAAgE;AAC3E,qCAAqC;AACrC;AACA,aAAa,SAAS;AACtB;AACA,WAAW,oEAAS;AACpB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,QAAQ,kFAAkF;AAC1F;AACA,WAAW,OAAO;AAClB,WAAW,cAAc,8DAA8D,cAAc;AACrG;AACA,WAAW,uEAAuE;AAClF,6CAA6C;AAC7C;AACA;AACA,WAAW,uCAAuC;AAClD,aAAa,SAAS;AACtB;AACA,WAAW,oEAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6IAA0B;AAC/C;AACA;AACA,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,QAAQ,sFAAsF;AAC9F;AACA,WAAW,OAAO;AAClB,WAAW,cAAc,8DAA8D,wBAAwB;AAC/G;AACA,WAAW,uBAAuB,0CAA0C,aAAa;AACzF,6CAA6C,aAAa;AAC1D;AACA;AACA,KAAK,aAAa;AAClB,WAAW,uCAAuC;AAClD,aAAa,SAAS;AACtB;AACA,WAAW,oEAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,mCAAmC;AAC9D;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,QAAQ,4EAA4E;AACpF;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,gEAAgE;AAC3E;AACA,WAAW,uCAAuC;AAClD,aAAa,SAAS;AACtB;AACA,WAAW,oEAAS;AACpB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,QAAQ,4EAA4E;AACpF;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,sEAAsE;AACjF;AACA,WAAW,uCAAuC;AAClD,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;;AAEA,yCAAyC,6DAA6D;AACtG;AACA;AACA,WAAW,gEAAgE;AAC3E,WAAW,6BAA6B;AACxC,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sDAAsD,6DAA6D;AACnH;AACA,WAAW,uDAAuD;AAClE,WAAW,iDAAiD;AAC5D,WAAW,6BAA6B;AACxC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA,GAAG;AACH;AACA,kDAAkD,uEAAoB;AACtE;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,oCAAoC,qBAAqB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,mCAAmC;AAChE;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,UAAU,0HAAO;AACpB,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI,kFAAkF;AACtF;AACA;AACA,uBAAuB,6EAA6E;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,cAAc,sBAAsB;AACpC,cAAc,6EAA6E;AAC3F;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA,cAAc,OAAO;AACrB,OAAO,6EAA6E;AACpF,IAAI,6EAA6E;AACjF;AACA;AACA,cAAc,OAAO;AACrB,OAAO,6EAA6E;AACpF;AACA;AACA,G;;;;;;;;;;;;;ACv5CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AAC1D;AACG;AACV;AACa;AACb;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACP;AACiB;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE8C;AACN;AACI;AACN;AACF;AACkC;AAClB;;AAEpD;AACA,iDAAiD,oDAAoD;AACrG,IAAI,0CAA0C;AAC9C;AACA;AACA,IAAI,kGAAkG;AACtG;AACA;AACA,iCAAiC,gEAAgE;AACjG;AACA;AACA,IAAI,iGAAiG;AACrG,IAAI,iGAAiG;AACrG;AACA,8BAA8B;AAC9B,QAAQ,6EAA6E;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA,wDAAwD,uDAAuD;AAC/G;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA,2BAA2B,oCAAoC;AAC/D;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,gEAAa;AACxC,KAAK;AACL;AACA,KAAK;AACL;;AAEA;AACA;AACA,UAAU,2EAA2E;AACrF,MAAM,yEAAyE;AAC/E;AACA;AACA,aAAa,oCAAoC;AACjD,aAAa,mCAAmC;AAChD;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,sDAAsD;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mCAAmC;AAClD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,+BAA+B;AAC5D;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,wDAAwD;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,sDAAsD;AACjG;AACA;AACA,eAAe,mCAAmC;AAClD,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,mCAAmC;AAClD,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,6CAA6C;AAC/D;AACA,eAAe,mCAAmC;AAClD,iBAAiB,8CAA8C;AAC/D;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD,iBAAiB,6CAA6C;AAC9D;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,+BAA+B;AAC9C,iBAAiB,gCAAgC;AACjD;AACA,GAAG;AACH;AACA;AACA,iBAAiB,6DAAU;AAC3B;;AAEA;AACA;AACA;AACA,eAAe,gCAAgC;AAC/C,iBAAiB,+BAA+B;AAChD;AACA,GAAG;AACH;AACA;AACA,iBAAiB,4DAAS;AAC1B;;AAEA;AACA;AACA;AACA;AACA,eAAe,qCAAqC;AACpD,iBAAiB,sCAAsC;AACvD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB;AACA,iBAAiB,qCAAqC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,8CAA8C;AAC/D;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA,6BAA6B,6IAA0B;AACvD;AACA;AACA,kCAAkC,iCAAiC;AACnE;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,qCAAqC;AACpD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mCAAmC;AAClD,eAAe,OAAO;AACtB,eAAe,mCAAmC;AAClD,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,gBAAgB;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,yDAAyD;AACtE;AACA,sBAAsB,6CAA6C;AACnE,QAAQ,6CAA6C;AACrD,sBAAsB,wDAAwD;AAC9E,6BAA6B,iDAAiD;AAC9E,iCAAiC,iDAAiD;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mCAAmC;AAClD,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mCAAmC;AAClD,eAAe,OAAO;AACtB,iBAAiB,qCAAqC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,+DAAY;AAC/B;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oDAAoD,+DAAY;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,uCAAuC;AACvC;AACA;AACA,eAAe,qCAAqC;AACpD,iBAAiB,qCAAqC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,2DAAQ;AACxC,mBAAmB,+DAAY;AAC/B,OAAO,+BAA+B,2DAAQ;AAC9C,mBAAmB,+DAAY;AAC/B;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oDAAoD,2DAA2D;AAC/G,kBAAkB,yDAAyD;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,4DAA4D,yDAAyD;AACrH,eAAe,uCAAuC;AACtD;;AAEA;AACA,mEAAmE,uEAAuE;AAC1I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,6DAA6D,2DAA2D;AACxH,eAAe,uCAAuC;AACtD;AACA,GAAG;AACH,CAAC;AAC4B;AAC7B,0FAAG,SAAS,2FAAY,E;;;;;;;;;;;;;ACzvBxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AAC9D;AACY;AACf;AACa;AACL;AACA;AACI;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2C;;AAE3C;AACA,4CAA4C,gDAAgD;AAC5F;AACA;AACA;AACA;AACA,iCAAiC,qEAAqE;AACtG,aAAa,yDAAyD;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA,IAAI,8EAA8E;AAClF;AACA,IAAI,gFAAgF;AACpF,QAAQ,2EAA2E;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB,IAAI;AACpB;AACA;;AAEA;AACA,iBAAiB,8CAA8C;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAI;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA,oDAAoD;AACpD,+DAA+D;AAC/D,kEAAkE;AAClE,yDAAyD;AACzD,iDAAiD;AACjD;AACA,aAAa,sGAAsG;AACnH;AACA,aAAa,OAAO;AACpB;AACA;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA,0BAA0B,iEAAS;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0DAA0D;AAC1D,qEAAqE;AACrE,wEAAwE;AACxE,+DAA+D;AAC/D,uDAAuD;AACvD;AACA,eAAe,sGAAsG;AACrH;AACA,eAAe,OAAO;AACtB;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA,0BAA0B,iEAAS;AACnC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,uDAAuD;AACvD,kEAAkE;AAClE,qEAAqE;AACrE,4DAA4D;AAC5D,oDAAoD;AACpD;AACA,eAAe,sGAAsG;AACrH;AACA,eAAe,OAAO;AACtB;AACA,iBAAiB,aAAa;AAC9B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,0BAA0B,iEAAS;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yDAAyD;AACzD,oEAAoE;AACpE,uEAAuE;AACvE,8DAA8D;AAC9D,sDAAsD;AACtD;AACA,eAAe,sGAAsG;AACrH;AACA,eAAe,OAAO;AACtB,iBAAiB,aAAa;AAC9B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,0BAA0B,iEAAS;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,wCAAwC,8CAA8C;AACtF;AACA;AACA;AACA;AACA;AACA,eAAe,wCAAwC;AACvD,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gEAAgE,8CAA8C;AAC9G;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,oCAAoC;AACnD,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,GAAG;AACJ;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACkB;AACtC;AACA;AACA;AACA,C;;;;;;;;;;;;;AC7TA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AAC1D;AACI;AACJ;AACG;AACV;AACa;AACL;AACR;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACA;AACH;AACa;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE8C;AACN;AACM;AACE;AACwB;AACF;AAClB;;AAEpD;AACA,6CAA6C,mCAAmC;AAChF,qBAAqB,kFAAkF;AACvG,IAAI,yCAAyC;AAC7C,4BAA4B,mCAAmC,kBAAkB,gCAAgC;AACjH;AACA,uCAAuC,8CAA8C;AACrF;AACA;AACA;AACA;AACA,0DAA0D,6CAA6C;AACvG,IAAI;AACJ;AACA,kCAAkC,sCAAsC;AACxE,gCAAgC,qDAAqD;AACrF,kCAAkC,+CAA+C;AACjF,aAAa,gCAAgC;AAC7C;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,qCAAqC;AACjG;AACA;AACA,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,YAAY,6BAA6B;AACzC;AACA,+CAA+C,qBAAqB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,gBAAgB;AACpE;AACA;AACA;AACA;AACA,KAAK,GAAG,kBAAkB;AAC1B;AACA;AACA;AACA;AACA,2DAA2D,2BAA2B;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,GAAG,kBAAkB;AAC5B;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,yCAAyC;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,wFAAwF;AACrG;AACA,aAAa,kCAAkC;AAC/C,aAAa,mDAAmD;AAChE,eAAe,sDAAsD;AACrE;AACA,MAAM,uFAAuF;AAC7F;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC,gEAAc;;AAEpD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,0FAA0F,yBAAyB;AACnH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;;AAEA;AACA,0DAA0D,6DAAU;AACpE;AACA;AACA;AACA,YAAY,kDAAkD;AAC9D;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,2BAA2B,6DAAU;AACrC;AACA,0EAA0E,2BAA2B;AACrG;AACA;AACA,yCAAyC,6DAAU;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C,sBAAsB,MAAM,4BAA4B;AACnG;AACA;AACA,eAAe,oCAAoC;AACnD,eAAe,oCAAoC;AACnD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;;AAEA;AACA,mBAAmB,yCAAyC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA,eAAe,6BAA6B;AAC5C,eAAe,sCAAsC;AACrD;AACA,eAAe,gCAAgC;AAC/C;AACA,eAAe,8DAA8D;AAC7E;;AAEA;AACA,mBAAmB,mCAAmC;AACtD;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,2DAA2D;AAC9E;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACsC;AACvC,0FAAG,mBAAmB,2FAAY;;AAElC;AACA;AACA;AACA,WAAW,kFAAkF;AAC7F,aAAa,6CAA6C;AAC1D;AACA;AACA;;AAEA;AACA,cAAc,6DAAU;;AAExB;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA;;AAEA;AACA;AACA,oCAAoC,6DAAU;AAC9C;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,6IAA0B,KAAK,oEAAa;AAC/D;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gEAAa;AAC9B;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,sDAAsD;AACtD,4CAA4C;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B,kDAAkD;AAC/E;AACA;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC,WAAW,sCAAsC;AACjD,aAAa,OAAO;AACpB,aAAa,qCAAqC;AAClD;AACA,aAAa,sCAAsC;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC,WAAW,sCAAsC;AACjD,aAAa,OAAO;AACpB,aAAa,gCAAgC;AAC7C;AACA,aAAa,sCAAsC;AACnD;;AAEA;AACA,WAAW,+CAA+C;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sCAAsC;AACjD,WAAW,8BAA8B;AACzC,aAAa,YAAY;AACzB,aAAa,sCAAsC;AACnD,aAAa,oCAAoC;AACjD;AACA;;AAEA;AACA,oGAAoG,4BAA4B;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oCAAoC;AAC/C,aAAa;AACb;;AAEA;AACA;AACA,0DAA0D,8EAA8E;AACxI;AACA,YAAY,uDAAuD;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI,+EAA+E;AACnF;AACA;AACA,YAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA,YAAY,kCAAkC;AAC9C;;AAEA;AACA,QAAQ,wCAAwC;AAChD;AACA,YAAY,kCAAkC;AAC9C,G;;;;;;;;;;;;;AC/tBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AAChB;AACsC;AACtB;AACN;AACJ;AACF;AACpD;AACA;AACG;AACF;AACA;AACI;AACH;AAC5C;AACA;AACA;AACA;;AAEsC;AACE;AACY;AACd;AACU;;AAEhD;AACA,aAAa,mCAAmC,KAAK,sCAAsC;AAC3F,IAAI,iEAAiE;AACrE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,+CAA+C;AAC1D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,yDAAyD,kDAAkD;AAC3G;AACA,UAAU;AACV;AACA,YAAY,4EAA4E;AACxF;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,0CAA0C;AACzD;AACA,eAAe,oDAAoD;AACnE;AACA,eAAe,uCAAuC;AACtD,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,oDAAoD;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,gFAAgF;AACxF;AACA,6EAA6E,+CAA+C;AAC5H;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,YAAY,4EAA4E;AACxF;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,0CAA0C;AACzD,eAAe,cAAc;AAC7B;AACA;AACA,eAAe,uCAAuC;AACtD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8EAA8E;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,+CAA+C;AAC5H;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA,SAAS;AACT;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,YAAY,4EAA4E;AACxF;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA,eAAe,uCAAuC;AACtD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qEAAqE;AAC7E;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,SAAS;AACT;AACA,YAAY,4EAA4E;AACxF;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,0CAA0C;AACzD,eAAe,gBAAgB;AAC/B;AACA,eAAe,uCAAuC;AACtD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mEAAiB;AACnB;AACA,wDAAwD;AACxD,uBAAuB,yCAAyC;AAChE,IAAI,oFAAoF;AACxF;AACA,qDAAqD,8CAA8C;AACnG;AACA;AACA;AACA,yBAAyB,oFAAoF;AAC7G;AACA,aAAa,SAAS,+BAA+B,qEAAqE;AAC1H,IAAI,kDAAkD;AACtD,IAAI,2EAA2E;AAC/E;AACoC;AAC7B;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wDAAwD,mCAAmC,KAAK,oCAAoC;AACpI;AACA,aAAa,SAAS,EAAE,6CAA6C;AACrE;AACO;AACP;AACA;AACA;AACA;AACA;AACA,0BAA0B,6DAAU;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA,mEAAmE;AACnE,kBAAkB,iBAAiB,iEAAiE;AACpG,uBAAuB,4DAA4D;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gCAAgC;AAC3C,WAAW,uCAAuC;AAClD,aAAa,SAAS,EAAE,iEAAiE;AACzF;AACO;AACP;AACA;AACA,6BAA6B,iEAAc;AAC3C;AACA,oBAAoB,6IAA0B;AAC9C;AACA;AACA,yBAAyB,+BAA+B;AACxD;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,QAAQ,0EAA0E;AAClF;AACA,WAAW,OAAO;AAClB,WAAW,0CAA0C;AACrD;AACA,WAAW,oDAAoD;AAC/D;AACA,WAAW,uCAAuC;AAClD,aAAa,SAAS;AACtB;AACA,WAAW,oEAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,QAAQ,8EAA8E;AACtF;AACA,WAAW,OAAO;AAClB,WAAW,0CAA0C;AACrD,WAAW,cAAc;AACzB;AACA;AACA,WAAW,uCAAuC;AAClD,aAAa,SAAS;AACtB;AACA,WAAW,oEAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,QAAQ,kFAAkF;AAC1F;AACA,WAAW,OAAO;AAClB,WAAW,cAAc;AACzB;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB;AACA;AACA,WAAW,uCAAuC;AAClD,aAAa,SAAS;AACtB;AACA,WAAW,oEAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,QAAQ,wEAAwE;AAChF;AACA,WAAW,OAAO;AAClB,WAAW,0CAA0C;AACrD,WAAW,gBAAgB;AAC3B;AACA,WAAW,uCAAuC;AAClD,aAAa,SAAS;AACtB;AACA,WAAW,oEAAS;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA,MAAM,0HAAO;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA,kCAAkC,8DAAO;AACzC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0BAA0B,6DAAU;;AAEpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,oDAAoD;AAC/D,WAAW,6BAA6B;AACxC,WAAW,kCAAkC;AAC7C;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,IAAI,gDAAgD;AACpD;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,kIAAe,GAAG;AACnC,GAAG;AACH;AACA;AACA,kBAAkB,kIAAe,GAAG;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0HAAO;AACnB,cAAc,0HAAO;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,sBAAsB;AACjC,WAAW,QAAQ;AACnB;AACA;AACA,oBAAoB,8DAAO;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA,MAAM,0HAAO;AACb;AACA;AACA;AACA;;AAEA,kGAAkG;AAClG;AACA;AACA,WAAW,gCAAgC;AAC3C,WAAW,OAAO;AAClB,WAAW,8DAA8D;AACzE,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA,KAAK,GAAG,yBAAyB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,C;;;;;;;;;;;;;AC1wBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgH;AACgB;AACtB;AACN;AAC1D;AACG;AACV;AACa;AACL;AACA;AACI;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoC;AACoC;;AAExE;AACA,gDAAgD,kDAAkD;AAClG,IAAI,8CAA8C,MAAM,8EAA8E;AACtI;AACA;AACA,qCAAqC,4EAA4E;AACjH,sBAAsB,8EAA8E;AACpG,yBAAyB,oFAAoF;AAC7G,yCAAyC,kFAAkF;AAC3H;AACA,kCAAkC,aAAa,GAAG;AAClD,mCAAmC;AACnC,sCAAsC;AACtC,mCAAmC,aAAa,IAAI;AACpD,oCAAoC;AACpC,uCAAuC;AACvC,sCAAsC,aAAa,IAAI;AACvD,uCAAuC;AACvC,0CAA0C;AAC1C,qCAAqC,aAAa,IAAI;AACtD,sCAAsC;AACtC,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA,uCAAuC,iDAAiD;AACxF,QAAQ,4FAA4F;AACpG,YAAY,8CAA8C;AAC1D,QAAQ,8EAA8E;AACtF;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,WAAW,sDAAsD,GAAG,6CAA6C;AACjH,MAAM,6EAA6E;AACnF;AACA,8BAA8B,aAAa,GAAG;AAC9C,8BAA8B,qBAAqB,GAAG;AACtD,8BAA8B,oBAAoB,GAAG;AACrD,8BAA8B,kBAAkB,GAAG;AACnD,8BAA8B,sCAAsC,GAAG;AACvE,8BAA8B,4BAA4B,GAAG;AAC7D,qCAAqC;AACrC,wCAAwC;AACxC;AACA,aAAa,6DAA6D;AAC1E;AACA;AACA,8BAA8B,sBAAsB,GAAG;AACvD,8BAA8B,kBAAkB,GAAG;AACnD;AACA,aAAa,qHAAqH;AAClI,aAAa,OAAO,gDAAgD,sDAAsD;AAC1H,aAAa,QAAQ;AACrB,aAAa,sBAAsB;AACnC,aAAa,sBAAsB;AACnC,aAAa,sBAAsB;AACnC;AACA,SAAS,+HAAY;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,sDAAsD,GAAG,6CAA6C;AACvH,QAAQ,6EAA6E;AACrF;AACA;AACA;AACA,iCAAiC,aAAa,GAAG;AACjD,iCAAiC,qBAAqB,GAAG;AACzD,iCAAiC,oBAAoB,GAAG;AACxD,iCAAiC,kBAAkB,GAAG;AACtD,iCAAiC,sCAAsC,GAAG;AAC1E,iCAAiC,4BAA4B,GAAG;AAChE,wCAAwC;AACxC,2CAA2C;AAC3C;AACA;AACA;AACA,iCAAiC,sBAAsB,GAAG;AAC1D,iCAAiC,sBAAsB,GAAG;AAC1D;AACA,eAAe,qHAAqH;AACpI,eAAe,OAAO,gDAAgD,sDAAsD;AAC5H,eAAe,QAAQ;AACvB,eAAe,sBAAsB;AACrC,eAAe,sBAAsB;AACrC,eAAe,sBAAsB;AACrC,iBAAiB,aAAa;AAC9B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,sDAAsD,GAAG,6CAA6C;AACvH,QAAQ,6EAA6E;AACrF;AACA;AACA,oCAAoC,aAAa,GAAG;AACpD,oCAAoC,qBAAqB,GAAG;AAC5D,oCAAoC,oBAAoB,GAAG;AAC3D,oCAAoC,kBAAkB,GAAG;AACzD,oCAAoC,sCAAsC,GAAG;AAC7E,oCAAoC,4BAA4B,GAAG;AACnE,2CAA2C;AAC3C,8CAA8C;AAC9C;AACA;AACA;AACA,oCAAoC,sBAAsB,GAAG;AAC7D,oCAAoC,sBAAsB,GAAG;AAC7D;AACA,eAAe,qHAAqH;AACpI,eAAe,OAAO,gDAAgD,sDAAsD;AAC5H,eAAe,QAAQ;AACvB,eAAe,sBAAsB;AACrC,eAAe,sBAAsB;AACrC,eAAe,sBAAsB;AACrC,iBAAiB,QAAQ;AACzB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,sDAAsD,GAAG,6CAA6C;AACtH,QAAQ,6EAA6E;AACrF;AACA;AACA;AACA,mCAAmC,aAAa,GAAG;AACnD,mCAAmC,qBAAqB,GAAG;AAC3D,mCAAmC,oBAAoB,GAAG;AAC1D,mCAAmC,kBAAkB,GAAG;AACxD,mCAAmC,sCAAsC,GAAG;AAC5E,mCAAmC,4BAA4B,GAAG;AAClE,0CAA0C;AAC1C,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,mCAAmC,sBAAsB,GAAG;AAC5D,mCAAmC,sBAAsB,GAAG;AAC5D;AACA,eAAe,qHAAqH;AACpI,eAAe,OAAO,gDAAgD,sDAAsD;AAC5H,eAAe,QAAQ;AACvB,eAAe,sBAAsB;AACrC,eAAe,sBAAsB;AACrC,eAAe,sBAAsB;AACrC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sDAAsD;AAC7F;AACA;AACA;AACA,eAAe,mCAAmC;AAClD,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,4EAA4E;AAC5F,QAAQ,wCAAwC,KAAK,6EAA6E;AAClI;AACA;AACA;AACA,eAAe,kFAAkF;AACjG;AACA,eAAe,uDAAuD;AACtE;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA,uCAAuC,6DAA6D;AACpG,+DAA+D,yCAAyC;AACxG;AACA;AACA;AACqC;AACrC;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC,sDAAsD;AACzF;AACA;AACA;AACA,wBAAwB,aAAa;AACrC;AACA;AACA;AACA,wBAAwB,uDAAuD;AAC/E,wBAAwB;AACxB;AACA,aAAa,6DAA6D;AAC1E;AACA;AACA,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB,aAAa,sBAAsB;AACnC,aAAa,sBAAsB;AACnC,aAAa,sBAAsB;AACnC;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,6CAA6C;AAC3E;AACA;AACA;AACA,2BAA2B,aAAa;AACxC;AACA;AACA;AACA,2BAA2B,uDAAuD;AAClF,2BAA2B;AAC3B;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,sBAAsB;AACrC,eAAe,sBAAsB;AACrC,eAAe,sBAAsB;AACrC,iBAAiB,aAAa;AAC9B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0BAA0B,sDAAsD;AAChF;AACA;AACA;AACA,8BAA8B,aAAa;AAC3C;AACA;AACA;AACA,8BAA8B,uDAAuD;AACrF,8BAA8B;AAC9B;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,sBAAsB;AACrC,eAAe,sBAAsB;AACrC,eAAe,sBAAsB;AACrC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yCAAyC,sDAAsD;AAC/F;AACA;AACA,6BAA6B,aAAa;AAC1C;AACA;AACA;AACA,6BAA6B,uDAAuD;AACpF,6BAA6B;AAC7B;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,sBAAsB;AACrC,eAAe,sBAAsB;AACrC,eAAe,sBAAsB;AACrC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,6DAA6D;AAC5E;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sBAAsB;AACrC;AACA,GAAG;AACH;AACA;AACA,kBAAkB,kEAAO;AACzB;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA,gBAAgB,wFAAwF;AACxG;AACA;AACA;AACA,kCAAkC,mCAAmC;AACrE;AACA;AACA;AACA,kCAAkC,+CAA+C;AACjF;AACA;AACA;AACA,sBAAsB,4FAAa;AACnC;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sBAAsB;AACrC,iBAAiB,aAAa;AAC9B;AACA;AACA,GAAG;AACH;AACA;AACA,kBAAkB,kEAAO;AACzB;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;;AAEA;AACA,mDAAmD,qIAAkB;AACrE;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sBAAsB;AACrC;AACA,GAAG;AACH;AACA;AACA,kBAAkB,kEAAO;AACzB;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;;AAEA;AACA,0CAA0C,qIAAkB;AAC5D,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sBAAsB;AACrC;AACA,GAAG;AACH;AACA;AACA,kBAAkB,kEAAO;AACzB;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;;AAEA;AACA,yCAAyC,qIAAkB;AAC3D,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH,CAAC,G;;;;;;;;;;;;;AC3qBD;AAAA;AAAA;AAA0G;AACN;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;;ACpCD;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACpG;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEgD;AACA;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,6BAA6B,kEAAY;AACzC;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,2BAA2B,gEAAe;AAC1C;;AAEA;AACA,0BAA0B;AAC1B,2BAA2B;AAC3B;AACA,aAAa,qDAAqD;AAClE,eAAe,OAAO;AACtB;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,uFAAuF;AACxG;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;;AC5GD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AAC1D;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,mEAAmE;AAC9G;AACA,6EAA6E,oDAAoD;AACjI;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,wBAAwB;AACrC;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gCAAgC;AAChC;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,SAAS,+HAAY;AACrB;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,kDAAkD;AACjE,iBAAiB,kDAAkD;AACnE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;;ACjGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgH;AACR;AACwB;AACtB;AACN;AACxD;AACF;AACD;AACC;AACC;AACD;AACE;AACC;AACO;AACL;AACH;AACT;AACa;AACD;AACF;AACY;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEkC;AACN;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,sDAAsD;AACnE;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,6FAA6F,kBAAkB;AAC/G,+FAA+F,kBAAkB;AACjH;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,iGAAiG,kBAAkB;AACnH,mGAAmG,kBAAkB;AACrH;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAK;AACvB,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kDAAkD;AACjE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6IAA0B;AACvD;AACA,eAAe;AACf;AACA;AACA,kCAAkC,iCAAiC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uDAAK;AAC7B,6BAA6B,6IAA0B;AACvD;AACA;AACA,kCAAkC,iCAAiC;AACnE;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qCAAqC;AACpD;AACA,eAAe,qCAAqC;AACpD,eAAe,QAAQ;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC;AACA,GAAG;AACH;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D,6BAA6B,iIAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC;AACA,GAAG;AACH;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D,6BAA6B,iIAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D,6BAA6B,iIAAc;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,4HAA4H;AAC5H;AACA;AACA;AACA,iEAAiE;AACjE;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB;AACA,iBAAiB,eAAe;AAChC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB;AACtB,oBAAoB;;AAEpB;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,8BAA8B,uDAAK,CAAC,0DAAQ,0BAA0B,0DAAQ;AAC9E,iBAAiB;AACjB;AACA,8BAA8B,uDAAK,CAAC,0DAAQ,0BAA0B,0DAAQ;AAC9E;;AAEA;AACA;AACA,4CAA4C,qIAAkB;AAC9D;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA,qBAAqB,oBAAoB;AACzC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,sBAAsB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qBAAqB,oBAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,eAAe;AAC9B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,wBAAwB,QAAQ,wBAAwB;AAC3G,8CAA8C,0CAA0C;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,kBAAkB,0DAAQ;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,kBAAkB,0DAAQ;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,gCAAgC;AAC/C,eAAe,IAAI;AACnB,eAAe,IAAI;AACnB,iBAAiB,eAAe;AAChC;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D,6BAA6B,iIAAc;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D,6BAA6B,iIAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6IAA0B;AACpD;AACA;AACA,+BAA+B,mCAAmC;AAClE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA,sBAAsB,uDAAK,CAAC,0DAAQ,4BAA4B,0DAAQ;AACxE,wBAAwB,6IAA0B;AAClD;AACA,SAAS;AACT;AACA;AACA,6BAA6B,mCAAmC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH,CAAC,GAAG;AACJ;AAC6B;AAC7B;AACA;AACA,oBAAoB,6IAA0B;AAC9C;AACA;AACA,yBAAyB,mCAAmC;AAC5D;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,YAAY;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,YAAY;AACjE;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,6IAA0B;AAC9C;AACA;AACA,yBAAyB,mCAAmC;AAC5D;AACA;AACA;AACA,yBAAyB,8BAA8B;AACvD;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,sBAAsB;AAC/C;AACA;;AAEA;AACA;AACA,OAAO;AACP,yBAAyB,sBAAsB;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP,oCAAoC,qIAAkB;;AAEtD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,mBAAmB,qDAAqD;AACxE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AC3xCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACxD;AACF;AACG;AACO;AACL;AACC;AACb;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE8B;AACU;AACR;AACoB;AACc;AACI;AACE;AACpB;AACkD;AACpE;AAClC;;AAEA;AACA;AACA;AACA;AACA,IAAI,gHAAgH;AACpH;AACA,4CAA4C,+DAA+D;AAC3G,wCAAwC,oDAAoD;AAC5F;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,aAAa;AAC9D,UAAU,gCAAgC;AAC1C;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA,YAAY,4CAA4C;AACxD;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,iFAAiF;AAChG,UAAU,2FAA2F;AACrG;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,uBAAuB,yDAAO;;AAE9B;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,yBAAyB,mEAAiB;;AAE1C;AACA,yEAAyE,kBAAkB;AAC3F,QAAQ,eAAe;AACvB;AACA;AACA,cAAc;AACd;AACA,qBAAqB,yFAAU;AAC/B;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,sBAAsB,wDAAM;;AAE5B;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kDAAkD;AACrE;AACA,kBAAkB,4FAAa;AAC/B;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB,iBAAiB,4CAA4C;AAC7D;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sCAAsC;AACzD,mBAAmB,OAAO;AAC1B;AACA,kBAAkB,4FAAa;AAC/B;AACA,SAAS;AACT;AACA,qBAAqB,6DAAW;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,iDAAiD;AAClE;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,8DAA8D,iBAAiB;AAC/E;AACA,iBAAiB,eAAe;AAChC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sEAAsE;AACzF;AACA;AACA;AACA,yDAAyD,+CAA+C;AACxG;AACA,QAAQ,4CAA4C;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,eAAe,SAAS;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA,iBAAiB,gEAAK;;AAEtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kCAAkC;AACjD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR,WAAW,8DAA8D;AACzE;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,kBAAkB,SAAS,gCAAgC;AACnE;AACA;AACA,iBAAiB,4CAA4C;AAC7D;AACA,GAAG;AACH;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA,sDAAsD,oCAAoC;AAC1F;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,+BAA+B,4CAA4C;AAC3E,YAAY,sCAAsC;AAClD;AACA;AACA,eAAe,gCAAgC;AAC/C,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,kCAAkC;AACjD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;;AAEA;AACA,yBAAyB,4EAA4E;AACrG,QAAQ,8DAA8D;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,QAAQ,0EAA0E;AAClF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,eAAe,gCAAgC;AAC/C;;AAEA;AACA,wCAAwC,oBAAoB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,QAAQ,gEAAgE;AACxE;AACA;AACA,eAAe,gCAAgC;AAC/C;AACA,GAAG;AACH,CAAC;AAC8B;AAC/B,0FAAG,WAAW,2FAAY;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4GAAqB,mBAAmB,6GAAsB;AAC1E;AACA;AACA,C;;;;;;;;;;;;;AC/hBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACrD;AACL;AACD;AACC;AACG;AACO;AACR;AACT;AACa;AACD;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEkC;AACF;AACN;AACU;AAC8B;;AAElE;AACA;AACA;AACA;AACA,6BAA6B,4DAA4D;AACzF,uBAAuB,4DAA4D;AACnF,IAAI,+CAA+C;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,+DAA+D;AAC7E;AACA;AACA,aAAa,uEAAuE;AACpF;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA,yEAAyE;AACzE,wCAAwC;AACxC;AACA;AACA;AACA,gBAAgB,4CAA4C;AAC5D;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD;AACA,yBAAyB,0DAAQ;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,eAAe,4DAA4D;AAC3E;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC;AACzC,+CAA+C;AAC/C;AACA,8CAA8C;AAC9C,gCAAgC;AAChC,6BAA6B;AAC7B;AACA,QAAQ,8EAA8E;AACtF;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,mCAAmC;AACpD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C,iBAAiB,YAAY;AAC7B;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,4DAA4D;AACpE;AACA;AACA,eAAe,8BAA8B;AAC7C,iBAAiB,YAAY;AAC7B;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oCAAoC;AACpC,oCAAoC;AACpC,uCAAuC;AACvC;AACA,eAAe,eAAe;AAC9B,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,sBAAsB;AACtB,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA,oCAAoC;AACpC,mCAAmC;AACnC,mCAAmC;AACnC,mCAAmC;AACnC,mCAAmC;AACnC,mCAAmC;AACnC;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,sDAAsD;AACvE;AACA,GAAG;AACH;AACA;AACA;AACA,QAAQ,4BAA4B;AACpC;AACA;AACA,eAAe,uEAAuE;AACtF;AACA;AACA;AACA;;AAEA;AACA,8DAA8D,kDAAkD;AAChH;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,uEAAuE;AACtF;AACA,GAAG;AACH;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,kDAAkD;AACnE;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,sCAAsC;AACvD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,0BAA0B,yDAAO;AACjC,WAAW;AACX;AACA,0BAA0B,sDAAI;AAC9B;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,GAAG;AACJ;AACA,WAAW;AACX,aAAa;AAC0B;AACvC;AACA;AACA;AACA,gBAAgB,sDAAI;AACpB;AACA,OAAO,iGAAU;AACjB;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,sDAAI;AACrB;AACA,wBAAwB,2DAAS;AACjC,iBAAiB,sDAAI;AACrB;AACA;AACA,GAAG;AACH,C;;;;;;;;;;;;;AChbA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwG;AACQ;AACZ;AAC4B;AAChC;AACM;AACR;AACY;AACN;AACxD;AACF;AACI;AACJ;AACE;AACQ;AACL;AACZ;AACa;AACb;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACG;AACL;AACY;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoD;AACkB;AAClC;AACA;AACV;AACU;AACoB;AACU;AACM;AACpB;AACpD;;AAEA;AACA;AACA,IAAI,2EAA2E;AAC/E;AACA;AACA,wDAAwD,wCAAwC;AAChG,eAAe,wDAAwD;AACvE;AACA,qEAAqE;AACrE;AACA;AACA,wBAAwB,8CAA8C;AACtE;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,wBAAwB;AACxB,iCAAiC;AACjC,oBAAoB,8EAA8E;AAClG;AACA,QAAQ,8DAA8D;AACtE;AACA;AACA;AACA;AACA;AACA,gDAAgD,4CAA4C;AAC5F;AACA,aAAa,sCAAsC;AACnD;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,aAAa;AACnC,6DAA6D,kDAAkD;AAC/G,QAAQ,8CAA8C;AACtD;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,sFAAsF;AAC9F;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,8BAA8B;AAC9B,iBAAiB,cAAc;AAC/B;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,2DAA2D,iEAAiE;AAC5H;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,4CAA4C,sDAAsD;AAClG;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC,kDAAkD;AACvF,QAAQ,+DAA+D;AACvE;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAoC,8CAA8C;AAClF,QAAQ,6DAA6D;AACrE;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,wDAAwD;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,sCAAsC,kDAAkD;AACxF;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,gEAAgE;AACtF;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC;AACpC,4CAA4C;AAC5C,0CAA0C;AAC1C,kDAAkD;AAClD;AACA,yCAAyC;AACzC,kCAAkC;AAClC,+BAA+B;AAC/B;AACA,QAAQ,8EAA8E;AACtF;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,cAAc,oEAAoE;AAClF,uCAAuC,0DAA0D;AACjG;AACA;AACA,QAAQ,mFAAmF;AAC3F;AACA;AACA;AACA,eAAe,oEAAoE;AACnF,eAAe,8BAA8B;AAC7C,6BAA6B,+CAA+C;AAC5E;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,0DAA0D;AAClE,uCAAuC,qDAAqD;AAC5F;AACA;AACA;AACA,eAAe,yCAAyC;AACxD,eAAe,wCAAwC;AACvD,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAuC,8DAA8D;AACrG;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,mEAAmE;AACnE;AACA,uCAAuC,iEAAiE;AACxG;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,6DAA6D;AAClF;AACA;AACA,QAAQ,0CAA0C;AAClD;AACA;AACA;AACA;AACA,eAAe,OAAO,gCAAgC,wBAAwB;AAC9E;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACuC;AACxC,0FAAG,oBAAoB,2FAAY;;AAEnC;AACA;AACA;AACA;AACA,WAAW,QAAQ,0BAA0B,8CAA8C;AAC3F;AACA,QAAQ,8DAA8D;AACtE,qCAAqC,+CAA+C;AACpF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ,0BAA0B,8CAA8C;AAC3F;AACA,QAAQ,8DAA8D;AACtE,sCAAsC,+CAA+C;AACrF;AACA;AACA;AACA,WAAW,eAAe;AAC1B;;AAEA,0CAA0C,8DAA8D;AACxG;AACA,gEAAgE;AAChE;AACA;AACA,wBAAwB,8CAA8C;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,4CAA4C;AAC5F,aAAa,sCAAsC;AACnD;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA,cAAc;AACd,wBAAwB,yFAAU;AAClC;AACA,KAAK;;AAEL;AACA;AACA;AACA,gBAAgB;AAChB;;AAEA;AACA;AACA;AACA,gBAAgB;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAI;AACpB;;AAEA;AACA;AACA,gBAAgB,MAAM;AACtB;;AAEA;AACA;AACA,gBAAgB,MAAM;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,KAAK;;AAEL;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,uBAAuB,gCAAgC;AACvD;AACA,sBAAsB,4FAAa;AACnC;AACA,aAAa;AACb;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA,4EAA4E,gIAAa;AACzF;AACA,GAAG;AACH;AACA;AACA,aAAa,gIAAa;AAC1B;AACA,GAAG;AACH;AACA;AACA,aAAa,gIAAa;AAC1B;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,QAAQ,sFAAsF;AAC9F;AACA;AACA,cAAc;AACd,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA,qBAAqB,yBAAyB;AAC9C;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,wBAAwB,+HAAY;AACpC,aAAa,+HAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qIAAkB,CAAC,gIAAa;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA,aAAa,gIAAa;AAC1B;AACA,GAAG;AACH;AACA;AACA,aAAa,gIAAa;AAC1B;AACA,GAAG;AACH;AACA;AACA,MAAM,gIAAa;AACnB;AACA;AACA,GAAG;AACH;AACA;AACA,MAAM,gIAAa;AACnB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;AACH;AACA;AACA,wBAAwB,0FAAG;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,kCAAkC,iEAAiE;AACnG;AACA;AACA,mBAAmB,OAAO;AAC1B,YAAY,+EAA+E;AAC3F;AACA,kBAAkB,4FAAa;AAC/B;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB;AACvB;AACA;AACA;AACA,eAAe,gCAAgC;AAC/C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,2DAAS;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,0CAA0C,sBAAsB;AAChE;AACA;AACA;AACA;AACA;AACA,+DAA+D,0BAA0B;AACzF;AACA;AACA;AACA;AACA;AACA;;AAEA,0EAA0E,2DAA2D;AACrI;AACA;AACA,eAAe,QAAQ;AACvB;AACA,GAAG;AACH;AACA;AACA,0BAA0B,4FAAK;AAC/B,0BAA0B,4FAAK;AAC/B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D,+BAA+B,iIAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D,6BAA6B,iIAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D,6BAA6B,iIAAc;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB;AACA,iBAAiB,QAAQ;AACzB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gIAAa;;AAElC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAW,gIAAa;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,eAAe;AAC9B,iBAAiB,aAAa;AAC9B,GAAG;AACH;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D,6BAA6B,iIAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D,6BAA6B,iIAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB;AACA,aAAa,+HAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,iBAAiB,aAAa;AAC9B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,wCAAwC;AACvD,eAAe,sCAAsC;AACrD,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,2DAAS,EAAE,yBAAyB,wEAAwE;AAC9G;AACA;AACA;AACA,WAAW,mCAAmC;AAC9C,aAAa;AACb;AACA,sBAAsB,2DAAS,oBAAoB,sDAAI;AACvD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gCAAgC;AAC3C,WAAW,gCAAgC;AAC3C;AACA;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,4BAA4B,6IAA0B;AACtD;AACA;AACA,iCAAiC,mCAAmC;AACpE;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,C;;;;;;;;;;;;;AC15CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACJ;AACM;AACR;AAC/C;AACL;AACD;AACC;AACG;AACO;AACR;AACI;AACL;AACI;AACD;AACW;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE0B;AACQ;AACR;AACU;AAC8B;;AAElE;AACA,2BAA2B,yCAAyC,aAAa,oDAAoD;AACrI,IAAI,kEAAkE;AACtE;AACA,uBAAuB,oCAAoC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,sDAAsD;AACpE;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO,oCAAoC,+BAA+B;AACvF,aAAa,uEAAuE;AACpF;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD;AACA,0BAA0B,0DAAQ;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA,eAAe,4DAA4D;AAC3E;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC,6BAA6B;AAC7B,sCAAsC;AACtC,mCAAmC;AACnC;AACA,qCAAqC;AACrC,0CAA0C;AAC1C;AACA;AACA,QAAQ,oDAAoD;AAC5D;AACA,8BAA8B;AAC9B,yCAAyC;AACzC,2BAA2B;AAC3B;AACA,QAAQ,8EAA8E;AACtF;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,+DAA+D,gIAAa;AAC5E,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,8BAA8B;AAC/C;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,4DAA4D;AACpE;AACA;AACA,eAAe,8BAA8B;AAC7C,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,+EAA+E;AACzG;AACA;AACA;AACA;AACA,uCAAuC;AACvC,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oCAAoC;AACpC,oCAAoC;AACpC,uCAAuC;AACvC;AACA,eAAe,eAAe;AAC9B,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,sBAAsB;AACtB,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA,iBAAiB,gIAAa;AAC9B;AACA;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,QAAQ,+DAA+D;AACvE;AACA;AACA;AACA,eAAe,uEAAuE;AACtF;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,8DAA8D,kDAAkD;AAChH;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,uEAAuE;AACtF;AACA,GAAG;AACH;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,kDAAkD;AAC1D;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,sCAAsC;AACvD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,oCAAoC;AACrD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,sDAAI;AAChC;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,sDAAI,EAAE;AACR;AACA,WAAW;AACX,aAAa;AACiB;AAC9B;AACA;AACA;AACA,gBAAgB,sDAAI;AACpB;AACA,OAAO,iGAAU;AACjB;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,sDAAI;AACrB;AACA,wBAAwB,2DAAS;AACjC,iBAAiB,sDAAI;AACrB;AACA;AACA,GAAG;AACH,C;;;;;;;;;;;;;ACpbA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACtD;AACJ;AACC;AACR;AACe;AACF;AACb;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACA;AACU;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,qDAAqD;AACxH;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB,0DAA0D;AAC1E;AACA;;AAEA;AACA,mCAAmC,kEAAkE;AACrG,QAAQ,kEAAkE;AAC1E;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAI;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,wDAAwD;AACxE;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,kDAAkD;AAC/D;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,iBAAiB,6DAA6D;AAC9E;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,uDAAuD;AACxE;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,kDAAkD;AACjE,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,kDAAkD;AACjE,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,kDAAkD;AACjE,iBAAiB,4DAA4D;AAC7E;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;;AClKD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AACnD;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEkC;AACoC;AAClB;AACoB;;AAExE;AACA,gCAAgC;AAChC,2BAA2B;AAC3B;AACA;AACA,0BAA0B,4CAA4C;AACtE,IAAI,kDAAkD;AACtD,OAAO,4DAA4D;AACnE;AACA;AACA;AACA,QAAQ,2DAA2D;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,4CAA4C;AACzD,aAAa,eAAe;AAC5B,aAAa,gDAAgD;AAC7D;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2FAAa;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sCAAsC;AACtC,4CAA4C;AAC5C,0CAA0C;AAC1C,gDAAgD;AAChD;AACA,2CAA2C;AAC3C,+CAA+C;AAC/C;AACA,QAAQ,8EAA8E;AACtF;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,uEAAuE,gIAAa;AACpF;;AAEA;AACA,kBAAkB,8DAA8D;AAChF;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,iBAAiB,yDAAQ;AACzB;;AAEA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,eAAe,gDAAgD;AAC/D,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C,eAAe,gDAAgD;AAC/D,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C,eAAe,gDAAgD;AAC/D,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,oEAAoE;AACnF,eAAe,8BAA8B;AAC7C,eAAe,gDAAgD;AAC/D,iBAAiB;AACjB;;AAEA;AACA,wEAAwE,4CAA4C;AACpH;AACA;AACA,eAAe,sCAAsC;AACrD;AACA,GAAG;AACH,CAAC,CAAC,yDAAQ,EAAE,sCAAsC,qDAAqD;AACvG,oBAAoB,sDAAsD;AAC1E;AACA;AACmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,WAAW,kDAAkD;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yFAAG,eAAe,0FAAY,E;;;;;;;;;;;;;AC5L9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE4B;AAC0C;AAClB;;AAEpD;AACA,6BAA6B;AAC7B,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,4DAA4D;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC,sCAAsC;AACtC,oCAAoC;AACpC,0CAA0C;AAC1C;AACA,qCAAqC;AACrC,4CAA4C;AAC5C;AACA,QAAQ,8EAA8E;AACtF;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,iEAAiE,gIAAa;AAC9E;;AAEA;AACA,kBAAkB,qDAAqD;AACvE;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,iBAAiB,sDAAK;AACtB;;AAEA;AACA;AACA;AACA,eAAe,gCAAgC;AAC/C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,eAAe,OAAO;AACtB,iBAAiB;AACjB;;AAEA;AACA;AACA,QAAQ,qDAAqD;AAC7D;AACA;AACA,eAAe,gCAAgC;AAC/C;AACA,eAAe,OAAO;AACtB,eAAe,2CAA2C;AAC1D;AACA;;AAEA;AACA,sFAAsF;AACtF;AACA;AACA;AACA,eAAe,gCAAgC;AAC/C;AACA,eAAe,OAAO;AACtB,eAAe,KAAK;AACpB,mCAAmC,iEAAiE;AACpG;AACA,GAAG;AACH,CAAC,CAAC,sDAAK,EAAE,mCAAmC;AAC5C,2BAA2B,gDAAgD;AAC3E;AACA;AACgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,WAAW,kDAAkD;AAC7D;AACA;AACA;AACA,eAAe,sDAAK;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,WAAW,gCAAgC;AAC3C,WAAW,kDAAkD;AAC7D,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yFAAG,YAAY,0FAAY,E;;;;;;;;;;;;;AChO3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoG;AAC4B;AACtB;AACN;AACrD;AACF;AACV;AACa;AACD;AACG;AACO;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoC;AACkC;AACE;AACpB;;AAEpD;AACA,0BAA0B,0DAA0D;AACpF,gBAAgB,oEAAoE;AACpF,IAAI,yEAAyE;AAC7E;AACA,2CAA2C,uDAAuD;AAClG,IAAI,kDAAkD,KAAK,qDAAqD;AAChH;AACA;AACA;AACA,2DAA2D,6DAA6D;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA,eAAe,sBAAsB;AACrC;AACA;AACA,gBAAgB,IAAI;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA,eAAe;AACf;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,qBAAqB;AACrC;AACA,eAAe,OAAO;AACtB,iBAAiB,iDAAiD;AAClE;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,qBAAqB;AAChD,QAAQ,4CAA4C;AACpD;AACA,uEAAuE,qBAAqB;AAC5F,kCAAkC,yEAAyE;AAC3G,wDAAwD;AACxD;AACA;AACA;AACA;AACA,eAAe,mDAAmD;AAClE,eAAe,gCAAgC;AAC/C,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA,iBAAiB,4CAA4C;AAC7D;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,2DAAS;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,2DAAS;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,yEAAyE,sBAAsB;AAChH,wDAAwD;AACxD,kBAAkB;AAClB;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;;AAEA;AACA,oFAAoF,qDAAqD;AACzI;AACA,eAAe,sCAAsC;AACrD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB;AACA,aAAa,+HAAY;AACzB;AACA;AACA,wBAAwB,6IAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA,qFAAqF,4CAA4C;AACjI;AACA,eAAe,gCAAgC;AAC/C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB;AACA,aAAa,+HAAY;AACzB;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE,+DAA+D;AAC/D;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB;AACA,aAAa,+HAAY;AACzB;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,4CAA4C;AAC3D;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,4CAA4C;AAC3D,eAAe,qCAAqC;AACpD;AACA,eAAe,qCAAqC;AACpD;AACA;AACA,GAAG;AACH,CAAC;AACsC;AACvC,0FAAG,mBAAmB,2FAAY;;AAElC;AACA;AACA,2CAA2C,0CAA0C;AACrF;AACA,IAAI,wEAAwE;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,yDAAyD;AAC7D;AACA;AACA;AACA;AACA,IAAI,yEAAyE;AAC7E,2DAA2D;AAC3D;AACA;AACA;AACA,sFAAsF;AACtF,WAAW,4DAA4D;AACvE;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA,mDAAmD;AACnD,mBAAmB,qDAAqD;AACxE;AACA;AACA,8CAA8C,8BAA8B;AAC5E;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,QAAQ,wCAAwC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,qFAAqF;AACrH,IAAI,wFAAwF;AAC5F,QAAQ,mEAAmE;AAC3E,QAAQ,2EAA2E;AACnF,0DAA0D,+DAA+D;AACzH,iCAAiC,+EAA+E;AAChH;AACA,yDAAyD,yCAAyC;AAClG;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,wCAAwC;AACrD,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA,UAAU,uCAAuC;AACjD,UAAU,kDAAkD;AAC5D;AACA,eAAe;AACf;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA,8CAA8C,4CAA4C;AAC1F,QAAQ,wDAAwD;AAChE,sGAAsG;AACtG,uCAAuC,6EAA6E;AACpH;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B;AAC9B,oCAAoC;AACpC;AACA,oCAAoC;AACpC,yCAAyC;AACzC;AACA,QAAQ,8EAA8E;AACtF;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,wCAAwC;AACvD,iBAAiB,wCAAwC;AACzD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,sCAAsC,+BAA+B,4CAA4C;AACxI,4BAA4B,8FAA8F;AAC1H;AACA,oCAAoC,6EAA6E;AACjH;AACA,QAAQ,uGAAuG;AAC/G;AACA;AACA;AACA,eAAe,gCAAgC;AAC/C,eAAe,OAAO;AACtB;;AAEA;AACA,iCAAiC,4CAA4C,iBAAiB,sCAAsC;AACpI,4BAA4B,kGAAkG;AAC9H;AACA,oCAAoC,6EAA6E;AACjH;AACA,QAAQ,uGAAuG;AAC/G;AACA;AACA;AACA,eAAe,gCAAgC;AAC/C,eAAe,OAAO;AACtB;AACA,GAAG;AACH,CAAC;AACD,0FAAG,SAAS,2FAAY;;AAExB;AACA,iBAAiB,qFAAqF;AACtG;AACA;AACA,G;;;;;;;;;;;;;ACjqBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AAC1D;AACG;AACG;AACL;AACE;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE4B;AACE;AACA;AACI;AACgB;AAC0B;AACxB;AACf;AACJ;AACM;AACE;AACU;AACA;AACI;AACM;AACW;AACA;;AAExE;AACA;AACA,IAAI,8EAA8E;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,uBAAuB,kEAAgB;;AAEvC;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,wBAAwB,0DAAQ;;AAEhC;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,sBAAsB,wDAAM;;AAE5B;AACA,+BAA+B,6CAA6C;AAC5E,QAAQ,oDAAoD;AAC5D;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI,qGAAwB;AAC5B;;AAEA;AACA;AACA,8DAA8D,8DAA8D;AAC5H,UAAU,2EAA2E;AACrF,MAAM,4DAA4D;AAClE;AACA;AACA;AACA,OAAO;AACP;AACA,uDAAuD,sCAAsC;AAC7F;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,qDAAqD;AACrD,QAAQ;AACR;AACA,qDAAqD;AACrD,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,aAAa,SAAS;AACtB,eAAe,EAAE;AACjB;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAK;AAC5B;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP,QAAQ,4FAAa;AACrB;AACA;;AAEA;AACA,kEAAkE,gCAAgC;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,SAAS,GAAG;AACZ;AACA,uCAAuC,sCAAsC;AAC7E;AACA,6BAA6B,wCAAwC;AACrE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,gDAAgD,yDAAyD;AACzG;AACA,eAAe,wDAAwD;AACvE;AACA,eAAe,SAAS;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,4BAA4B,sDAAK;AACjC,SAAS;AACT;AACA,4BAA4B,sDAAK;AACjC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP,QAAQ,4FAAa;AACrB;AACA;;AAEA;AACA,QAAQ,sEAAsE;AAC9E,QAAQ,mEAAmE;AAC3E;AACA;AACA,4DAA4D,iDAAiD;AAC7G,iBAAiB,0FAA0F;AAC3G,eAAe,yEAAyE;AACxF;AACA,eAAe,kDAAkD;AACjE;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kDAAkD,qBAAqB;AACvE;AACA;AACA,4FAA4F;AAC5F;AACA;AACA,oCAAoC,iDAAiD;AACrF;AACA,4BAA4B,iDAAiD;AAC7E,iBAAiB,+BAA+B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0EAA0E;AAClF,sCAAsC,kEAAkE;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,0BAA0B,8CAA8C;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,eAAe,oFAAoF;AACnG,eAAe,yCAAyC;AACxD;AACA,eAAe,wCAAwC;AACvD;AACA,iBAAiB,gCAAgC;AACjD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,aAAa,6EAAc;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gGAAgG;AAC/G;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,wDAAwD,MAAM;AAC5E;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,MAAM,6EAAc;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gGAAgG;AAC/G;AACA,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC,eAAe,+BAA+B;AAC9C;AACA,GAAG;AACH;AACA;AACA,MAAM,+EAAgB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gGAAgG;AAC/G;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,aAAa,kFAAmB;AAChC;;AAEA;AACA,iCAAiC,4CAA4C;AAC7E,QAAQ,kDAAkD;AAC1D;AACA;AACA;AACA;AACA;AACA,iBAAiB,gEAAgE;AACjF,iBAAiB,yDAAyD;AAC1E,QAAQ,4EAA4E;AACpF;AACA;AACA;AACA;AACA;AACA,eAAe,oEAAoE;AACnF,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,4CAA4C,yDAAY,GAAG,uDAAU;AACrE;AACA;AACA;;AAEA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ,iGAAiG;AACzG;AACA,eAAe,0FAA0F;AACzG,eAAe,eAAe,0BAA0B,iDAAiD;AACzG,eAAe,gDAAgD;AAC/D,YAAY,sDAAsD;AAClE,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,iBAAiB,0DAAa;AAC9B;;AAEA;AACA;AACA;AACA,YAAY,qDAAqD;AACjE;AACA;AACA,YAAY,+CAA+C;AAC3D;AACA;AACA;AACA;AACA,UAAU,oFAAoF;AAC9F,UAAU,kFAAkF;AAC5F;AACA;AACA,QAAQ,qFAAqF;AAC7F;AACA,eAAe,oEAAoE;AACnF,eAAe,8BAA8B;AAC7C,6BAA6B,+CAA+C;AAC5E;AACA,GAAG;AACH;AACA;AACA,aAAa,0DAAa;AAC1B;;AAEA;AACA,+CAA+C,+CAA+C;AAC9F;AACA;AACA,QAAQ,2FAA2F;AACnG;AACA,eAAe,8BAA8B;AAC7C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,aAAa,0DAAa;AAC1B;;AAEA;AACA,gDAAgD,+CAA+C;AAC/F;AACA;AACA,QAAQ,6FAA6F;AACrG;AACA,eAAe,8BAA8B;AAC7C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,aAAa,0DAAa;AAC1B;;AAEA;AACA;AACA;AACA;AACA,QAAQ,2EAA2E;AACnF;AACA;AACA;AACA,SAAS;AACT;AACA,eAAe,sCAAsC;AACrD,eAAe,sCAAsC;AACrD;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,iBAAiB,uDAAU;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,+EAA+E;AACvF;AACA;AACA;AACA,SAAS;AACT;AACA,eAAe,oCAAoC;AACnD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,aAAa,uDAAU;AACvB;;AAEA;AACA,qDAAqD,+CAA+C;AACpG;AACA;AACA,QAAQ,+EAA+E;AACvF;AACA;AACA;AACA,SAAS;AACT;AACA,eAAe,8BAA8B;AAC7C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,aAAa,uDAAU;AACvB;;AAEA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA,QAAQ,mFAAmF;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,kDAAkD;AACxF;AACA;AACA;AACA,kCAAkC,yCAAyC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,iBAAiB;AAC3E;AACA,eAAe,yCAAyC;AACxD,eAAe,wCAAwC;AACvD,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,iBAAiB,2DAAc;AAC/B;;AAEA;AACA,kBAAkB,sCAAsC;AACxD;AACA;AACA;AACA,UAAU,yBAAyB;AACnC,UAAU,uCAAuC;AACjD;AACA,eAAe,wBAAwB;AACvC,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,iBAAiB,sDAAK;AACtB;;AAEA;AACA,wEAAwE,4CAA4C;AACpH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,6CAA6C,MAAM;AAC1E;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uDAAM;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,oDAAoD;AAC9F,QAAQ,6CAA6C;AACrD;AACA;AACA;AACA;;AAEA;AACA,yCAAyC,oDAAoD;AAC7F,QAAQ,6CAA6C;AACrD;AACA;AACA;AACA;;AAEA;AACA,6BAA6B,kEAAkE;AAC/F,cAAc,sBAAsB;AACpC;AACA;AACA,wDAAwD,yDAAyD;AACjH;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4CAA4C;AAC9E,8BAA8B,oDAAoD,MAAM;AACxF;AACA;AACA;AACA,eAAe,MAAM;AACrB,QAAQ,kEAAkE;AAC1E;;AAEA;AACA,yBAAyB,qBAAqB;AAC9C;AACA,YAAY,mDAAmD;AAC/D;AACA;AACA,oDAAoD,qBAAqB;AACzE;AACA;AACA;AACA,eAAe,MAAM;AACrB;;AAEA;AACA,yBAAyB,qBAAqB;AAC9C;AACA,YAAY,mDAAmD;AAC/D;AACA;AACA;AACA,eAAe,MAAM;AACrB;;AAEA;AACA,yBAAyB,uBAAuB;AAChD;AACA,YAAY,qDAAqD;AACjE;AACA;AACA;AACA,eAAe,MAAM;AACrB;;AAEA;AACA,yBAAyB,0BAA0B;AACnD;AACA,YAAY,wDAAwD;AACpE;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA,GAAG;AACH,CAAC;AAC2B;AAC5B,0FAAG,QAAQ,8FAAe,E;;;;;;;;;;;;;ACx4B1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AAC1D;AACE;AACQ;AACL;AACC;AACD;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwD;AACgB;AACA;;AAExE;AAC+C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mDAAmD;AACvD;AACA,yCAAyC,oEAAoE;AAC7G,IAAI;AACJ,oBAAoB;AACpB,uEAAuE,qDAAqD;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,yDAAyD;AAChE;AACA,wBAAwB,qEAAqE;AAC7F;AACA;AACA,eAAe,uDAAuD;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO,iCAAiC,+BAA+B;AACpF;AACA;AACA,IAAI,kIAAe;AACnB;AACA,yCAAyC;AACzC,WAAW,4DAA4D;AACvE;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,IAAI;AACpB;AACA,kBAAkB,2FAAK;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;;AAEA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;;AAEA;AACA;AACA,4BAA4B,qDAAqD;AACjF;AACA,8BAA8B,8CAA8C;AAC5E;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,6DAA6D,MAAM,8BAA8B;AACzG;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,4DAA4D;AACvE;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ,qDAAqD;AAC7D,UAAU,6EAA6E;AACvF;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,8CAA8C;AACrE,eAAe,qDAAqD;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,qBAAqB;AACrB,sBAAsB;AACtB;AACA,iBAAiB,eAAe;AAChC;AACA,GAAG;AACH;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA,iBAAiB,MAAM;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,0CAA0C,KAAK;AACjE;AACA;AACA,eAAe,8BAA8B;AAC7C,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,4DAA4D;AACjF;AACA,eAAe,8BAA8B;AAC7C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oGAAa;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,4DAA4D;AACjF;AACA,eAAe,8BAA8B;AAC7C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA,uBAAuB,0BAA0B;AACjD;AACA;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,4DAA4D,OAAO;AACxF;AACA;AACA,mCAAmC;AACnC,gCAAgC;AAChC,4CAA4C;AAC5C;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,0CAA0C;AAC1C;AACA;AACA;AACA,mCAAmC;AACnC,8CAA8C;AAC9C,oDAAoD;AACpD;AACA;AACA;AACA,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,8BAA8B;AAC/C;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO,iCAAiC,+BAA+B;AACtF;AACA,GAAG;AACH;AACA;AACA,oBAAoB,2FAAK;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC/iBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgH;AACgB;AACtB;AACN;AACrD;AACH;AACH;AACG;AACD;AACC;AACQ;AACR;AACG;AACC;AACD;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE0B;AAC8C;;AAExE;AACA,kDAAkD,0CAA0C;AAC5F,oBAAoB;AACpB,OAAO,6EAA6E;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,yCAAyC;AACtD;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,eAAe,4DAA4D;AAC3E;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,mCAAmC;AACpD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C,iBAAiB,YAAY;AAC7B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,4DAA4D;AACpE;AACA,eAAe,8BAA8B;AAC7C,iBAAiB,YAAY;AAC7B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,yEAAyE;AACzE,0FAA0F,cAAc;AACxG;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA,mEAAmE;AACnE,4FAA4F,iBAAiB;AAC7G;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B,mBAAmB,sCAAsC;AACzD;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,yCAAyC;AACxD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA,gCAAgC,sDAAI;AACpC;AACA;AACA;AACA;AACA;AACA,sBAAsB,4FAAa;AACnC;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,gFAAgF,qIAAkB;AAClG;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,sCAAsC;AACvD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,sCAAsC;AACvD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;;AC5QD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACJ;AACM;AACR;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoC;AACP;AAC2C;AAChC;AACJ;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gCAAgC;AAC7C,aAAa,OAAO;AACpB,aAAa,EAAE;AACf,aAAa,EAAE;AACf,aAAa,YAAY,uBAAuB,oDAAoD;AACpG;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,YAAY,8FAA8F;AAC1G;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,iBAAiB,gIAAa;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2FAAa;AAC/B;AACA,sBAAsB,6IAA0B;AAChD;AACA,SAAS;AACT;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA,yCAAyC,kEAAO;AAChD;AACA;AACA;AACA;AACA,uBAAuB,8BAA8B;AACrD,uBAAuB,OAAO;AAC9B,uBAAuB,EAAE;AACzB;AACA,sBAAsB,2FAAa;AACnC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8BAA8B;AACrD,uBAAuB,OAAO;AAC9B;AACA,sBAAsB,2FAAa;AACnC;AACA;AACA,aAAa;AACb;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,WAAW,kEAAO;AAClB;AACA,QAAQ,oEAAa;AACrB;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sCAAsC;AACrD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,oCAAoC,sDAAK;AACzC;AACA,GAAG;AACH,CAAC,CAAC,0DAAS;;;;;;;;;;;;;;ACpOX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoC;AACP;AACK;AACsC;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,sCAAsC;AACnD,gCAAgC,+CAA+C;AAC/E,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA,kCAAkC,+CAA+C;AACjF;AACA,gBAAgB,sCAAsC;AACtD;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,iBAAiB,gIAAa;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2FAAa;AAC/B;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,MAAM,8DAAO,CAAC,sDAAK;AACnB;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,0DAAS;;;;;;;;;;;;;;AC9GX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AAChB;AACN;AACN;AACJ;AACM;AACR;AACrD;AACC;AACG;AACG;AAChD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoC;AACD;AACA;AACS;AACO;AACxB;AACM;AACuC;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,sCAAsC;AACnD,aAAa,iCAAiC;AAC9C,aAAa,YAAY,uBAAuB,oDAAoD;AACpG;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD;AACA,sBAAsB,0DAAQ,CAAC,uEAAe;;AAE9C;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,8DAA8D;AAC/E;AACA,GAAG;AACH;AACA;AACA,sBAAsB,0DAAQ,CAAC,qIAAkB;AACjD;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,YAAY,8FAA8F;AAC1G;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,2BAA2B,0DAAQ;AACnC,iBAAiB,+DAAa;AAC9B;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0DAAQ,CAAC,qIAAkB;AAClD;AACA,OAAO;AACP,MAAM,+DAAO;AACb;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,iBAAiB,gIAAa;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sCAAsC;AACrD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA,0BAA0B,yDAAO;AACjC,WAAW;AACX;AACA,0BAA0B,sDAAI;AAC9B;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uCAAuC,0DAAQ;AAC/C;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,2DAAS;;;;;;;;;;;;;;ACvNX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AACjD;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoC;AACP;;AAE7B;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,gCAAgC;AAC7C,aAAa,gCAAgC;AAC7C,aAAa,sDAAsD;AACnE,aAAa,QAAQ;AACrB;AACA,aAAa,YAAY,uBAAuB,oDAAoD;AACpG;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,8DAA8D;AAC/E;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,YAAY,8FAA8F;AAC1G;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,iBAAiB,gIAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sCAAsC;AACrD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,4DAA4D,sDAAK,2DAA2D,sDAAK;AACjI;AACA,GAAG;AACH,CAAC,CAAC,0DAAS;;;;;;;;;;;;;;ACjKX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AACnD;AACO;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoC;AACU;AACX;AACN;AACG;AACwC;;AAExE;AACA,2BAA2B,mDAAmD;AAC9E;AACA,wCAAwC,qCAAqC;AAC7E,IAAI,qCAAqC,kDAAkD,qCAAqC;AAChI;AACA,oDAAoD,wCAAwC;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,sCAAsC;AACnD,mDAAmD,uBAAuB;AAC1E,aAAa,OAAO;AACpB,aAAa,sCAAsC;AACnD,aAAa,sCAAsC;AACnD,aAAa,YAAY,uBAAuB,oDAAoD;AACpG;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA,6GAA6G,uBAAuB;AACpI;AACA,gBAAgB,sCAAsC;AACtD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA,iBAAiB,yDAAQ;AACzB;;AAEA;AACA,mGAAmG,qCAAqC;AACxI,4BAA4B,qCAAqC;AACjE;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA,iBAAiB,uDAAK;AACtB;;AAEA;AACA;AACA;AACA,iBAAiB,4DAA4D;AAC7E;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,YAAY,8FAA8F;AAC1G;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,yDAAQ;AAC1C,sBAAsB,+DAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,wBAAwB,uDAAK;AAC7B,MAAM,6DAAK;AACX,MAAM,6DAAK,CAAC,uDAAK;AACjB;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,iBAAiB,gIAAa;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sCAAsC;AACrD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,2BAA2B,yDAAQ;AACnC,2BAA2B,yDAAQ;AACnC,8BAA8B,yDAAQ;AACtC;AACA;AACA,GAAG;AACH,CAAC,CAAC,0DAAS;;;;;;;;;;;;;;AC3OX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoC;AACD;AACN;AAC2C;AACA;AACxC;;AAEhC;AACA,iCAAiC;AACjC,aAAa,4DAA4D;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,sCAAsC;AACnD,gCAAgC,+CAA+C;AAC/E,aAAa,OAAO;AACpB;AACA,aAAa,sCAAsC;AACnD,aAAa,YAAY,uBAAuB,oDAAoD;AACpG;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA,kCAAkC,+CAA+C;AACjF;AACA,gBAAgB,sCAAsC;AACtD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,0DAA0D;AAC3E;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,+EAA+E;AACvF,mCAAmC;AACnC,iBAAiB,8FAA8F;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,YAAY,8FAA8F;AAC1G;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2FAAa;AAC/B,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,kBAAkB,2FAAa;AAC/B,OAAO;AACP,YAAY,mGAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,2FAAa;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,MAAM,6DAAK,CAAC,sDAAK;AACjB;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,iBAAiB,gIAAa;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sCAAsC;AACrD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,2BAA2B,yDAAQ;AACnC,2BAA2B,yDAAQ;AACnC;AACA;AACA,GAAG;AACH,CAAC,CAAC,0DAAS;;;;;;;;;;;;;;ACxNX;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoC;;AAEpC;AACA;AACA;AACA;AACA;AACA,IAAI,4DAA4D;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,sDAAsD;AACvE;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,YAAY,8FAA8F;AAC1G;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,0DAAS;;;;;;;;;;;;;;ACvEX;AAAA;AAAA;AAA0G;AACN;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,YAAY,uBAAuB,oDAAoD;AACpG;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA,QAAQ,oDAAoD;AAC5D,QAAQ,2DAA2D;AACnE,QAAQ,qEAAqE;AAC7E,QAAQ,2FAA2F;AACnG;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,sEAAsE,0CAA0C;AAChH;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA,QAAQ,4CAA4C;AACpD;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,kDAAkD;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,kDAAkD;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,+HAAY;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,iCAAiC;AACjC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sCAAsC;AACrD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;;AC7ID;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AACjD;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoC;AACH;AACuC;AACrC;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,sCAAsC;AACnD,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,YAAY,uBAAuB,oDAAoD;AACpG;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,8DAA8D;AAC/E;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,YAAY,8FAA8F;AAC1G;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,+BAA+B,wDAAO;AACtC;AACA;AACA;AACA;AACA;AACA,kBAAkB,2FAAa;AAC/B,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,kBAAkB,2FAAa;AAC/B;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,iBAAiB,gIAAa;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sCAAsC;AACrD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,iCAAiC,yDAAQ;AACzC;AACA,GAAG;AACH,CAAC,CAAC,0DAAS;;;;;;;;;;;;;;ACtKX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoC;AACoC;;AAExE;AACA;AACA;AACA;AACA,6EAA6E;AAC7E,kBAAkB;AAClB;AACA,qCAAqC,4CAA4C;AACjF,IAAI,4CAA4C;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,4CAA4C;AACzD,aAAa,OAAO;AACpB,aAAa,EAAE;AACf,aAAa,EAAE;AACf,aAAa,YAAY,uBAAuB,oDAAoD;AACpG;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,4EAA4E;AAC7F;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,YAAY,8FAA8F;AAC1G;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,4CAA4C;AAC/D,mBAAmB,OAAO;AAC1B,mBAAmB,EAAE;AACrB;AACA,kBAAkB,2FAAa;AAC/B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,4CAA4C;AAC/D,mBAAmB,OAAO;AAC1B,mBAAmB,EAAE;AACrB;AACA,kBAAkB,2FAAa;AAC/B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,4CAA4C;AAC/D,mBAAmB,OAAO;AAC1B;AACA,kBAAkB,2FAAa;AAC/B;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,iBAAiB,gIAAa;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sCAAsC;AACrD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA,kBAAkB,2FAAa;AAC/B;AACA,SAAS;AACT;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,0DAAS;;;;;;;;;;;;;;AChOX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AACpD;AACC;AACO;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoC;AACU;AACX;AACN;AACY;AAC+B;;AAExE;AACA,uBAAuB,qDAAqD;AAC5E,IAAI,+FAA+F;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,sCAAsC;AACnD,aAAa,OAAO;AACpB,aAAa,2CAA2C;AACxD;AACA,aAAa,YAAY,uBAAuB,oDAAoD;AACpG;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,iBAAiB,0DAAQ;AACzB;;AAEA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA,iBAAiB,uDAAK;AACtB;;AAEA;AACA;AACA;AACA,iBAAiB,4DAA4D;AAC7E;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,8FAA8F;AAC1G;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,kCAAkC,0DAAQ;AAC1C,iBAAiB,+DAAc;AAC/B;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,QAAQ,6DAAK,CAAC,uDAAK;AACnB,OAAO;AACP;AACA,QAAQ,+DAAO;AACf;AACA,4BAA4B,uDAAK,CAAC,0DAAQ,qDAAqD,0DAAQ;AACvG,MAAM,6DAAK;AACX;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,iBAAiB,gIAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,iBAAiB,0DAAQ;AACzB;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sCAAsC;AACrD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,0BAA0B,0DAAQ;AAClC,8BAA8B,0DAAQ;AACtC,uDAAuD,0DAAQ;AAC/D;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,0DAAS;;;;;;;;;;;;;;AC5QX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACY;AACgB;AACpF;AACH;AACC;AACC;AACC;AACC;AACO;AACR;AACT;AACa;AACD;AACP;AACiB;AACzD;AACA;AACA;AACA;;AAEgD;AACM;AACN;AACA;AACJ;AACkB;AAChB;AACA;AACN;AACX;AACM;AACqC;AACxE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,8EAA8E;AACpF;AACA;AACA;AACA,IAAI,kEAAkE;AACtE;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,kDAAkD;AAC7D,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,kDAAkD;AAC7D,WAAW,kDAAkD;AAC7D,WAAW,8DAA8D;AACzE,aAAa,0DAA0D;AACvE;AACO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI,qEAAqE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,0DAA0D;AACrE,WAAW,0DAA0D;AACrE,WAAW,OAAO;AAClB,WAAW,2CAA2C;AACtD,WAAW,QAAQ;AACnB;AACA,WAAW,QAAQ,kDAAkD,4DAA4D;AACjI;AACA;AACA,aAAa,OAAO;AACpB,aAAa,0DAA0D;AACvE,aAAa,0DAA0D;AACvE,aAAa,IAAI;AACjB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,6IAA0B;AAC5C;AACA;AACA,uBAAuB,+BAA+B;AACtD;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,6IAA0B;AAC/C;AACA;AACA,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,0EAA0E,qIAAkB;AAC5F,+EAA+E,qIAAkB;AACjG;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,sCAAsC;AACnD,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,0DAA0D;AACvE,aAAa,uDAAuD;AACpE,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,+DAAa;AAC1B;AACA;AACA,mBAAmB,gEAAc;AACjC;AACA;AACA;AACA,mBAAmB;AACnB;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA,mBAAmB,+DAAa;AAChC;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gEAAc;AAC3B;AACA;AACA,mBAAmB,gEAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,+DAAa;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gEAAc;AAC3B;AACA;AACA,mBAAmB,gEAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gEAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iEAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,+DAAa;AAChC;AACA,mCAAmC,uDAAK;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,mBAAmB,gEAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,iBAAiB;AACjB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,kDAAkD;AACjE,iBAAiB;AACjB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,iBAAiB;AACjB,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,OAAO;AACtB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,YAAY;AAC1B,cAAc,YAAY;AAC1B;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,0DAA0D;AACrE,WAAW,OAAO;AAClB;AACA;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA,gCAAgC,4DAA4D;AAC5F;AACA;AACA,WAAW,0DAA0D;AACrE,WAAW,OAAO;AAClB;AACA;AACA,iBAAiB,aAAa;AAC9B,wBAAwB,6DAAW;AACnC;AACA;;AAEA;;AAEA,kBAAkB,oEAAkB,EAAE,oEAAkB;AACxD;AACA;;AAEA;AACA;AACA,iBAAiB,oEAAkB;AACnC,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oEAAkB;AAC9C;AACA;AACA;AACA,kBAAkB,6DAAW;AAC7B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;AACD,kBAAkB,oEAAkB,EAAE,iEAAe;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,oEAAkB;AACnC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,wBAAwB,0CAA0C;AACnF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,8DAA8D;AACzE,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAK;AACvB,aAAa,oEAAkB;AAC/B;AACA,kBAAkB,oEAAkB,EAAE,gEAAc;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAK;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,oEAAkB;AACjC,GAAG;AACH,CAAC;AACD,kBAAkB,oEAAkB,EAAE,+DAAa;AACnD;;AAEA;AACA;AACA,eAAe,oEAAkB;AACjC,GAAG;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gCAAgC;AAC3C,WAAW,0DAA0D;AACrE,aAAa;AACb;AACA,kBAAkB,uDAAK;;AAEvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gCAAgC,qIAAkB;AAClD;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oEAAkB,EAAE,gEAAc;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uDAAK;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD,kBAAkB,iEAAe,EAAE,oEAAkB;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD,kBAAkB,iEAAe,EAAE,iEAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD,kBAAkB,iEAAe,EAAE,+DAAa;AAChD;AACA;AACA;AACA;AACA,CAAC;AACD,kBAAkB,iEAAe,EAAE,gEAAc;AACjD;AACA;AACA;AACA;AACA,CAAC;AACD,kBAAkB,iEAAe,EAAE,gEAAc;AACjD;AACA;AACA,CAAC;;AAED;;AAEA,kBAAkB,iEAAe,EAAE,iEAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,kBAAkB,iEAAe,EAAE,iEAAe;AAClD;AACA;AACA;AACA,KAAK;AACL,kBAAkB,6DAAW;AAC7B;AACA;AACA;AACA,CAAC;AACD,kBAAkB,iEAAe,EAAE,gEAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,kBAAkB,iEAAe,EAAE,+DAAa;AAChD;AACA,iBAAiB,uDAAK;AACtB;AACA;AACA;AACA,sBAAsB,uDAAK;AAC3B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,iBAAiB,uDAAK;AACtB;AACA;AACA,CAAC;AACD,kBAAkB,iEAAe,EAAE,gEAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0DAAQ;AACnC,OAAO;AACP,2BAA2B,0DAAQ;AACnC;AACA;AACA,yBAAyB,0DAAQ;AACjC,OAAO;AACP,yBAAyB,0DAAQ;AACjC,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA,kBAAkB,gEAAc,EAAE,iEAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,kBAAkB,gEAAc,EAAE,gEAAc;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,6DAAW;AAC7B,KAAK;AACL;AACA;AACA,6BAA6B,0DAAQ;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+DAAa;AAC/B,KAAK;AACL,kBAAkB,6DAAW;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,kBAAkB,gEAAc,EAAE,+DAAa;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAK;AAC1B;AACA;AACA,kBAAkB,6DAAW;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,kBAAkB,gEAAc,EAAE,gEAAc;AAChD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA,kBAAkB,+DAAa,EAAE,iEAAe;AAChD,kBAAkB,uDAAK;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,kBAAkB,+DAAa,EAAE,+DAAa;AAC9C;AACA;AACA;AACA;AACA,eAAe,uDAAK;AACpB,eAAe,uDAAK;;AAEpB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oGAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,oGAAa;AACtC;AACA,gCAAgC,qIAAkB;AAClD;;AAEA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6DAAW;AAC3B;AACA;AACA,CAAC;AACD,kBAAkB,+DAAa,EAAE,gEAAc;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAK;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uDAAK;AAC9B;AACA,uBAAuB,uDAAK;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAK;AACvB;AACA;AACA;AACA,CAAC;AACD,kBAAkB,+DAAa,EAAE,gEAAc;AAC/C,mBAAmB,uDAAK;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,+DAAa;AACxC;AACA;AACA;AACA;AACA,yBAAyB,+DAAa;AACtC;AACA;AACA,uCAAuC,0DAAQ;AAC/C;AACA,iCAAiC,+DAAa;AAC9C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6DAAW;AACjC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,uDAAK;AACvB;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA,kBAAkB,iEAAe,EAAE,iEAAe;AAClD;AACA;AACA,CAAC;AACD,kBAAkB,iEAAe,EAAE,gEAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,kBAAkB,iEAAe,EAAE,+DAAa;AAChD;AACA;AACA,CAAC;AACD,kBAAkB,iEAAe,EAAE,iEAAe;AAClD;AACA;AACA;AACA,KAAK;AACL,kBAAkB,6DAAW;AAC7B;AACA;AACA;AACA,CAAC;AACD,kBAAkB,iEAAe,EAAE,gEAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,oGAAa;AACnB,0BAA0B,iEAAe;AACzC;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA,kBAAkB,wEAAsB,EAAE,wEAAsB;AAChE;AACA;AACA,kBAAkB,6DAAW;AAC7B,KAAK;AACL;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA,kBAAkB,gEAAc,EAAE,iEAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gEAAc;AACtC;AACA,CAAC;AACD,kBAAkB,gEAAc,EAAE,gEAAc;AAChD;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0DAAQ;AACpC,4BAA4B,gEAAc,0BAA0B,0DAAQ;AAC5E,8BAA8B,gEAAc;AAC5C;AACA;AACA,0BAA0B,gEAAc;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gEAAc;AACtC;AACA;AACA;AACA;AACA,CAAC;AACD,kBAAkB,gEAAc,EAAE,+DAAa;AAC/C,oBAAoB,uDAAK;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,0DAAQ;AAC1C,uBAAuB,+DAAa;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,gEAAc;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,gEAAc;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,0BAA0B,gEAAc;AACxC;AACA;AACA,CAAC;AACD,kBAAkB,gEAAc,EAAE,gEAAc;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,6DAAW;AAC7B;AACA;AACA,kBAAkB,6DAAW;AAC7B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,+DAAa;AACrC;;AAEA;AACA;AACA;AACA,wBAAwB,+DAAa;AACrC;AACA;AACA,KAAK;AACL,kBAAkB,6DAAW;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,0DAAQ;AAClC,qBAAqB,+DAAa;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gEAAc;AACtC;AACA,CAAC;;AAED;AACA;AACA;AACA,WAAW,0DAA0D;AACrE,WAAW,0DAA0D;AACrE,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,wCAAwC;AACnD,WAAW,sCAAsC;AACjD,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA,iBAAiB,+DAAa;AAC9B;;AAEA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AChsEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtF;AACE;AACA;AACQ;AACL;AACC;AAChD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2B;AACA;AACU;AACR;AACsB;AAChB;AACqC;;AAExE;AACA,wDAAwD,mEAAmE;AAC3H,wCAAwC,yCAAyC;AACjF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,sCAAsC;AACjD,WAAW,iCAAiC;AAC5C,aAAa,gCAAgC;AAC7C;AACO;AACP;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,uDAAK;AAClB;;AAEA;AACA,uCAAuC,kDAAkD;AACzF;AACA;AACA;AACA,WAAW,gCAAgC;AAC3C,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,4FAAa;AAC3B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8DAA8D,kDAAkD;AAChH;AACA;AACA;AACA,WAAW,gCAAgC;AAC3C,WAAW,sCAAsC;AACjD,aAAa,gCAAgC;AAC7C;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,4FAAa;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,gCAAgC;AAC3C,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACO;AACP;AACA;AACA;;AAEA;AACA,kBAAkB,6IAA0B;AAC5C;AACA,KAAK;AACL;AACA;AACA,uBAAuB,+BAA+B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,kEAAkE,0CAA0C;AAC5G,IAAI,+CAA+C;AACnD;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C,aAAa,sCAAsC;AACnD;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,kBAAkB;AACnC;AACA,0BAA0B,qDAAI;AAC9B,KAAK,8BAA8B,0DAAS;AAC5C,0BAA0B,qDAAI;AAC9B,KAAK,8BAA8B,kEAAgB,wBAAwB,0DAAQ;AACnF,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,KAAK,8BAA8B,qDAAI;AACvC;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,wBAAwB;AAC1C;AACA;AACA,wBAAwB,qDAAI,oBAAoB,qDAAI;AACpD;AACA,uCAAuC,qDAAI;AAC3C;AACA;AACA;AACA;AACA;;AAEA,sEAAsE,+CAA+C;AACrH;AACA;AACA;AACA;AACA;AACA,WAAW,oCAAoC;AAC/C,WAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,qDAAI;;AAE7B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,sCAAsC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qDAAI;AAC5B,yBAAyB,qDAAI;AAC7B;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,8BAA8B;AACzC,WAAW,8BAA8B;AACzC,aAAa,QAAQ;AACrB;AACA;AACA;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,gDAAgD,0CAA0C;AAC1F;AACA;AACA,MAAM,yCAAyC;AAC/C,MAAM,wDAAwD,iCAAiC,yCAAyC;AACxI,MAAM,qDAAqD;AAC3D,MAAM,6EAA6E;AACnF;AACA;AACA;AACA,oBAAoB,0CAA0C;AAC9D;AACA;AACA,aAAa;AACb;AACA;AACA,G;;;;;;;;;;;;;ACnTA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACxD;AACF;AACA;AACC;AACI;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEsC;AACkC;AACA;AAC9C;AACO;;AAEjC;AAC+C;;AAE/C;AACA;AACA;AACA,qCAAqC,iDAAiD;AACtF,MAAM,iDAAiD;AACvD;AACA;AACA,IAAI,sCAAsC,MAAM,wCAAwC;AACxF;AACA;AACA,iDAAiD,iDAAiD;AAClG;AACA,sDAAsD,+DAA+D;AACrH,IAAI,+DAA+D;AACnE;AACA;AACA,UAAU;AACV,gBAAgB;AAChB;AACA;AACA;AACA,mEAAmE;AACnE;AACA,IAAI,mDAAmD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,0FAA0F;AACvG,aAAa,eAAe,0BAA0B,iDAAiD;AACvG,aAAa,gDAAgD;AAC7D,UAAU,sDAAsD;AAChE;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2FAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2FAAa;AAC7B;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,qDAAqD,yCAAyC;AAC9F,QAAQ,+CAA+C;AACvD,QAAQ,iEAAiE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,+CAA+C;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;;AAEA;AACA,iCAAiC,sDAAsD;AACvF;AACA,gBAAgB,gDAAgD;AAChE;AACA;AACA;;AAEA;AACA,sDAAsD,0DAA0D;AAChH,mCAAmC,sDAAsD;AACzF;AACA,YAAY;AACZ;AACA,SAAS,+HAAY;AACrB;AACA;AACA,aAAa,+DAAI;AACjB;;AAEA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA,oBAAoB,2FAAa;AACjC;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qEAAqE;AACjF,mCAAmC,iEAAiE;AACpG;AACA;AACA;AACA,gBAAgB,0GAA0G;AAC1H;AACA;AACA,mBAAmB,sCAAsC;AACzD;AACA,kBAAkB,2FAAa;AAC/B;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA,iBAAiB,0DAA0D;AAC3E,qBAAqB,gDAAgD;AACrE;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,8CAA8C;AAC9D;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA,6BAA6B,sDAAI;AACjC;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,yDAAyD,0DAA0D;AACnH;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,mDAAmD,0DAA0D;AAC7G;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,mBAAmB,mGAAa;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,2DAA2D;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,wBAAwB;AAC1F;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS,+BAA+B,qDAAqD;AAC5G;AACA,eAAe,OAAO,iDAAiD,gDAAgD;AACvH;AACA,iBAAiB,sCAAsC;AACvD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,2BAA2B,2DAAU;AACrC;AACA;AACA;;AAEA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,sCAAsC;AACvD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA,0CAA0C,kBAAkB,0BAA0B;AACtF;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,iBAAiB,eAAe;AAChC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,mGAAa;AAC7B;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,0CAA0C,KAAK;AAClE,0DAA0D,kBAAkB;AAC5E;AACA,eAAe,sCAAsC;AACrD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,4DAA4D,qBAAqB;AACjF;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,sCAAsC;AACvD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC;AAClC,wCAAwC;AACxC;AACA,uCAAuC;AACvC,2CAA2C;AAC3C;AACA,QAAQ,8EAA8E;AACtF;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mGAAa;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA,0FAA0F,uBAAuB;AACjH;AACA;AACA;AACA;AACA,eAAe,kDAAkD;AACjE,iBAAiB,sCAAsC;AACvD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,8DAA8D;AAC7E,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,0DAA0D;AACzE,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,4DAA4D;AAC3E,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,4DAA4D;AAC3E,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,eAAe,OAAO;AACtB,iBAAiB,2CAA2C;AAC5D;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU,mGAAa;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,OAAO,UAAU,mGAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,eAAe,OAAO;AACtB,iBAAiB,sCAAsC;AACvD;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU,mGAAa;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,UAAU,mGAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,eAAe,sCAAsC;AACrD,eAAe,OAAO;AACtB,iBAAiB,sCAAsC;AACvD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,eAAe,sCAAsC;AACrD,iBAAiB,sCAAsC;AACvD;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,qDAAqD;AACjE;AACA;AACA,UAAU,+CAA+C;AACzD;AACA;AACA;AACA,UAAU,0DAA0D;AACpE,UAAU,yDAAyD;AACnE;AACA,eAAe,oEAAoE;AACnF,eAAe,8BAA8B;AAC7C,6BAA6B,+CAA+C;AAC5E,eAAe,gDAAgD;AAC/D,6BAA6B,+CAA+C;AAC5E;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,oBAAoB,2FAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2FAAa;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA4C,+CAA+C;AAC3F;AACA,eAAe,8BAA8B;AAC7C,eAAe,gDAAgD;AAC/D,iBAAiB;AACjB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,8BAA8B;AACjD;AACA,kBAAkB,2FAAa;AAC/B;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA,iDAAiD,+CAA+C;AAChG;AACA,eAAe,8BAA8B;AAC7C,eAAe,gDAAgD;AAC/D,iBAAiB;AACjB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,8BAA8B;AACjD;AACA,kBAAkB,2FAAa;AAC/B;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sCAAsC;AACrD,iBAAiB,sCAAsC;AACvD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA,kBAAkB,2FAAa;AAC/B;AACA,SAAS;AACT;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;;;;;;;;;;;;;;ACpiCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgH;AACgB;AAChB;AACZ;AACM;AACN;AACrD;AACH;AACF;AACC;AACD;AACE;AACI;AACD;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEkC;AACI;AACkC;AACA;;AAExE;AACA;AACA;AACA,8BAA8B,4CAA4C,MAAM;AAChF;AACA;AACA;AACA,IAAI,sCAAsC,MAAM,wCAAwC;AACxF;AACA;AACA;AACA;AACA;AACA,aAAa,sCAAsC;AACnD,aAAa,sCAAsC;AACnD;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,iBAAiB,0DAAQ;;AAEzB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,qBAAqB,0DAAQ,kBAAkB,0DAAQ;;AAEvD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,0CAA0C;AAClE,+DAA+D,sDAAsD;AACrH,iBAAiB,qDAAqD;AACtE,2BAA2B,4DAA4D;AACvF,kBAAkB,0CAA0C;AAC5D;AACA,yBAAyB,gDAAgD;AACzE;AACA;AACA,eAAe;AACf;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA,IAAI,+HAAY;AAChB,aAAa,+HAAY;AACzB;AACA;AACA,8BAA8B,qIAAkB,KAAK,4DAAU;AAC/D;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA,2DAA2D,aAAa;AACxE,QAAQ,WAAW;AACnB;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,uDAAuD,aAAa;AACpE,QAAQ,WAAW,2BAA2B,mDAAmD;AACjG;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,aAAa,oGAAa;AAC1B;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,iDAAiD,qDAAqD;AACtG;AACA,eAAe,sCAAsC;AACrD,iBAAiB,QAAQ,kBAAkB,qDAAqD;AAChG;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,iDAAiD,mBAAmB;AACpE;AACA,eAAe,gCAAgC;AAC/C,eAAe,QAAQ;AACvB;AACA;AACA,iBAAiB,QAAQ,kBAAkB,mBAAmB;AAC9D;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA6B,oCAAoC;AACjE;AACA,eAAe,8BAA8B;AAC7C;AACA,GAAG;AACH;AACA;AACA,gBAAgB,0DAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA,4BAA4B;AAC5B,kCAAkC;AAClC;AACA,iCAAiC;AACjC,wCAAwC;AACxC;AACA,QAAQ,8EAA8E;AACtF;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,sCAAsC,aAAa,MAAM,WAAW;AACpE;AACA,eAAe,gCAAgC;AAC/C,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,gCAAgC;AAC/C,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,mBAAmB,yBAAyB,mBAAmB;AACtG,iDAAiD,oBAAoB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gCAAgC;AAC/C,iBAAiB,wCAAwC;AACzD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA,wCAAwC,mBAAmB,YAAY,mBAAmB;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D;AAC9D;AACA;AACA,0DAA0D;AAC1D;AACA,eAAe,gCAAgC;AAC/C,iBAAiB,qCAAqC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iDAAiD,mBAAmB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kDAAkD;AAC1E;AACA;AACA;AACA;AACA;AACA,iBAAiB,wCAAwC;AACzD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,gBAAgB,0DAAQ;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,2DAA2D;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO,iDAAiD,gDAAgD;AACvH,eAAe,sCAAsC;AACrD,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,iBAAiB,4DAAU;AAC3B;;AAEA;AACA,mDAAmD,0CAA0C;AAC7F;AACA;AACA,yBAAyB,gDAAgD;AACzE,+CAA+C,gDAAgD;AAC/F,YAAY,qDAAqD;AACjE;AACA,oEAAoE,gDAAgD;AACpH;AACA;AACA;AACA,eAAe,OAAO,iDAAiD,gDAAgD;AACvH,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,0BAA0B,+HAAY;AACtC;AACA,eAAe,+HAAY;AAC3B;AACA;AACA;AACA;AACA,+BAA+B,4DAAU;AACzC,0BAA0B,6IAA0B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA,mDAAmD,sDAAsD;AACzG;AACA;AACA,yBAAyB,gDAAgD;AACzE,QAAQ,sDAAsD,OAAO,qDAAqD;AAC1H;AACA,oEAAoE,gDAAgD;AACpH;AACA;AACA,eAAe,OAAO,iDAAiD,gDAAgD;AACvH,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,0BAA0B,+HAAY;AACtC;AACA,eAAe,+HAAY;AAC3B;AACA;AACA;AACA,+BAA+B,4DAAU;AACzC;AACA;AACA;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kDAAkD;AACjE,iBAAiB,wCAAwC;AACzD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,6DAA6D;AAC5E,iBAAiB,wCAAwC;AACzD;AACA,GAAG;AACH;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA,0BAA0B,oBAAoB;AAC9C;AACA,uDAAuD,qIAAkB;AACzE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,qBAAqB,mBAAmB;AACxC;AACA,2BAA2B,mBAAmB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,0CAA0C,KAAK;AAClE;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8DAA8D;AAC7E,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0DAA0D;AACzE,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,4DAA4D;AAC3E,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,4DAA4D;AAC3E,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,gBAAgB,UAAU;AAC1B;AACA,eAAe,UAAU;AACzB,cAAc,SAAS;AACvB,cAAc,KAAK;AACnB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC,wBAAwB,YAAY;AACpC,uBAAuB,EAAE;AACzB;AACA;AACA;AACA;AACA,6BAA6B,cAAc;AAC3C,0BAA0B,MAAM;AAChC,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,KAAK;AAClC,0BAA0B,MAAM;AAChC,yBAAyB,EAAE;AAC3B;;AAEA;AACA;AACA,kBAAkB,0DAAQ;AAC1B;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C,oBAAoB;AACnE,QAAQ,mBAAmB,wDAAwD,oBAAoB;AACvG,kDAAkD,mBAAmB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,eAAe,OAAO;AACtB,eAAe,QAAQ,wCAAwC,aAAa;AAC5E;AACA,iBAAiB,wCAAwC;AACzD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,oBAAoB;AACxD,QAAQ,mBAAmB;AAC3B;AACA;AACA,eAAe,sCAAsC;AACrD,eAAe,sCAAsC;AACrD,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,wCAAwC;AACzD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,OAAO;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,eAAe,OAAO;AACtB,iBAAiB,qCAAqC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sDAAsD,qDAAqD;AAC3G;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,kDAAkD;AACpF;AACA;AACA;AACA,eAAe,oCAAoC;AACnD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,sBAAsB,0DAAQ,wBAAwB,0DAAQ;AAC9D;;AAEA;AACA,iDAAiD,+CAA+C;AAChG;AACA;AACA,eAAe,8BAA8B;AAC7C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,8CAA8C,0DAAQ;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wCAAwC;AACvD,iBAAiB,gCAAgC;AACjD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,YAAY,oFAAoF;AAChG;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC,MAAM;AACxC;AACA,2BAA2B,0DAAQ;AACnC,WAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA,uBAAuB,0DAAQ;AAC/B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,sCAAsC;AACrD,iBAAiB,oCAAoC;AACrD;AACA,GAAG;AACH;AACA;AACA,sBAAsB,0DAAQ,4BAA4B,0DAAQ;AAClE;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;;AC7iCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AACjD;AACF;AACG;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEgC;;AAEhC;AACA,YAAY,0CAA0C;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,sCAAsC;AACnD,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,iBAAiB,4CAA4C;AAC7D;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,+DAA+D,4CAA4C;AAC3G;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA,MAAM,qDAAqD;AAC3D;AACA,sBAAsB,yCAAyC;AAC/D;AACA;AACA,YAAY;AACZ;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC;AACxC,oCAAoC;AACpC,iCAAiC;AACjC,8CAA8C;AAC9C,0CAA0C;AAC1C,uCAAuC;AACvC;AACA,yCAAyC;AACzC,6CAA6C;AAC7C;AACA;AACA,QAAQ,oDAAoD;AAC5D;AACA,kCAAkC;AAClC,iDAAiD;AACjD,2BAA2B;AAC3B;AACA,QAAQ,8EAA8E;AACtF;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,2CAA2C,gIAAa;AACxD,OAAO;AACP,gEAAgE,gIAAa;AAC7E;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,wDAAO;;;;;;;;;;;;;;ACxHT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgH;AACZ;AACY;AACR;AACwB;AACtB;AACN;AACpG,2BAA2B,+HAAY;AACvC,0BAA0B,+HAAY;AACS;AACH;AACA;AACF;AACI;AACJ;AACD;AACC;AACE;AACC;AACO;AACL;AACE;AACL;AACG;AACJ;AACK;AACb;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACI;AACD;AACA;AACG;AACO;AACA;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwE;AACI;AACxB;AACxB;AACM;AACF;AACN;AACY;;AAEtC;AACA;AACA;AACA;AACA;AACA,2CAA2C,mEAAmE;AAC9G;AACA;AACA;AACA,MAAM,oEAAoE;AAC1E,IAAI,sGAAsG;AAC1G,MAAM,4DAA4D;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,aAAa,OAAO;AACpB,aAAa,gDAAgD;AAC7D;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,6BAA6B;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA,SAAS;AACT;AACA,2DAA2D;AAC3D;AACA;;AAEA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,gDAAgD;AAC/D;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2BAA2B;AACvC;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA,SAAS;AACT;AACA,6DAA6D;AAC7D;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,kFAAkF;AACjG,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C;AAC3C,+DAA+D;AAC/D,qCAAqC;AACrC;AACA,eAAe,kFAAkF;AACjG;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,sDAAsD;AACzE;AACA,sCAAsC;AACtC,kCAAkC;AAClC;AACA;AACA,2CAA2C;AAC3C;AACA,eAAe,kFAAkF;AACjG;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA2B,sDAAsD;AACjF;AACA;AACA,sCAAsC;AACtC,kCAAkC;AAClC,0DAA0D;AAC1D,kCAAkC;AAClC;AACA,eAAe,kFAAkF;AACjG;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,sDAAsD;AACnF;AACA,uCAAuC;AACvC,mCAAmC;AACnC;AACA;AACA,wCAAwC;AACxC;AACA,eAAe,kFAAkF;AACjG;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,sDAAsD;AACnF;AACA,uCAAuC;AACvC,uCAAuC;AACvC;AACA;AACA,gCAAgC;AAChC;AACA,eAAe,kFAAkF;AACjG;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iEAAiE;AACjE;AACA;AACA;AACA,SAAS;AACT,iEAAiE;AACjE;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA,eAAe,mDAAmD;AAClE,eAAe,qCAAqC;AACpD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,SAAS;AACT,kDAAkD;AAClD;AACA;AACA,eAAe,mDAAmD;AAClE,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,sCAAsC,8BAA8B;AACjG;AACA,qDAAqD;AACrD;AACA;AACA,8DAA8D,4CAA4C;AAC1G;AACA;AACA,eAAe,0EAA0E;AACzF;AACA,eAAe,oCAAoC;AACnD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,2CAA2C,0DAAQ;AACnD;AACA;AACA,oCAAoC,yDAAO;AAC3C;AACA;AACA;AACA;AACA;AACA,oBAAoB,4FAAa;AACjC;AACA,mCAAmC,yDAAO;AAC1C;AACA;AACA;AACA;AACA;AACA,oBAAoB,4FAAa;AACjC;AACA;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,6CAA6C,kBAAkB;AAC/D;AACA;AACA,wCAAwC,sDAAsD;AAC9F;AACA;AACA,iDAAiD,wBAAwB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,GAAG,mBAAmB;AAC/B;AACA,eAAe,SAAS;AACxB,QAAQ,+CAA+C;AACvD,QAAQ,8DAA8D;AACtE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,oBAAoB,iIAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA,6CAA6C,sBAAsB;AACnE;AACA;AACA,wCAAwC,sDAAsD;AAC9F;AACA;AACA;AACA,iDAAiD,4BAA4B;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,GAAG,mBAAmB;AAC/B;AACA,eAAe,SAAS;AACxB,QAAQ,+CAA+C;AACvD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,oBAAoB,iIAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA;AACA,QAAQ,iGAAiG;AACzG;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,QAAQ,gFAAgF;AACxF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB;AAClB;AACA,eAAe,OAAO;AACtB,eAAe,+CAA+C;AAC9D;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,wEAAwE,yDAAyD;AACjI;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,8DAA8D;AACzF;AACA;AACA,eAAe;AACf,6EAA6E;AAC7E;AACA,iBAAiB,oCAAoC;AACrD;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,gDAAgD,0DAAQ;AACxD;AACA,OAAO;AACP,2DAA2D,uDAAK;;AAEhE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gGAAgG;AAC/G;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,gCAAgC,qIAAkB,qCAAqC,sDAAI;;AAE3F;AACA;AACA,OAAO;AACP;;AAEA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA,6BAA6B,6IAA0B;AACvD;AACA;AACA,kCAAkC,iCAAiC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,wCAAwC;AACvD,eAAe,OAAO;AACtB,iBAAiB,2CAA2C;AAC5D;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB;AACA,aAAa,+HAAY;AACzB;AACA;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qIAAkB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA,wDAAwD,4CAA4C;AACpG;AACA;AACA;AACA;AACA,YAAY,+CAA+C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,eAAe,4BAA4B;AAC3C,iBAAiB,qCAAqC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAK;AACxB;AACA;AACA;AACA,6BAA6B,4DAAU;AACvC;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,4DAAU;AACtC;AACA,SAAS;AACT;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA,mBAAmB,uDAAK;AACxB;AACA;AACA,uBAAuB,uDAAK;AAC5B;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,8DAA8D;AACjF,QAAQ,gEAAgE;AACxE;AACA,gBAAgB,sCAAsC;AACtD,gBAAgB,qCAAqC;AACrD,iBAAiB,yCAAyC;AAC1D;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,yCAAyC;AACxD,eAAe,kCAAkC;AACjD;AACA,GAAG;AACH;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,uDAAK;AACnC;AACA,6BAA6B,6IAA0B;AACvD;AACA;AACA,kCAAkC,iCAAiC;AACnE;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,mDAAmD;AAClE,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,8CAA8C,wBAAwB;AACtE;AACA;AACA;AACA,gDAAgD,0BAA0B;AAC1E;AACA;AACA;AACA,gDAAgD,0BAA0B;AAC1E;AACA;AACA;AACA,gDAAgD,0BAA0B;AAC1E;AACA;AACA;AACA;AACA,gDAAgD,0BAA0B;AAC1E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,wDAAwD;AACvE,eAAe,yCAAyC;AACxD,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sCAAsC,6BAA6B;AACnE;AACA;AACA,eAAe,gCAAgC;AAC/C,eAAe,OAAO;AACtB,iBAAiB,2CAA2C;AAC5D;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB;AACA,aAAa,+HAAY;AACzB;AACA;AACA;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,qIAAkB,8BAA8B,uDAAK;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAK;AAC5B;AACA,oBAAoB,0DAAQ;AAC5B;AACA,kBAAkB,0DAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAK;AAC5B;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH,CAAC;AAC4B;AAC7B,0FAAG,SAAS,8FAAe;;AAE3B;AACA,yBAAyB,kBAAkB;AAC3C;AACA,IAAI,sDAAsD;AAC1D;AACA,kBAAkB,qBAAqB;AACvC;AACA;AACA;AACA,QAAQ,kBAAkB;AAC1B,IAAI,sEAAsE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG,mBAAmB;AAC3B;AACA;AACA;AACA,oBAAoB,+CAA+C;AACnE,IAAI,8DAA8D;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG,mBAAmB;AAC3B;AACA;AACA,wBAAwB,sDAAsD;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG,mBAAmB;AAC3B;AACA;AACA,WAAW,MAAM;AACjB;;AAEA;AACA,yBAAyB,sBAAsB;AAC/C;AACA,IAAI,sDAAsD;AAC1D;AACA,kBAAkB,yBAAyB;AAC3C;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B,IAAI,sEAAsE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG,mBAAmB;AAC3B;AACA;AACA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG,mBAAmB;AAC3B;AACA;AACA,gCAAgC,sDAAsD;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG,mBAAmB;AAC3B;AACA;AACA,WAAW,MAAM;AACjB;;AAEA;AACA,sBAAsB,+CAA+C;AACrE;AACA;AACA;AACA,sBAAsB;AACtB,8BAA8B;AAC9B,6BAA6B;AAC7B,yBAAyB;AACzB,gCAAgC;AAChC,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,uBAAuB;AACvB;AACA,IAAI,4DAA4D;AAChE,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,yCAAyC,yDAAyD;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;;AAEA;AACA,4BAA4B,sDAAsD;AAClF,uBAAuB,+CAA+C;AACtE,+BAA+B;AAC/B,QAAQ,+CAA+C;AACvD,IAAI,sDAAsD;AAC1D;AACA,QAAQ,sDAAsD;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4EAA4E;AACpH;AACA;AACA;AACA,6BAA6B,6EAA6E;AAC1G,IAAI,qFAAqF;AACzF;AACA,WAAW,yEAAyE;AACpF,IAAI,iFAAiF;AACrF,wCAAwC,yDAAyD;AACjG;AACO;AACP;AACA;AACA;AACA,aAAa,mDAAmD;AAChE;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA,yDAAyD;AACzD;AACA,iBAAiB,oCAAoC;AACrD;AACA;AACA,eAAe,iFAAiF;AAChG;AACA,iBAAiB,yCAAyC;AAC1D;AACA,GAAG;AACH;AACA;AACA;AACA,6BAA6B,qIAAkB,eAAe,qIAAkB;AAChF;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB,aAAa,+HAAY;AACzB;AACA;AACA,+BAA+B,qIAAkB;AACjD;AACA,aAAa;AACb;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,0CAA0C;AAC1C,gCAAgC;AAChC,oCAAoC;AACpC;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAED;AACA,wBAAwB,8DAA8D;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iFAAiF;AAC1G,uEAAuE,oCAAoC;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,uDAAuD;AACvD;;AAEA;AACA,mBAAmB,8DAA8D;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,oCAAoC;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,oDAAoD;AACpD,+DAA+D;AAC/D,KAAK;AACL;AACA,aAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,QAAQ,iGAAiG;AACzG;AACA,aAAa,OAAO;AACpB,cAAc,QAAQ;AACtB;AACA,cAAc,QAAQ;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;;AAEA;AACA;AACA;AACA;AACA,0GAA0G,qIAAkB;AAC5H;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA;AACA;AACA;AACA,oHAAoH,qIAAkB;AACtI;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6IAA0B;AAC9C;AACA;AACA,yBAAyB,mCAAmC;AAC5D;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,0BAA0B,6IAA0B;AACpD;AACA;AACA,+BAA+B,mCAAmC;AAClE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6IAA0B;AAC9C;AACA;AACA,yBAAyB,mCAAmC;AAC5D;AACA;AACA;AACA,OAAO;AACP,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,mCAAmC;AAChE;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,oBAAoB,6IAA0B;AAC9C;AACA;AACA,yBAAyB,mCAAmC;AAC5D;AACA;AACA;AACA,OAAO;AACP;AACA,2FAA2F,qIAAkB;AAC7G;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,oBAAoB,6IAA0B;AAC9C;AACA;AACA,yBAAyB,mCAAmC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,qCAAqC,+HAAY;AACjD,eAAe,+HAAY;AAC3B;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,qCAAqC,+HAAY;AACjD,eAAe,+HAAY;AAC3B;AACA;AACA,iCAAiC,qIAAkB;AACnD;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,2CAA2C;AACtD,WAAW,2CAA2C;AACtD,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,WAAW,wCAAwC;AACnD,aAAa,2CAA2C;AACxD;AACA;AACA,SAAS,+HAAY;AACrB;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qIAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,oBAAoB,6IAA0B;AAC9C;AACA;AACA,yBAAyB,mCAAmC;AAC5D;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,C;;;;;;;;;;;;;ACn5DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoG;AAC4B;AACtB;AACN;AAC1D;AACA;AACA;AACU;AACN;AACD;AACI;AACJ;AACV;AACa;AACD;AACF;AACL;AACiB;AACA;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEkC;AACF;AACN;AACE;AAC0C;AACE;AACpB;AACc;;AAElE;AACA,0BAA0B,6CAA6C;AACvE,IAAI,4DAA4D,MAAM;AACtE,eAAe,6EAA6E;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,kDAAkD;AACtF;AACA;AACA;AACA,gCAAgC,yCAAyC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,iBAAiB;AACzE;AACA,aAAa,yCAAyC;AACtD,aAAa,wCAAwC;AACrD,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,aAAa;AAC9B;AACA;AACA,kCAAkC,kDAAkD;AACpF,MAAM,8CAA8C;AACpD,gFAAgF,uBAAuB;AACvG;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,aAAa,2BAA2B,cAAc;AAChG;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,gGAAgG;AAC/G;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB;AACA,aAAa,+HAAY;AACzB;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,qCAAqC,kDAAkD;AACvF,QAAQ,+DAA+D;AACvE;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,yBAAyB,uDAAK;AAC9B;;AAEA;AACA;AACA,oCAAoC,8CAA8C;AAClF,QAAQ,6DAA6D;AACrE;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,wBAAwB,uDAAK;AAC7B;;AAEA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,0DAA0D;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,kDAAkD;AACpF;AACA;AACA;AACA;AACA,8BAA8B,yCAAyC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,iBAAiB;AAC3E;AACA,eAAe,yCAAyC;AACxD,eAAe,wCAAwC;AACvD,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO,gCAAgC,uDAAK;AAC5C;AACA,OAAO,gCAAgC,0DAAQ;AAC/C,6BAA6B,uDAAK;AAClC,OAAO,gCAAgC,sDAAI;AAC3C;AACA;AACA;AACA,kBAAkB,uDAAK;AACvB,SAAS;AACT,kBAAkB,uDAAK;AACvB,SAAS;AACT,sBAAsB,uDAAK,CAAC,0DAAQ;AACpC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oBAAoB,4FAAa;AACjC;AACA;AACA,OAAO,UAAU,iGAAU;AAC3B;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,gBAAgB,8CAA8C;AAC9D,mBAAmB,oCAAoC;AACvD;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;;AAEA;AACA;AACA,gEAAgE,qDAAqD;AACrH,QAAQ,oDAAoD;AAC5D;AACA;AACA;AACA,eAAe,2CAA2C;AAC1D,eAAe,QAAQ;AACvB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,uDAAK;AACvC;AACA,0EAA0E,sCAAsC;AAChH;AACA,mBAAmB,sCAAsC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4FAAa;AACjC;AACA;AACA;AACA,SAAS;AACT,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,cAAc,oDAAoD;AAClE;AACA;AACA,QAAQ,mFAAmF;AAC3F;AACA;AACA,eAAe,oEAAoE;AACnF,eAAe,8BAA8B;AAC7C,6BAA6B,+CAA+C;AAC5E;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA,qBAAqB,0DAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAK;AACjC;AACA,OAAO;AACP,4BAA4B,uDAAK;AACjC;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+DAA+D,0BAA0B;AACzF;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,sDAAsD,0BAA0B;AAChF;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA,sCAAsC,kDAAkD;AACxF;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,yDAAO;AAC9C;;AAEA;AACA;AACA;AACA,oCAAoC;AACpC,0CAA0C;AAC1C;AACA,yCAAyC;AACzC,gCAAgC;AAChC;AACA,QAAQ,8EAA8E;AACtF;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,wDAAwD;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB;AACA,aAAa,+HAAY;AACzB;AACA;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D,oDAAoD,0DAAQ;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,sBAAsB,gEAAgE;AACtF;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,+BAA+B,0DAAQ;AACvC,6BAA6B,0DAAQ;AACrC;AACA;;AAEA;AACA,qCAAqC,4BAA4B;AACjE;AACA;AACA;AACA,eAAe,gCAAgC;AAC/C;AACA,GAAG;AACH;AACA;AACA;AACA,4BAA4B,uDAAK;AACjC;;AAEA;AACA;AACA;AACA;AACA,eAAe,gCAAgC;AAC/C;AACA,GAAG;AACH;AACA;AACA,qBAAqB,yBAAyB;AAC9C;AACA;AACA;AACA;AACA;AACA,qBAAqB,gCAAgC;AACrD,qBAAqB,gCAAgC;AACrD;AACA,oBAAoB,4FAAa;AACjC;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA,uDAAuD,2BAA2B;AAClF;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ,0BAA0B,8CAA8C;AAC/F;AACA,YAAY,8DAA8D;AAC1E,yCAAyC,+CAA+C;AACxF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ,0BAA0B,8CAA8C;AAC/F;AACA,YAAY,8DAA8D;AAC1E,0CAA0C,+CAA+C;AACzF;AACA;AACA;AACA,eAAe,eAAe;AAC9B;AACA,GAAG;AACH,CAAC;AAC+B;AAChC,0FAAG,YAAY,2FAAY;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,gCAAgC;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA4C,uDAAK;AACjD;AACA;;AAEA;AACA;AACA,WAAW,8BAA8B;AACzC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,G;;;;;;;;;;;;;ACtjCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE0B;;AAE1B;AACA,6BAA6B,yCAAyC,gBAAgB,mDAAmD;AACzI;AACA,uBAAuB,oCAAoC;AAC3D;AACA;AACA,sBAAsB,qDAAqD;AAC3E;AACA;AACA,IAAI,kEAAkE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mDAAmD;AACjE;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO,iCAAiC,+BAA+B;AACpF;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B,0BAA0B;AAC1B,gCAAgC;AAChC,gCAAgC;AAChC;AACA,+BAA+B;AAC/B,uCAAuC;AACvC;AACA,QAAQ,8EAA8E;AACtF;AACA,eAAe,OAAO;AACtB;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,uDAAuD,gIAAa;AACpE;;AAEA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA,iBAAiB,gIAAa;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,8BAA8B;AAC/C;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,8BAA8B;AAC/C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,qDAAI;;;;;;;;;;;;;;ACzIN;AAAA;AAAA;AAAA;AAA0G;AACN;AACpG;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwE;;AAExE;AACA,qCAAqC,8CAA8C;AACnF;AACA,UAAU,sDAAsD;AAChE,IAAI,6CAA6C,6CAA6C;AAC9F;AACA;AACA;AACA;AACA,sCAAsC,yCAAyC;AAC/E;AACA;AACA;AACA,QAAQ,wDAAwD;AAChE;AACA,gDAAgD,yCAAyC;AACzF;AACA;AACA;AACA,QAAQ,yDAAyD;AACjE;AACA;AACA;AACA,6EAA6E;AAC7E,YAAY;AACZ;AACA,yCAAyC,kEAAkE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,8BAA8B;AAC3C,aAAa,OAAO,yBAAyB,iEAAiE;AAC9G;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2FAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2FAAa;AAC7B;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,kBAAkB,iEAAiE;AACnF;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,sFAAsF;AACtF;AACA;AACA,wEAAwE;AACxE,SAAS,wEAAwE;AACjF;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,QAAQ,qDAAqD;AAC7D,qCAAqC,6EAA6E;AAClH;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC;AACpC,0CAA0C;AAC1C;AACA,yCAAyC;AACzC,gCAAgC;AAChC;AACA,QAAQ,8EAA8E;AACtF;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA,iBAAiB,MAAM;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;;AC3SD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACrD;AACL;AACM;AACD;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE0B;AACU;AACJ;AACE;AACsC;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO,YAAY;AAChC,aAAa,qBAAqB;AAClC,aAAa,gCAAgC;AAC7C,aAAa,sCAAsC;AACnD,aAAa,QAAQ;AACrB,gDAAgD,8CAA8C;AAC9F,MAAM,8CAA8C;AACpD,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;AACA,WAAW,0CAA0C;AACrD;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4FAAa;AAC7B;AACA;AACA;AACA,gBAAgB,4FAAa;AAC7B;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;;AAEA;AACA;AACA;AACA;AACA,wCAAwC,aAAa;AACrD;AACA;AACA;AACA;AACA,gBAAgB,gCAAgC;AAChD;AACA;;AAEA;AACA;AACA,QAAQ,kEAAkE;AAC1E,WAAW,iBAAiB;AAC5B;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD;AACA;AACA;AACA,KAAK;AACL,sBAAsB,0DAAQ;AAC9B;;AAEA;AACA;;AAEA;AACA;AACA,wBAAwB,8CAA8C;AACtE;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA,kFAAkF,0CAA0C;AAC5H;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,oCAAoC;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,oCAAoC;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA,cAAc,gBAAgB,SAAS,iBAAiB;AACxD;AACA;AACA;AACA,sDAAsD;AACtD,mCAAmC;AACnC,oCAAoC;AACpC;AACA,eAAe,SAAS,+BAA+B,qDAAqD;AAC5G;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,+CAA+C;AAChE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,iDAAiD,gBAAgB;AACjE;AACA;AACA,iBAAiB;AACjB,iBAAiB,QAAQ;AACzB,iBAAiB,+CAA+C;AAChE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wDAAO;AACjC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,OAAO,0BAA0B,qDAAI;AACrC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0DAAS;AAChC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA,kDAAkD,gBAAgB;AAClE;AACA;AACA,iBAAiB;AACjB,iBAAiB,QAAQ;AACzB,iBAAiB,+CAA+C;AAChE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,wDAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO,0BAA0B,qDAAI;AACrC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0DAAS;AAChC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA6B,gDAAgD;AAC7E;AACA;AACA,gCAAgC,4DAA4D;AAC5F;AACA,aAAa,+CAA+C;AAC5D;;AAEA;AACA,uBAAuB,gDAAgD;AACvE;AACA,aAAa,OAAO;AACpB,cAAc,mDAAmD;AACjE,cAAc,8BAA8B,6CAA6C,gDAAgD;AACzI,cAAc,sCAAsC;AACpD;AACA;AACA;AACA;AACA,cAAc,sCAAsC;AACpD;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA,aAAa,qBAAqB;AAClC,G;;;;;;;;;;;;;AC/YA;AAAA;AAAA;AAAA;AAAA;AAAgI;AAChI;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2C;AACd;AACwB;;AAErD;AACA;AACA;AACA,kBAAkB,oDAAoD;AACtE;AACA,qBAAqB;AACrB;AACA;AACA,WAAW,gCAAgC;AAC3C;AACA,WAAW,gGAAgG;AAC3G;AACA,WAAW,gCAAgC;AAC3C,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,wDAAwD,MAAM;AACxE;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,6DAAY;;AAE7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW,wBAAwB,yBAAyB;AAC5E;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,qCAAqC;AAChE;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;;AAEA;AACA,8BAA8B;AAC9B;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,qCAAqC;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA,yBAAyB,sDAAK;AAC9B,kBAAkB,6IAA0B;AAC5C;AACA;AACA,uBAAuB,+BAA+B;AACtD;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2BAA2B,kEAAiB;AAC5C;AACA,GAAG;AACH;AACA;AACA,C;;;;;;;;;;;;;ACpPA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACpF;AACF;AACD;AACC;AACU;AACL;AACE;AACL;AACI;AACD;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gCAAgC;AAC3C;AACA,WAAW,gGAAgG;AAC3G;AACA,aAAa;AACb;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,oBAAoB,6IAA0B;AAC9C;AACA,OAAO;AACP;AACA;AACA,yBAAyB,+BAA+B;AACxD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,C;;;;;;;;;;;;;AC7JA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AAC1D;AACA;AACM;AACL;AACR;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACH;AACa;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEmC;AACQ;AACV;AACJ;AACwB;AAChB;AACmC;;AAExE;AACA;AACA;AACA;AACA,sBAAsB,8CAA8C;AACpE;AACA;AACA;AACA;AACA,kBAAkB,oDAAoD;AACtE,gFAAgF;AAChF;AACA;AACA,WAAW,gCAAgC;AAC3C;AACA,WAAW,oFAAoF;AAC/F,WAAW,yCAAyC;AACpD;AACA,WAAW,wCAAwC;AACnD,aAAa,gCAAgC;AAC7C;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA,KAAK,gCAAgC,2DAAS,0BAA0B,mEAAiB;AACzF;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,+BAA+B,mEAAiB;AAChD;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAI;AACpB;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,kCAAkC;AAClD;AACA;AACA;;AAEA;AACA,6CAA6C,yEAAyE;AACtH;AACA;AACA,gBAAgB,mDAAmD;AACnE;AACA;;AAEA;AACA,uCAAuC,yEAAyE;AAChH;AACA;AACA,gBAAgB,mDAAmD;AACnE;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,yCAAyC;AACtD,aAAa,OAAO;AACpB;AACA;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA,qBAAqB,kBAAkB;AACvC;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,eAAe,uDAAK;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,iBAAiB,uDAAK;AACtB;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,oCAAoC;AACnD,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,8BAA8B;AAC7C,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,8BAA8B;AAC7C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,8BAA8B;AACjD,mBAAmB,sCAAsC;AACzD;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA,SAAS;AACT;AACA,oBAAoB,8DAAY;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAY;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8DAAY;AACxC;AACA;;AAEA;AACA;AACA,eAAe,8BAA8B;AAC7C,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA,4BAA4B,yDAAO;AACnC;AACA;AACA;AACA;AACA,yBAAyB,8DAAY;AACrC;AACA,0BAA0B,8DAAY;AACtC;AACA;AACA,2BAA2B,8DAAY;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,8DAAY;AAC5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4FAAa;AACjC;;AAEA;AACA;AACA,wBAAwB,0DAAQ;;AAEhC;AACA;AACA,4BAA4B,8DAAY;;AAExC;AACA;AACA;AACA,8BAA8B,8DAAY;AAC1C;AACA;;AAEA;AACA;AACA;AACA,gCAAgC,8DAAY;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,2DAA2D,yDAAO;AAClE;;AAEA;AACA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,sDAAsD,yDAAO;AAC7D;;AAEA;AACA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,8BAA8B;AAC7C,iBAAiB,QAAQ;AACzB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C,eAAe,oCAAoC;AACnD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,G;;;;;;;;;;;;;ACzmBD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+C;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEmC;AACI;AACV;AACyE;AACjD;AACrD,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sDAAsD;AACxE;AACA,qBAAqB;AACrB;AACA;AACA,WAAW,gCAAgC;AAC3C;AACA,WAAW,gGAAgG;AAC3G;AACA,WAAW,OAAO;AAClB,WAAW,qBAAqB;AAChC,WAAW,+BAA+B;AAC1C;AACe;AACf;AACA;AACA;AACA;AACA;AACA,mBAAmB,2DAAU;AAC7B;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,kEAAiB;AAClD;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,mCAAmC;AAC/C,WAAW,8CAA8C;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,yDAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,0CAA0C;AACrD,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,WAAW,2GAAqB,yCAAyC,4GAAsB;AAC/F;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,0CAA0C;AACrD,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yDAAQ;AAC1B;AACA,eAAe,sDAAK;AACpB,GAAG;AACH,eAAe,sDAAK;AACpB;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,8BAA8B;AACzC,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA,C;;;;;;;;;;;;;AC5NA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtF;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE6B;AACM;;AAEnC;AACA;AACA;AACA;AACA,YAAY,wDAAwD;AACpE;AACA;AACA;AACA,8DAA8D;AAC9D;AACA,6DAA6D;AAC7D;AACA,WAAW,iEAAiE;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gCAAgC;AAC3C;AACO;AACP;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,WAAW,kCAAkC;AAC7C,WAAW,gCAAgC;AAC3C;AACA;AACA;AACA;AACA;AACA,kBAAkB,6IAA0B;AAC5C;AACA;AACA,uBAAuB,+BAA+B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAK;AAC9B;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,WAAW,gCAAgC;AAC3C,WAAW,kCAAkC;AAC7C,aAAa,qCAAqC;AAClD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,gCAAgC;AAC3C,WAAW,kCAAkC;AAC7C,aAAa,qCAAqC;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,sDAAK,gBAAgB,yDAAQ;AAC5C;AACA,aAAa,sDAAK;AAClB;;AAEA;AACA;AACA,WAAW,gCAAgC;AAC3C,WAAW,kCAAkC;AAC7C,aAAa,qCAAqC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,sDAAK;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yDAAQ;AAC5B;AACA;AACA,kBAAkB,yDAAQ;AAC1B;AACA,eAAe,sDAAK;AACpB;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,8BAA8B;AACzC,WAAW,kCAAkC;AAC7C,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,sCAAsC;AACjD,WAAW,sCAAsC;AACjD,WAAW,kCAAkC;AAC7C,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,8BAA8B;AACzC,WAAW,kCAAkC;AAC7C,aAAa;AACb;AACA;AACA,C;;;;;;;;;;;;;AC3QA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwG;AACwB;AACxB;AACE;AACN;AACtD;AACD;AACE;AACF;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEgE;AACN;AACA;AACA;AACJ;AACI;AACc;AAChB;AACA;AACN;AACxB;AACM;AACQ;AACN;AACH;AACqB;AACI;AACgB;;AAExE;AACA;AACA;AACA;AACA,wDAAwD,wDAAwD;AAChH,IAAI,sEAAsE;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,gDAAgD,wCAAwC;AACxF;AACA,IAAI,wFAAwF;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,8DAA8D;AAC5H,MAAM,4EAA4E;AAClF;AACA;AACA,aAAa,gCAAgC;AAC7C,aAAa,gCAAgC;AAC7C;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,oBAAoB,8CAA8C;AAClE;AACA;AACA,iCAAiC,aAAa;AAC9C;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,eAAe,8BAA8B;AAC7C;AACA,SAAS,+HAAY;AACrB;AACA;AACA,iBAAiB,sDAAI;AACrB;;AAEA;AACA,sBAAsB,kDAAkD;AACxE;AACA;AACA,4CAA4C,sBAAsB;AAClE;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,oCAAoC;AACrD;AACA,GAAG;AACH;AACA;AACA,iBAAiB,yDAAO;AACxB;;AAEA;AACA,sBAAsB,8EAA8E;AACpG;AACA,iBAAiB,sDAAsD;AACvE;AACA,GAAG;AACH;AACA;AACA,iBAAiB,kEAAgB;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,oDAAoD;AACnG;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4CAA4C;AACxE,QAAQ,yCAAyC,MAAM,6DAA6D;AACpH;AACA;AACA,QAAQ,4EAA4E;AACpF;AACA,eAAe,oFAAoF;AACnG;AACA,eAAe,oEAAoE;AACnF,eAAe,8BAA8B;AAC7C,8BAA8B,+CAA+C;AAC7E;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,0BAA0B,sDAAI;AAC9B;AACA;AACA,qBAAqB,0DAAQ;;AAE7B;AACA;AACA;AACA;AACA;AACA,oBAAoB,0DAAK;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,4FAAa;AACnC,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2EAAe;AACtC,0BAA0B,sDAAI;AAC9B;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,kEAAgB;AAC1C,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,+BAA+B;AAC5D,8BAA8B,iIAAc;AAC5C;AACA;AACA;AACA,oCAAoC,0DAAQ;AAC5C,4BAA4B,0DAAK;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mCAAmC,aAAa;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,oDAAoD;AACrG;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,oEAAoE;AACnF,eAAe,8BAA8B;AAC7C,6BAA6B,+CAA+C;AAC5E;AACA,GAAG;AACH;AACA;AACA,gCAAgC,kEAAgB,0BAA0B,yDAAO,0BAA0B,0DAAQ;AACnH;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4CAA4C,sBAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,oDAAoD;AACnG;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,oEAAoE;AACnF,eAAe,8BAA8B;AAC7C,6BAA6B,+CAA+C;AAC5E;AACA,GAAG;AACH;AACA;AACA,gCAAgC,kEAAgB,0BAA0B,yDAAO,0BAA0B,0DAAQ;AACnH;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4CAA4C;AACxE,QAAQ,yCAAyC,MAAM,6DAA6D;AACpH;AACA,eAAe;AACf;AACA,eAAe,0FAA0F;AACzG;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mCAAmC,aAAa;AAChD;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,0FAA0F;AACzG;AACA,GAAG;AACH;AACA;AACA,gCAAgC,kEAAgB,0BAA0B,yDAAO;AACjF;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4CAA4C,sBAAsB;AAClE;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,0FAA0F;AACzG;AACA,GAAG;AACH;AACA;AACA,gCAAgC,kEAAgB,0BAA0B,yDAAO;AACjF;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,wDAAwD;AACxD,gBAAgB,4CAA4C;AAC5D;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,eAAe,8DAA8D;AAC7E;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,iCAAiC,0DAAK;AACtC;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,uCAAuC;AACvC,gBAAgB,4CAA4C;AAC5D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,eAAe,OAAO;AACtB,eAAe,8DAA8D;AAC7E;AACA;AACA,GAAG;AACH;AACA;AACA,uBAAuB,6IAA0B,CAAC,4FAAK;AACvD;AACA;AACA,4BAA4B,iCAAiC;AAC7D,6BAA6B,iIAAc;AAC3C;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,mDAAmD;AACnD,kBAAkB,4CAA4C;AAC9D;AACA,eAAe,OAAO;AACtB,eAAe,8DAA8D;AAC7E;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,iCAAiC,0DAAK;AACtC;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,8DAA8D;AAC7E;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA,mCAAmC,0DAAK;AACxC;AACA,OAAO;AACP,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,oDAAoD;AACnG;AACA;AACA,kDAAkD,kEAAkE;AACpH;AACA,QAAQ,+CAA+C;AACvD;AACA,eAAe,gCAAgC;AAC/C,eAAe,oEAAoE;AACnF,eAAe,8BAA8B;AAC7C,8BAA8B,+CAA+C;AAC7E;AACA,GAAG;AACH;AACA;AACA;AACA,6BAA6B,0DAAK;AAClC;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA,qBAAqB,0DAAQ;;AAE7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAsD;AAClE;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA,0BAA0B,yEAAa;AACvC;AACA;AACA;;AAEA;AACA,4BAA4B,yCAAyC,KAAK,4CAA4C;AACtH;AACA,eAAe,8DAA8D;AAC7E;AACA,GAAG;AACH;AACA;AACA;AACA,iDAAiD,0DAAK,iBAAiB,0DAAK;AAC5E;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,yDAAO;AACzC;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA,iCAAiC,yDAAO;AACxC;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,qBAAqB,8FAA8F;AACnH;AACA,eAAe,0FAA0F;AACzG,eAAe,eAAe,0BAA0B,iDAAiD;AACzG,eAAe,gDAAgD;AAC/D,YAAY,sDAAsD;AAClE,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,kFAAkF;AACvG;AACA,eAAe,oEAAoE;AACnF,eAAe,8BAA8B;AAC7C,6BAA6B,+CAA+C;AAC5E,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,wFAAwF;AAC7G;AACA,eAAe,8BAA8B;AAC7C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,0FAA0F;AAC/G;AACA,eAAe,8BAA8B;AAC7C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,wEAAwE;AAC7F;AACA,eAAe,sCAAsC;AACrD,eAAe,sCAAsC;AACrD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,4EAA4E;AACjG;AACA,eAAe,oCAAoC;AACnD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,4EAA4E;AACjG;AACA,eAAe,oCAAoC;AACnD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,gFAAgF;AACrG;AACA,eAAe,yCAAyC;AACxD,eAAe,wCAAwC;AACvD,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,gBAAgB,0DAAK,uBAAuB,0DAAQ;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD;AACA,GAAG;AACH;AACA;AACA,2BAA2B,0DAAQ;AACnC,2BAA2B,0DAAQ;AACnC;AACA,kCAAkC,0DAAQ;AAC1C;AACA,sBAAsB,0EAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA,+BAA+B,yDAAO;AACtC;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA,gCAAgC,2EAAe,CAAC,0DAAQ;AACxD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,eAAe,8BAA8B;AAC7C,iBAAiB,OAAO;AACxB,iBAAiB,sCAAsC;AACvD,iBAAiB,gCAAgC;AACjD;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,kBAAkB,4FAAa;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,0EAAc;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,mBAAmB,0DAAK,CAAC,0DAAQ,sCAAsC,0DAAQ;AAC/E;AACA;;AAEA;AACA;AACA;AACA,8DAA8D,4DAA4D;AAC1H;AACA;AACA,eAAe,gCAAgC;AAC/C,eAAe,2CAA2C;AAC1D;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA,+CAA+C,yDAAO,yBAAyB,yDAAO;AACtF;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;;AAEA;AACA,6BAA6B,0DAAK;AAClC,8BAA8B,0DAAQ;AACtC;;AAEA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA,gBAAgB,0DAAK;AACrB;AACA;;AAEA;AACA,eAAe,yDAAyD;AACxE;AACA;AACA;AACA;AACA;AACA,QAAQ,2EAA2E;AACnF;AACA;AACA;AACA;AACA,QAAQ,+EAA+E;AACvF,wCAAwC,4EAA4E;AACpH,yCAAyC,kEAAkE;AAC3G;AACA;AACA;AACA,gCAAgC,+BAA+B;AAC/D;AACA;AACA;AACA,gCAAgC,8BAA8B;AAC9D;AACA;AACA;AACA,gCAAgC,kDAAkD;AAClF;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,YAAY,yEAAyE;AACrF,eAAe,gCAAgC;AAC/C,eAAe,QAAQ;AACvB,iBAAiB,4CAA4C;AAC7D;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,yDAAyD;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sDAAsD;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,2EAA2E;AACnF;AACA;AACA;AACA;AACA,YAAY,+EAA+E;AAC3F,wCAAwC,4EAA4E;AACpH,yCAAyC,kEAAkE;AAC3G;AACA;AACA;AACA,mCAAmC,QAAQ;AAC3C;AACA;AACA;AACA,+BAA+B,8BAA8B;AAC7D,mCAAmC,8BAA8B;AACjE;AACA;AACA;AACA,+BAA+B,uBAAuB;AACtD;AACA;AACA;AACA,mCAAmC,qBAAqB;AACxD;AACA;AACA,eAAe,mDAAmD;AAClE,eAAe,OAAO;AACtB;AACA,eAAe,gCAAgC;AAC/C,eAAe,QAAQ;AACvB,YAAY,yEAAyE;AACrF,eAAe,QAAQ;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,sBAAsB,yDAAyD;AAC/E;AACA;AACA;AACA,eAAe,mDAAmD;AAClE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,0DAA0D;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,kDAAkD;AACpF;AACA;AACA;AACA;AACA,8BAA8B,yCAAyC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,iBAAiB;AACtD;AACA;AACA;AACA,eAAe,yCAAyC;AACxD,eAAe,wCAAwC;AACvD,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,oEAAoE;AAClF;AACA;AACA,QAAQ,oDAAoD;AAC5D;AACA,eAAe,oEAAoE;AACnF,eAAe,8BAA8B;AAC7C,6BAA6B,+CAA+C;AAC5E;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,4BAA4B;AACnE;AACA;AACA;AACA;AACA;AACA,eAAe,2BAA2B;AAC1C;AACA,eAAe,EAAE;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,yBAAyB,6IAA0B,CAAC,4FAAK;AACzD;AACA;AACA,8BAA8B,iCAAiC;AAC/D,+BAA+B,iIAAc;AAC7C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,uCAAuC;AACxD;AACA;AACA,QAAQ,uCAAuC;AAC/C;AACA;AACA,eAAe,OAAO,gCAAgC,uCAAuC;AAC7F;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,mEAAiB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,mEAAiB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,2CAA2C,wDAAwD;AACnG,UAAU,sEAAsE;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,eAAe;AAC9B,eAAe,sEAAsE;AACrF;AACA;AACA,GAAG;AACH;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH,CAAC,GAAG;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,kCAAkC;AAC7C,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,WAAW,gCAAgC;AACd;AAC7B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,mBAAmB,6IAA0B;AAC7C;AACA,KAAK;AACL;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,0BAA0B,0DAAQ;AAClC;AACA;AACA;AACA,oBAAoB,0DAAK;AACzB;AACA,wBAAwB,6EAAkB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,kCAAkC;AAC7C,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,WAAW,8BAA8B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,kFAAsB;AAC5C,KAAK;AACL,kBAAkB,0DAAK,CAAC,0DAAQ;AAChC;AACA,sBAAsB,6EAAkB;AACxC;AACA;AACA;AACA;AACA;;AAEA,4CAA4C,kEAAkE;AAC9G;AACA;AACA,WAAW,kCAAkC;AAC7C,WAAW,OAAO;AAClB,WAAW,gCAAgC;AAC3C,WAAW,gCAAgC;AAC3C,WAAW,QAAQ;AACnB;AACA;AACA;AACA,sBAAsB,2EAAe;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,sCAAsC;AACjD,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,WAAW,gCAAgC;AAC3C;AACA;AACA;AACA;AACA,gCAAgC,0DAAQ;AACxC,oBAAoB,yEAAa;AACjC,GAAG;AACH,oBAAoB,2EAAe;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,6DAAW,qBAAqB,6DAAW;AAClE;AACA;AACA;AACA,C;;;;;;;;;;;;;AChnDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACpG;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEkE;AACA;;AAElE;AACA,qFAAqF;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA,2BAA2B,YAAY;AACvC;AACA,WAAW,OAAO;AAClB,WAAW,6BAA6B;AACxC,WAAW,gCAAgC;AAC3C,WAAW,sCAAsC;AACjD;AACA,WAAW,OAAO;AAClB,WAAW,2BAA2B,qBAAqB,8CAA8C;AACzG;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,4CAA4C,uFAAQ;AACpD,2CAA2C,uFAAQ;;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,cAAc,wFAAU;AACxB,GAAG;AACH;;AAEA;AACA,yCAAyC,sDAAsD;AAC/F,mEAAmE;AACnE,yCAAyC,mCAAmC;AAC5E;AACA;AACA;AACO;AACP;AACA;AACA;AACA,aAAa,gCAAgC;AAC7C,aAAa,sCAAsC;AACnD;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA,QAAQ,iEAAiE;AACzE;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA,QAAQ,iEAAiE;AACzE;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,gEAAgE,mCAAmC;AACnG;AACA,aAAa,sCAAsC;AACnD,aAAa,sDAAsD;AACnE,eAAe,QAAQ;AACvB;AACA,SAAS,+HAAY;AACrB;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mEAAmE,mCAAmC;AACtG;AACA,eAAe,sCAAsC;AACrD,eAAe,sDAAsD;AACrE,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+EAA+E;AAC/E;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yDAAyD;AACzD,8CAA8C;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8CAA8C;AAC9C,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+CAA+C;AAC/C,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sDAAsD,iBAAiB;AACvE;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,8CAA8C,UAAU,iBAAiB;AACjG;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,wCAAwC;AACxC,0DAA0D,oBAAoB;AAC9E;AACA,wBAAwB,iEAAiE;AACzF;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,uCAAuC,qDAAqD;AAC5F;AACA,wBAAwB,gEAAgE;AACxF;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC,QAAQ,qDAAqD;AAC7D;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA,YAAY,qDAAqD;AACjE;AACA;AACA,eAAe,sCAAsC;AACrD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,QAAQ,iEAAiE;AACzE;AACA,YAAY,wCAAwC;AACpD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAED,WAAW,sCAAsC;AACjD,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA,WAAW,sCAAsC;AACjD,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAW,sCAAsC;AACjD,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAW,sCAAsC;AACjD,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAW,sCAAsC;AACjD,WAAW,OAAO;AAClB;AACA;AACA,C;;;;;;;;;;;;;ACvmBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAClD;AACF;AACG;AACO;AACL;AACC;AACL;AACR;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACD;AACW;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEgC;AACwC;;AAExE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA8B,6EAA6E;AAC3G,IAAI,iEAAiE;AACrE;AACA;AACA,IAAI,wHAAwH;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA,sBAAsB,uCAAuC;AAC7D;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;;AAEA;AACA,wEAAwE,uDAAuD;AAC/H;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,kDAAkD,mDAAmD;AACrG;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,4DAA4D;AAC5D;AACA;AACA,oCAAoC,uDAAuD;AAC3F;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA,sEAAsE,uDAAuD;AAC7H;AACA;AACA,YAAY;AACZ;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA,kDAAkD,mDAAmD;AACrG;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,8EAA8E;AAClG,aAAa,iEAAiE;AAC9E;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,iBAAiB,2DAA2D;AAC5E;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAkD;AAClD,yCAAyC;AACzC,sCAAsC;AACtC,uDAAuD;AACvD,8CAA8C;AAC9C,2CAA2C;AAC3C;AACA,+CAA+C;AAC/C,kDAAkD;AAClD;AACA;AACA,QAAQ,qEAAqE;AAC7E;AACA,mCAAmC;AACnC,uDAAuD;AACvD,uBAAuB;AACvB;AACA,QAAQ,4EAA4E;AACpF;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,gDAAgD,gIAAa;AAC7D,OAAO;AACP,qEAAqE,gIAAa;AAClF;AACA;;AAEA;AACA;AACA;AACA,oCAAoC,8DAA8D;AAClG;AACA;AACA;AACA,oCAAoC,8DAA8D;AAClG,uCAAuC,8DAA8D;AACrG;AACA;AACA,oCAAoC,uDAAuD;AAC3F;AACA;AACA,UAAU,8DAA8D;AACxE;AACA;AACA;AACA,eAAe,mCAAmC;AAClD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gIAAa;AAC1B;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA,iBAAiB,qDAAqD;AACtE;AACA,GAAG;AACH;AACA;AACA,mBAAmB,gIAAa;;AAEhC;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,yDAAO;AACT;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACuC;AACvC;;AAEA,kBAAkB,8CAA8C;AAChE;AACA,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iDAAiD,wDAAwD;AACzG;AACA,WAAW,mCAAmC;AAC9C,aAAa;AACb;AACA;AACA;AACA,GAAG;AACH,C;;;;;;;;;;;;;AC/RA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AAChB;AACN;AACN;AACJ;AACM;AACR;AACjD;AACF;AACG;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEgC;;AAEhC;AACA;AACA,IAAI,sEAAsE;AAC1E;AACA;AACA,8BAA8B,6EAA6E;AAC3G,IAAI,iEAAiE;AACrE;AACA;AACA;AACA,+DAA+D,2DAA2D;AAC1H,sDAAsD,mDAAmD;AACzG;AACA,mDAAmD,yDAAyD;AAC5G;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA,sBAAsB,uCAAuC;AAC7D;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gDAAgD;AAChD,uCAAuC;AACvC,oCAAoC;AACpC,qDAAqD;AACrD,4CAA4C;AAC5C,yCAAyC;AACzC;AACA,6CAA6C;AAC7C,gDAAgD;AAChD;AACA;AACA,MAAM,qEAAqE;AAC3E;AACA,mCAAmC;AACnC,uDAAuD;AACvD,uBAAuB;AACvB;AACA,MAAM,4EAA4E;AAClF;AACA,aAAa,OAAO;AACpB;AACA,aAAa,OAAO;AACpB,eAAe;AACf;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA,gDAAgD,gIAAa;AAC7D,OAAO;AACP,qEAAqE,gIAAa;AAClF;AACA;AACA,GAAG;AACH,CAAC,CAAC,yDAAO;AACT;AACA,kBAAkB,uCAAuC;AACzD;AACA,aAAa,YAAY;AACzB;AACuC;AAChC;AACP,iBAAiB,qIAAkB;AACnC;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,6IAA0B;AAC5C;AACA;AACA,uBAAuB,+BAA+B;AACtD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,C;;;;;;;;;;;;;AC1IA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AAC3D;AACW;AACR;AACI;AACb;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoD;AACc;AACd;AACwB;;AAE5E;AACA;AACA,IAAI,4EAA4E;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB,uDAAuD;AACvE;AACA,yBAAyB,mEAAiB;;AAE1C;AACA,kDAAkD,uDAAuD;AACzG;AACA,8DAA8D,iDAAiD;AAC/G,QAAQ,kDAAkD;AAC1D,QAAQ,mEAAmE;AAC3E,yBAAyB,uDAAuD;AAChF;AACA;AACA,gBAAgB,mCAAmC;AACnD;AACA,qBAAqB,yFAAU;AAC/B;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA,wCAAwC,8DAA8D;AACtG,eAAe,8DAA8D;AAC7E;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA,wCAAwC,0EAA0E;AAClH,eAAe,0EAA0E;AACzF;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,aAAa,mEAAmE;AAChF;AACA;AACA,aAAa,OAAO;AACpB,eAAe,gEAAgE;AAC/E;AACA;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6DAA6D;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,yDAAyD;AACrF,UAAU,0GAA0G;AACpH;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,uEAAuE;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,QAAQ,oEAAoE;AAC5E;AACA;AACA,YAAY,6DAA6D;AACzE;AACA,eAAe,SAAS;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,iDAAiD;AAChE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,+BAA+B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,QAAQ,yDAAyD;AACjE;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AAC8B;AAC/B,0FAAG,WAAW,8FAAe;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,G;;;;;;;;;;;;;AChPA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACrD;AACL;AACD;AACG;AACQ;AACR;AACI;AACD;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE0B;AACU;AACgB;AACc;AACI;;AAEtE;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,qEAAqE;AAClF;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC;AACzC,8CAA8C;AAC9C;AACA,+CAA+C;AAC/C,gCAAgC;AAChC,6BAA6B;AAC7B;AACA,QAAQ,4EAA4E;AACpF;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,QAAQ,+EAA+E;AACvF;AACA;AACA,eAAe,qEAAqE;AACpF,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,6BAA6B;AAC9C;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,6BAA6B;AAC5C,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,wCAAwC;AACzD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qEAAqE;AACpF,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,qCAAqC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,uCAAuC;AACtD,eAAe,6BAA6B;AAC5C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACsC;AACvC,0FAAG,mBAAmB,2FAAY;;AAElC;AACA;AACA,WAAW;AACX,aAAa;AACb;AACA;AACA;AACA,gBAAgB,sDAAI;AACpB;AACA,OAAO,iGAAU;AACjB;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,sDAAI;AACrB;AACA,wBAAwB,2DAAS;AACjC,iBAAiB,sDAAI;AACrB;AACA;AACA,GAAG;AACH,C;;;;;;;;;;;;;ACzRA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgH;AACZ;AACM;AACN;AACrD;AACF;AACY;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoC;AACgB;AACkB;;AAEtE;AACA;AACA;AACA,iCAAiC,0EAA0E;AAC3G;AACA,qBAAqB,6CAA6C;AAClE;AACA,QAAQ,0DAA0D;AAClE,YAAY,oGAAoG;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iDAAiD;AACrF;AACA;AACA;AACA,gCAAgC,wCAAwC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,iBAAiB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,2BAA2B;AAClF;AACA,aAAa,wCAAwC;AACrD,aAAa,wCAAwC;AACrD,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,0BAA0B,0DAAS;;AAEnC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,mBAAmB;AAC3B;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,aAAa,WAAW,cAAc;AACpE;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,QAAQ,yEAAyE;AACjF;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,4CAA4C,qDAAqD;AACjG;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB,aAAa,+HAAY;AACzB;AACA;AACA,8BAA8B,qIAAkB;AAChD;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,QAAQ,iDAAiD,WAAW,8DAA8D;AAClI;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,qFAAqF;AACrF,iBAAiB,4DAA4D;AAC7E;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,8DAA8D;AACtE;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,4DAA4D;AACpE;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,sCAAsC,iDAAiD;AACvF;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,8FAA8F;AAC7G;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,wDAAwD;AAC1F;AACA;AACA,eAAe,8FAA8F;AAC7G;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uCAAuC;AACvC,+CAA+C;AAC/C,4CAA4C;AAC5C,oDAAoD;AACpD;AACA,qDAAqD;AACrD,qCAAqC;AACrC,kCAAkC;AAClC;AACA,QAAQ,4EAA4E;AACpF;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,yDAAyD;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iDAAiD;AACnF;AACA;AACA;AACA;AACA,8BAA8B,wCAAwC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,iBAAiB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,2BAA2B;AACrE;AACA;AACA;AACA,eAAe,wCAAwC;AACvD,eAAe,wCAAwC;AACvD,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,cAAc,aAAa;AAC3B;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA,eAAe,kEAAkE;AACjF,eAAe,8BAA8B;AAC7C,6BAA6B,6CAA6C;AAC1E;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,4DAA4D,uCAAuC;AACnG;AACA;AACA;AACA,GAAG;AACH,CAAC;AACuC;AACxC,yFAAG,oBAAoB,0FAAY,E;;;;;;;;;;;;;AC3bnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwG;AACJ;AAC4B;AACtB;AACN;AAC1D;AACI;AACJ;AACC;AACE;AACO;AACP;AACG;AACL;AACA;AACI;AACA;AACD;AACN;AACiB;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAE8B;AACM;AACE;AACN;AACQ;AACc;AACZ;AACsF;AAClE;AACE;AACU;AACU;AACtB;AACxB;;AAEtC;AACA,oBAAoB,kEAAS;;AAE7B;AACA;AACA,IAAI,wEAAwE;AAC5E;AACA,iDAAiD,mFAAmF;AACpI;AACA,oEAAoE,2CAA2C;AAC/G,kFAAkF,2CAA2C;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,0CAA0C;AACvD;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;;AAEA;AACA;AACA,QAAQ,kCAAkC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;;AAEA;AACA,cAAc,uCAAuC;AACrD;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA,uDAAuD,0DAAS,GAAG,4DAAW;;AAE9E;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;;AAEA;AACA;AACA,MAAM,gFAAgF;AACtF;AACA,MAAM,uEAAuE;AAC7E;AACA,aAAa,YAAY;AACzB,aAAa,uDAAuD;AACpE;AACA,SAAS,+HAAY;AACrB;AACA;AACA,qDAAqD,2DAAa;AAClE;;AAEA;AACA,gBAAgB,4DAA4D;AAC5E;AACA;AACA,eAAe,YAAY;AAC3B,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,gEAAgE;AACxE,QAAQ,gEAAgE;AACxE;AACA,eAAe,YAAY;AAC3B,eAAe,mCAAmC;AAClD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yEAAyE,yBAAyB;AAClG;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,gEAAgE;AACxE,QAAQ,gEAAgE;AACxE;AACA,eAAe,iBAAiB;AAChC,eAAe,qDAAqD;AACpE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,kFAAkF;AACjG;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,iBAAiB,sBAAsB;AACvC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,6IAA0B;AACpD;AACA;AACA,+BAA+B,+BAA+B;AAC9D;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,6DAA6D;AACrE,6CAA6C,uCAAuC;AACpF;AACA,eAAe,wFAAwF;AACvG,eAAe,SAAS;AACxB,eAAe,OAAO,cAAc,6DAA6D;AACjG,iBAAiB,gBAAgB;AACjC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,0BAA0B,+HAAY;AACtC;AACA,eAAe,+HAAY;AAC3B;AACA;AACA;AACA;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA,sBAAsB,qCAAqC;AAC3D,yBAAyB,wCAAwC;AACjE;AACA,eAAe,+BAA+B;AAC9C,iBAAiB,MAAM;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,2CAA2C;AACjE;AACA,yBAAyB,wCAAwC;AACjE;AACA;AACA,eAAe,qCAAqC;AACpD,iBAAiB,YAAY;AAC7B,iBAAiB,KAAK;AACtB,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,yEAAgB;AAC5B,oBAAoB,qEAAoB;AACxC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,iGAAM,cAAc,yEAAgB;AAChD;AACA;AACA,oBAAoB,qEAAoB;AACxC;AACA;AACA,kCAAkC,kGAAO;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,wCAAwC;AAChD,yCAAyC,6CAA6C;AACtF;AACA,eAAe,sBAAsB;AACrC,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,iBAAiB,uFAAuF;AACxG,mCAAmC,uCAAuC;AAC1E;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU,iGAAM;AAChB,YAAY,uEAAc;AAC1B;AACA,SAAS;AACT;AACA,8CAA8C,sDAAQ;AACtD;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kEAAoB;AAChD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,yDAAW;AACvC;AACA;AACA;;AAEA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,6DAA6D;AACzE,6CAA6C,uCAAuC;AACpF;AACA,eAAe,YAAY;AAC3B,eAAe,OAAO,cAAc,6DAA6D;AACjG,iBAAiB,wCAAwC;AACzD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,0BAA0B,+HAAY;AACtC;AACA,eAAe,+HAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA,uCAAuC,6CAA6C;AACpF;AACA;AACA,eAAe,UAAU;AACzB,iBAAiB,uCAAuC;AACxD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,iGAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2DAAa;AAC9B;AACA,OAAO;AACP;;AAEA;AACA,mCAAmC,qCAAqC;AACxE;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,oCAAoC;AACrD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAS;AAC5B;AACA;AACA;;AAEA;AACA,+CAA+C,2CAA2C;AAC1F;AACA,oCAAoC,uCAAuC;AAC3E;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA,eAAe,KAAK;AACpB,eAAe,OAAO;AACtB,iBAAiB,qCAAqC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA,4DAA4D,kGAAO;AACnE;;AAEA;AACA;AACA;AACA,eAAe,0DAAY;AAC3B;AACA,UAAU,iGAAM;AAChB,YAAY,uEAAc;AAC1B,8DAA8D,kGAAO;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,yEAAgB;AAC5B,oBAAoB,qEAAoB;AACxC;AACA;AACA,mBAAmB,0DAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0DAAY;AACnC;AACA,SAAS;AACT;AACA,2BAA2B,iGAAM;;AAEjC;AACA;AACA,uBAAuB,0DAAY;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC,iDAAiD;AACpF,QAAQ,2DAA2D;AACnE,oDAAoD;AACpD;AACA,yCAAyC,6CAA6C;AACtF;AACA,eAAe,yBAAyB;AACxC,iBAAiB;AACjB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,0DAA0D,sEAAsE;AAChI;AACA;AACA,8CAA8C,sEAAsE;AACpH;AACA;AACA,mEAAmE;AACnE;AACA;AACA,uCAAuC,6CAA6C;AACpF;AACA;AACA;AACA,0CAA0C,uCAAuC;AACjF;AACA,eAAe,KAAK;AACpB,iBAAiB,kCAAkC;AACnD;AACA;AACA,GAAG;AACH;AACA;AACA,UAAU,uEAAc;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,sDAAQ;AAC7C;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,sDAAQ;AAC5C;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oDAAoD,iDAAiD;AACrG,QAAQ,4EAA4E;AACpF,yCAAyC;AACzC,YAAY,gCAAgC;AAC5C;AACA,eAAe,wFAAwF;AACvG;AACA,iBAAiB,gCAAgC;AACjD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,0DAA0D,sEAAsE;AAChI;AACA;AACA,8CAA8C,sEAAsE;AACpH;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA,eAAe,6BAA6B;AAC5C,iBAAiB,UAAU;AAC3B;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+DAA+D,yDAAyD;AACxH;AACA,eAAe,mDAAmD;AAClE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,6BAA6B,yFAAM;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,iIAAc;AACnD;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,QAAQ,yFAAM;AACd;AACA;;AAEA;AACA;AACA;AACA,eAAe,KAAK;AACpB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,KAAK;AACpB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,KAAK;AACpB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6CAA6C,wBAAwB;AACrE;AACA,yDAAyD;AACzD,2DAA2D;AAC3D;AACA;AACA;AACA,eAAe,KAAK;AACpB,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,UAAU;AACzB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,6CAA6C;AACpE;AACA;AACA,eAAe,KAAK;AACpB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,sBAAsB,uGAAY;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kDAAkD,+DAA+D;AACjH;AACA,eAAe,UAAU;AACzB,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,wFAAwF,6BAA6B;AACrH;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA,UAAU,iGAAM,eAAe,yEAAgB,wBAAwB,qEAAoB;AAC3F;AACA;AACA;AACA,uCAAuC,yEAAgB;AACvD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,wCAAwC;AAC7E;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA,gEAAgE;AAChE;AACA,uEAAuE,oCAAoC;AAC3G;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA,eAAe,6BAA6B;AAC5C,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iDAAiD;AACjD;AACA,yBAAyB;AACzB,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA6B,EAAE;AAC/B;;AAEA;AACA,mHAAmH;AACnH;AACA;AACA,eAAe,6BAA6B;AAC5C,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA,8EAA8E,kDAAkD;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,KAAK;AACpB,iBAAiB,OAAO;AACxB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,eAAe,6EAAoB;AACnC;;AAEA;AACA;AACA;AACA;AACA,qCAAqC,GAAG;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,6EAAoB;;AAEjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC,0DAA0D;AAC1D;AACA;;AAEA;AACA;AACA;AACA;;AAEA,4BAA4B;AAC5B;AACA;AACA;AACA;;AAEA,wEAAwE;AACxE,iDAAiD,WAAW;AAC5D;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,KAAK;AACpB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,UAAU,oEAAS;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,KAAK;AACpB,eAAe,KAAK;AACpB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,cAAc,yEAAgB;AAC9B;;AAEA;AACA,mCAAmC,kDAAkD;AACrF;AACA;AACA,eAAe,6BAA6B;AAC5C,eAAe,QAAQ;AACvB,iBAAiB,kCAAkC;AACnD;AACA,GAAG;AACH;AACA;AACA,2BAA2B,4DAAc;AACzC,iCAAiC,0DAAY,sBAAsB,0DAAY;AAC/E;AACA,OAAO;AACP,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,KAAK;AACpB,eAAe,QAAQ;AACvB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uGAAY;AACtC;AACA;AACA,cAAc,iGAAM;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,kBAAkB,4GAAiB;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,GAAG;AACJ;AACA;AACA,WAAW,KAAK;AAChB,WAAW,eAAe;AAC1B,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACc;AACnC;AACA,gBAAgB,uGAAY;AAC5B;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,SAAS;AACpB;AACA,yBAAyB,yFAAM;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA,WAAW,KAAK;AAChB,aAAa;AACb;AACA,eAAe,iGAAM;AACrB;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,aAAa,OAAO;AACpB,G;;;;;;;;;;;;;ACv1CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AAChB;AACN;AACN;AAC1D;AACA;AACA;AACC;AACE;AACO;AACP;AACA;AACV;AACe;AACF;AACb;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEkC;AACN;AACQ;AACc;AACA;AACR;AACN;AACoC;AACtB;AACgB;AACxC;AACsB;AACN;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAA0D;AAClE;AACA;AACA;AACA,IAAI,iEAAiE;AACrE;AACA,6CAA6C;AAC7C,mBAAmB,gFAAgF;AACnG;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,qEAAqE,iEAAiE;AACtI,0DAA0D,2DAA2D;AACrH;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,WAAW,yEAAyE;AACpF,4CAA4C,yDAAyD;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,iDAAiD;AACjF;AACA;AACA;AACA;AACA,6BAA6B,wCAAwC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,iBAAiB;AACpD;AACA;AACA;AACA;AACA;AACA,mCAAmC,aAAa;AAChD;AACA;AACA;AACA,mCAAmC,2BAA2B;AAC9D;AACA,aAAa,wCAAwC;AACrD,aAAa,wCAAwC;AACrD,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA,cAAc,qFAAqF;AACnG;AACA,0DAA0D;AAC1D;AACA;AACA,eAAe,kEAAkE;AACjF,eAAe,8BAA8B;AAC7C,6BAA6B,6CAA6C;AAC1E;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,6CAA6C;AACnE;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,6BAA6B;AAC9C;AACA,GAAG;AACH;AACA;AACA,iBAAiB,sDAAI;AACrB;;AAEA;AACA,oBAAoB,2DAA2D;AAC/E;AACA;AACA,6CAA6C,kBAAkB;AAC/D;AACA;AACA,6CAA6C,kBAAkB,GAAG,cAAc;AAChF;AACA;AACA,gDAAgD,qBAAqB,GAAG,kBAAkB;AAC1F;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO,+BAA+B,6EAA6E;AAClI,eAAe,cAAc,yBAAyB,iEAAiE;AACvH,iBAAiB,qDAAqD;AACtE;AACA,GAAG;AACH;AACA;AACA;AACA,iCAAiC,kEAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,2DAA2D;AAC/E;AACA;AACA;AACA;AACA,+CAA+C,mCAAmC;AAClF;AACA;AACA,6CAA6C,2BAA2B,wBAAwB;AAChG;AACA;AACA,6CAA6C,uBAAuB;AACpE;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,qDAAqD;AACtE;AACA,GAAG;AACH;AACA;AACA,iBAAiB,kEAAgB;AACjC;;AAEA;AACA,oBAAoB,yDAAyD;AAC7E;AACA;AACA,8CAA8C,iBAAiB;AAC/D;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,mDAAmD;AACpE;AACA,GAAG;AACH;AACA;AACA,gCAAgC,iEAAe;AAC/C;AACA;AACA;;AAEA;AACA,oBAAoB,mDAAmD;AACvE;AACA;AACA,2CAA2C,iBAAiB;AAC5D;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,6CAA6C;AAC9D;AACA,GAAG;AACH;AACA;AACA,iBAAiB,8DAAY;AAC7B;;AAEA;AACA,oBAAoB,6CAA6C;AACjE;AACA;AACA,yCAAyC,iBAAiB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,uCAAuC;AACxD;AACA,GAAG;AACH;AACA;AACA,0BAA0B,2DAAS;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,mCAAmC;AAClD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,mCAAmC;AAClD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sBAAsB;AACrC,eAAe,mCAAmC;AAClD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sBAAsB;AACrC,eAAe,mCAAmC;AAClD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,eAAe,cAAc;AAC7B,eAAe,OAAO;AACtB,eAAe,mCAAmC;AAClD;AACA,GAAG;AACH;AACA;AACA,UAAU,wEAAa;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+CAA+C;AAC/C,iEAAiE;AACjE;AACA,eAAe,sBAAsB;AACrC,eAAe,mCAAmC;AAClD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B,eAAe,EAAE;AACjB,eAAe,mCAAmC;AAClD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,cAAc;AAC7B,eAAe,mCAAmC;AAClD,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,sBAAsB,2BAA2B;AACjD,uBAAuB;AACvB,iBAAiB,WAAW;AAC5B;AACA,kBAAkB,4EAA4E;AAC9F;AACA,qCAAqC,uFAAuF;AAC5H,QAAQ,qFAAqF;AAC7F,QAAQ,8EAA8E;AACtF,oCAAoC,6EAA6E;AACjH;AACA;AACA,eAAe,6DAA6D;AAC5E,aAAa;AACb,YAAY,6CAA6C;AACzD;AACA,eAAe,6DAA6D;AAC5E;AACA,eAAe,gEAAgE;AAC/E;AACA,eAAe,6DAA6D;AAC5E;AACA,eAAe,uDAAuD;AACtE;AACA;AACA;AACA;AACA,eAAe,oEAAoE;AACnF;AACA,iBAAiB,oEAAoE;AACrF;AACA;AACA,GAAG;AACH;AACA;AACA,qCAAqC,0DAAQ;AAC7C;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,eAAe,kFAAkF;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uFAAuF;AAC5H,QAAQ,qFAAqF;AAC7F,QAAQ,8EAA8E;AACtF,oCAAoC,6EAA6E;AACjH;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAqC;AACpD,iBAAiB,qCAAqC;AACtD;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA,eAAe,0DAAQ;AACvB,OAAO;AACP;AACA,oBAAoB,0DAAQ;AAC5B,8BAA8B,uDAAK,WAAW,0DAAQ;AACtD,iCAAiC,0DAAQ;AACzC;AACA;AACA,aAAa,0DAAQ;AACrB;;AAEA;AACA,eAAe,8EAA8E;AAC7F,aAAa,6EAA6E;AAC1F;AACA;AACA;AACA,mCAAmC;AACnC,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA,qCAAqC,uFAAuF;AAC5H,QAAQ,uFAAuF;AAC/F,QAAQ,8EAA8E,KAAK;AAC3F,0CAA0C,8EAA8E;AACxH;AACA;AACA;AACA;AACA,eAAe,qCAAqC;AACpD,iBAAiB,qCAAqC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0DAAQ;AAChD;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wCAAwC,0DAAQ;AAChD;AACA;AACA;;AAEA;AACA,mBAAmB,8EAA8E;AACjG;AACA;AACA;AACA;AACA;AACA,qCAAqC,uFAAuF;AAC5H,QAAQ,uFAAuF;AAC/F,QAAQ,8EAA8E,KAAK;AAC3F,0CAA0C,8EAA8E;AACxH;AACA;AACA;AACA;AACA,eAAe,qCAAqC;AACpD,iBAAiB,qCAAqC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA,6CAA6C,sDAAI,GAAG,0DAAQ,+BAA+B,0DAAQ;AACnG,gBAAgB,uDAAK,kBAAkB,0DAAQ;AAC/C,kBAAkB,uDAAK;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,6DAA6D;AAC5E,wCAAwC,yCAAyC;AACjF,QAAQ,6EAA6E;AACrF,QAAQ,6EAA6E;AACrF,QAAQ,iEAAiE;AACzE,QAAQ,wDAAwD;AAChE;AACA,eAAe,qCAAqC;AACpD,eAAe;AACf;AACA;AACA;AACA,4FAA4F;AAC5F,iBAAiB,+BAA+B;AAChD;AACA,GAAG;AACH;AACA;AACA,cAAc,iGAAU,UAAU,qIAAkB;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,uDAAK;AACxB,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAK;AACxB;AACA;;AAEA;AACA;AACA;AACA,eAAe,6DAA6D;AAC5E,QAAQ,iDAAiD,MAAM,6CAA6C;AAC5G;AACA;AACA,eAAe,4DAA4D;AAC3E,cAAc,wCAAwC;AACtD;AACA,iBAAiB,qDAAqD;AACtE;AACA,GAAG;AACH;AACA;AACA,yCAAyC,uDAAK,iBAAiB,uDAAK;AACpE;;AAEA;AACA;AACA,mBAAmB,kEAAgB;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,kEAAgB;AACjC;;AAEA;AACA;AACA;AACA,eAAe,6DAA6D;AAC5E,QAAQ,iDAAiD,MAAM,6CAA6C;AAC5G;AACA;AACA,eAAe,+BAA+B;AAC9C,eAAe,mCAAmC;AAClD;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA4B,uDAAK;AACjC;AACA,WAAW;AACX;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,8BAA8B,uDAAK;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,6DAA6D;AAC5E,QAAQ,iDAAiD,MAAM,6CAA6C;AAC5G;AACA;AACA,eAAe,+BAA+B;AAC9C,eAAe,qCAAqC;AACpD,iBAAiB,+BAA+B;AAChD,QAAQ,iDAAiD,MAAM,6CAA6C;AAC5G;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,kDAAkD,4EAA4E;AAC9H;AACA;AACA;AACA;AACA;AACA,eAAe,+CAA+C;AAC9D,aAAa;AACb,YAAY,yCAAyC;AACrD;AACA,eAAe,+CAA+C;AAC9D,uBAAuB,4EAA4E;AACnG;AACA,eAAe,+CAA+C;AAC9D;AACA;AACA,eAAe,+BAA+B;AAC9C,eAAe,qDAAqD;AACpE,iBAAiB,+BAA+B;AAChD;AACA,GAAG;AACH;AACA;AACA,iCAAiC,kEAAgB;AACjD,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,uDAAK;AACxB;AACA;;AAEA;AACA;AACA;AACA,eAAe,6DAA6D;AAC5E,QAAQ,iDAAiD,MAAM,6CAA6C;AAC5G;AACA;AACA,eAAe,+BAA+B;AAC9C,eAAe,qDAAqD;AACpE;AACA,GAAG;AACH;AACA;AACA,iCAAiC,kEAAgB;AACjD;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uDAAK;AACtB;;AAEA;AACA;AACA,+EAA+E,qDAAqD;AACpI,+BAA+B,2DAA2D;AAC1F;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qDAAqD;AACpE;AACA,GAAG;AACH;AACA;AACA,2BAA2B,kEAAgB;AAC3C,kBAAkB,0DAAQ;AAC1B,gBAAgB,uDAAK,yBAAyB,0DAAQ;AACtD,kBAAkB,uDAAK;AACvB;AACA;;AAEA;AACA;AACA;AACA,oCAAoC;AACpC,sBAAsB,iEAAiE;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,oDAAoD;AAChE;AACA;AACA,UAAU,6CAA6C;AACvD;AACA;AACA;AACA,UAAU,4BAA4B;AACtC,UAAU,2BAA2B;AACrC;AACA,eAAe,mEAAmE;AAClF,eAAe,8BAA8B;AAC7C,6BAA6B,6CAA6C;AAC1E;AACA,GAAG;AACH;AACA;AACA,aAAa,0DAAQ;AACrB;;AAEA;AACA;AACA;AACA,eAAe,6BAA6B;AAC5C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,aAAa,0DAAQ;AACrB;;AAEA;AACA;AACA;AACA,eAAe,6BAA6B;AAC5C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,aAAa,0DAAQ;AACrB;;AAEA;AACA;AACA;AACA,uDAAuD,2CAA2C;AAClG;AACA,eAAe,qCAAqC;AACpD,eAAe,qCAAqC;AACpD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,iBAAiB,uDAAK;AACtB;;AAEA;AACA,iDAAiD,6CAA6C;AAC9F;AACA,eAAe,6BAA6B;AAC5C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,aAAa,uDAAK;AAClB;;AAEA;AACA,kCAAkC,iDAAiD;AACnF;AACA;AACA,eAAe,mCAAmC;AAClD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,aAAa,uDAAK;AAClB;;AAEA;AACA,kBAAkB,6CAA6C;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,iDAAiD;AACvF;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,2BAA2B;AACrF;AACA,eAAe,wCAAwC;AACvD,eAAe,wCAAwC;AACvD,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,iBAAiB,2DAAS;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,mCAAmC;AAClD,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,mCAAmC;AAClD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,0DAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iCAAiC,0DAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sDAAsD,4BAA4B;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uDAAK;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,mCAAmC;AAClD,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,mCAAmC;AAClD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC,0DAAQ,iBAAiB,0DAAQ;;AAEpE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,0DAAQ,iBAAiB,0DAAQ;AACpE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2DAA2D,+BAA+B;AAC1F;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uDAAK;AAClB;;AAEA;AACA;AACA;AACA;AACA,eAAe,+CAA+C;AAC9D,uBAAuB,4EAA4E;AACnG;AACA;AACA,eAAe,+BAA+B;AAC9C,eAAe,qDAAqD;AACpE,iBAAiB,+BAA+B;AAChD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uDAAK;AACtB;;AAEA;AACA,4BAA4B,YAAY;AACxC;AACA;AACA,eAAe,+CAA+C;AAC9D,uBAAuB,4EAA4E;AACnG;AACA;AACA,eAAe,qCAAqC;AACpD,eAAe,qDAAqD;AACpE,iBAAiB,qCAAqC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,0BAA0B,uDAAK;;AAE/B;AACA;;AAEA;AACA,4BAA4B,0DAAQ;AACpC;;AAEA;AACA;AACA;AACA,gCAAgC,sDAAI,yBAAyB,sDAAI;AACjE;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mBAAmB,4EAA4E;AAC/F;AACA;AACA;AACA;AACA,gBAAgB,qDAAqD;AACrE,gBAAgB,qDAAqD;AACrE,kBAAkB,QAAQ;AAC1B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,4EAA4E;AAC5F;AACA;AACA;AACA;AACA,eAAe,qDAAqD;AACpE,eAAe,qDAAqD;AACpE,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,6CAA6C,qIAAkB;AAC/D;AACA;;AAEA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,+BAA+B;AAC9C,eAAe,QAAQ;AACvB;AACA,iBAAiB,+BAA+B;AAChD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,uDAAK;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,uDAAK;AACtB;;AAEA;AACA;AACA;AACA,eAAe,6DAA6D;AAC5E,yBAAyB,gEAAgE;AACzF;AACA,eAAe,6DAA6D;AAC5E,yBAAyB,uDAAuD;AAChF;AACA;AACA,eAAe,qCAAqC;AACpD,eAAe,QAAQ;AACvB;AACA,iBAAiB,qCAAqC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B;AACA;AACA;AACA,8BAA8B,0DAAQ;AACtC;AACA,OAAO;AACP,yBAAyB;AACzB;AACA,mBAAmB;AACnB;AACA,iCAAiC,0DAAQ;AACzC;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kCAAkC,0DAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,6EAA6E;AACpH;AACA;AACA;AACA,+CAA+C,iFAAiF;AAChI;AACA,6CAA6C,iEAAiE;AAC9G;AACA;AACA,eAAe,qDAAqD;AACpE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B,6IAA0B;AACpD;AACA;AACA,+BAA+B,mCAAmC;AAClE;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA,2CAA2C,iEAAiE;AAC5G;AACA;AACA,eAAe,qDAAqD;AACpE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,0BAA0B,6IAA0B;AACpD;AACA;AACA,+BAA+B,mCAAmC;AAClE;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,GAAG;AACiC;AACrC;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gDAAgD,oDAAoD;AACpG;AACA,cAAc,4EAA4E;AAC1F;AACA,WAAW,qCAAqC;AAChD,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,4EAA4E;AAChG;AACA,IAAI,+EAA+E;AACnF,IAAI,gEAAgE;AACpE;AACA,WAAW,qDAAqD;AAChE,WAAW,qDAAqD;AAChE,aAAa;AACb;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B;AAC9B,2BAA2B;AAC3B;AACA,WAAW,qCAAqC;AAChD,aAAa,qCAAqC;AAClD;AACA;AACA;AACA;AACA,eAAe,0DAAQ;AACvB;AACA;AACA;AACA,eAAe,0DAAQ;AACvB;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ,SAAS;AACT,eAAe;AACf;AACA,WAAW,qCAAqC;AAChD,aAAa,qCAAqC;AAClD;AACA;AACA,eAAe,0DAAQ;AACvB;AACA;AACA,eAAe,0DAAQ;AACvB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qEAAqE,sDAAI;;AAEzE;AACA,aAAa,0DAAQ;AACrB;;AAEA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA,WAAW,6BAA6B;AACxC,aAAa,qCAAqC;AAClD;AACA;AACA;AACA;AACA;AACA,aAAa,0DAAQ;AACrB;;AAEA;AACA,IAAI,wCAAwC,KAAK,4EAA4E;AAC7H,IAAI,4EAA4E;AAChF,IAAI,gEAAgE;AACpE,IAAI,uDAAuD;AAC3D;AACA,WAAW,6DAA6D;AACxE,oCAAoC,yCAAyC;AAC7E,IAAI,iEAAiE;AACrE,IAAI,wDAAwD;AAC5D,IAAI,6EAA6E;AACjF,IAAI,6EAA6E;AACjF;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA,oBAAoB,6IAA0B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,yDAAyD,4EAA4E;AACrI,YAAY,4EAA4E;AACxF,YAAY,gEAAgE;AAC5E,YAAY,uDAAuD,GAAG,wCAAwC;AAC9G;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;AACA;AACA,yBAAyB,mCAAmC;AAC5D;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,0BAA0B,sDAAI,EAAE,kEAAgB,EAAE,kEAAgB,EAAE,8DAAY,EAAE,2DAAS;;AAE3F;AACA;AACA,WAAW,6BAA6B;AACxC,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA,cAAc,uDAAuD,MAAM,mDAAmD;AAC9H,gBAAgB,6EAA6E;AAC7F,WAAW,6DAA6D;AACxE;AACA,WAAW,+BAA+B;AAC1C,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,uDAAuD,uDAAuD;AAC9G,QAAQ,mDAAmD;AAC3D;AACA;AACA;AACA;;AAEA,cAAc,4FAAa;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,mCAAmC;AAC9C,WAAW,mCAAmC;AAC9C,aAAa;AACb;AACA;AACA,C;;;;;;;;;;;;;ACrgEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AACxD;AACY;AACL;AACG;AACL;AACG;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEkD;AACsB;AACpB;AACwB;AAC5E;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA,iDAAiD,oDAAoD;AACrG;AACA;AACA,IAAI,sHAAsH;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA,mCAAmC,wEAAwE;AAC3G;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA,YAAY,2CAA2C;AACvD;AACA,eAAe,6DAA6D;AAC5E;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;;AAEA;AACA;AACA;AACA,8CAA8C;AAC9C,sCAAsC;AACtC,mCAAmC;AACnC,mDAAmD;AACnD,2CAA2C;AAC3C,wCAAwC;AACxC;AACA,4CAA4C;AAC5C,+CAA+C;AAC/C;AACA;AACA,MAAM,mEAAmE;AACzE;AACA,kCAAkC;AAClC,qDAAqD;AACrD,uBAAuB;AACvB;AACA,MAAM,4EAA4E;AAClF;AACA,aAAa,OAAO;AACpB;AACA,aAAa,OAAO;AACpB,eAAe;AACf;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA,+CAA+C,gIAAa;AAC5D,OAAO;AACP,oEAAoE,gIAAa;AACjF;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,qCAAqC;AACpD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH,CAAC,CAAC,kEAAgB;AACoB;AACtC,0FAAG,kBAAkB,8FAAe,E;;;;;;;;;;;;;AC1KpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgG;AACQ;AACwB;AAChB;AACA;AACZ;AACM;AACN;AACJ;AACM;AACR;AAC/C;AACH;AACF;AACA;AACD;AACC;AACA;AACE;AACC;AACO;AACH;AACL;AACT;AACQ;AACK;AACL;AACR;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACH;AACE;AACF;AACD;AACc;AACA;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE0B;AACA;AACU;AACgC;AACF;AAClC;AACU;;AAE1C;AACA;AACA;AACA;AACA,gCAAgC,yCAAyC;AACzE;AACA;AACA,MAAM;AACN,yBAAyB,2DAA2D;AACpF,MAAM;AACN,yBAAyB,2DAA2D;AACpF,MAAM;AACN,yBAAyB,mDAAmD;AAC5E,MAAM;AACN,yBAAyB,6CAA6C;AACtE,MAAM;AACN,yBAAyB,yDAAyD;AAClF;AACA;AACA,IAAI,0EAA0E;AAC9E,sBAAsB,gGAAgG;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,2CAA2C,GAAG;AACzE,qFAAqF;AACrF,4CAA4C;AAC5C;AACA;AACA,aAAa,OAAO;AACpB,aAAa,gBAAgB;AAC7B,aAAa,qEAAqE;AAClF;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,IAAI;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,IAAI;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,EAAE,6HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC,6BAA6B;AAC7B,qCAAqC;AACrC,kCAAkC;AAClC;AACA,sCAAsC;AACtC,0CAA0C;AAC1C;AACA;AACA,QAAQ,mDAAmD;AAC3D;AACA,4BAA4B;AAC5B,uCAAuC;AACvC,yBAAyB;AACzB;AACA,QAAQ,4EAA4E;AACpF;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,+DAA+D,gIAAa;AAC5E,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,6BAA6B;AAC9C;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,6BAA6B;AAC5C,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,wCAAwC;AACzD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB,aAAa,+HAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qIAAkB;AAChD;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB,aAAa,+HAAY;AACzB;AACA;AACA,+BAA+B,qIAAkB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,iBAAiB;AAClC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,iBAAiB,qIAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6IAA0B;AACpD;AACA;AACA,+BAA+B,+BAA+B;AAC9D,gCAAgC,iIAAc;AAC9C;AACA;AACA,sEAAsE;AACtE;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,mCAAmC;AAClD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D,6BAA6B,iIAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D,6BAA6B,iIAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kCAAkC;AAClC,yCAAyC;AACzC;AACA,eAAe,UAAU;AACzB;AACA,GAAG;AACH;AACA;AACA,8EAA8E,aAAa;AAC3F;AACA;AACA,8CAA8C,wBAAwB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oCAAoC;AACpC,kDAAkD;AAClD;AACA,eAAe,UAAU;AACzB;AACA,GAAG;AACH;AACA;AACA,gFAAgF,eAAe;AAC/F;AACA;AACA,6CAA6C,wBAAwB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oDAAoD,iDAAiD;AACrG;AACA;AACA,eAAe,8BAA8B;AAC7C,YAAY,yCAAyC;AACrD,iBAAiB,wCAAwC;AACzD;AACA,GAAG;AACH;AACA;AACA,gFAAgF,eAAe;AAC/F;AACA;AACA,oBAAoB,6HAAU,CAAC,yDAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,cAAc;AAC7B,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB,aAAa,+HAAY;AACzB;AACA;AACA,+BAA+B,qIAAkB;AACjD;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,0BAA0B,6BAA6B;AACvD;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA,SAAS;AACT;AACA,8DAA8D;AAC9D;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO,gBAAgB;AACvB;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA,iBAAiB,mCAAmC;AACpD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ,6DAA6D;AACrE;AACA;AACA;AACA;AACA,eAAe,qEAAqE;AACpF;AACA,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qEAAqE;AACpF;AACA,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,iBAAiB,qCAAqC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC;AACnC,8CAA8C;AAC9C;AACA;AACA;AACA,eAAe,sBAAsB;AACrC;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,sCAAsC;AACtC,iDAAiD;AACjD;AACA;AACA;AACA,eAAe,sBAAsB;AACrC;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,eAAe,cAAc;AAC7B,eAAe,OAAO;AACtB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,UAAU,wEAAa;AACvB;AACA,uCAAuC,oBAAoB;AAC3D;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC;AACxC,0DAA0D;AAC1D;AACA;AACA;AACA,eAAe,sBAAsB;AACrC;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B,eAAe,EAAE;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,uCAAuC;AAC7D;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,sDAAI,EAAE;AACR;AACA;AACA;AACA,WAAW,WAAW;AACtB,aAAa,IAAI;AACa;AAC9B;AACA,MAAM,wEAAa;AACnB,YAAY,kGAAW;AACvB,GAAG;AACH;AACA;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD,yBAAyB,iIAAc;AACvC;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8CAA8C;AAC9C,wDAAwD;AACxD,oCAAoC;AACpC;;AAEA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,WAAW;AACX,aAAa;AACb;AACA;AACA;AACA,gBAAgB,sDAAI;AACpB;AACA,OAAO,iGAAU;AACjB;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,sDAAI;AACrB;AACA,wBAAwB,2DAAS;AACjC,iBAAiB,sDAAI;AACrB;AACA;AACA,GAAG;AACH,C;;;;;;;;;;;;;ACjlCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AACpD;AACG;AACF;AACI;AACD;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEgC;AACwC;AAC9C;;AAE1B;AACA;AACA;AACA;AACA,IAAI,gHAAgH;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,6DAA6D;AAC1E;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,gBAAgB;AAC7B;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,iBAAiB,KAAK;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC;AACxC,mCAAmC;AACnC,gCAAgC;AAChC,6CAA6C;AAC7C,wCAAwC;AACxC,qCAAqC;AACrC;AACA,yCAAyC;AACzC,4CAA4C;AAC5C;AACA;AACA,MAAM,6DAA6D;AACnE;AACA,+BAA+B;AAC/B,+CAA+C;AAC/C,uBAAuB;AACvB;AACA,MAAM,4EAA4E;AAClF;AACA,aAAa,OAAO;AACpB;AACA,aAAa,OAAO;AACpB,eAAe;AACf;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA,4CAA4C,gIAAa;AACzD,OAAO;AACP,iEAAiE,gIAAa;AAC9E;AACA;;AAEA;AACA,kBAAkB,sDAAsD;AACxE,eAAe,6DAA6D;AAC5E;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,qCAAqC,sDAAI;AACzC;AACA,mCAAmC,mDAAmD;AACtF;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA,GAAG;AACH,CAAC,CAAC,yDAAO,EAAE;AACX;AACA,aAAa;AACsB;AACnC;AACA;AACA,C;;;;;;;;;;;;;AC5HA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2C;AAC3C;AACA;AACA;AACA;;AAEkE;AACJ;;AAE9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wDAAwD;AACjG,+CAA+C,+DAA+D;AAC9G;AACA;AACA;AACA,iBAAiB,4DAA4D;AAC7E,IAAI,4DAA4D;AAChE;AACA;AACA;AACA;AACA,qDAAqD,oDAAoD;AACzG;AACA;AACA;AACA;;AAEA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,4DAA4D;AAC9E;AACO;;AAEP;AACA;AACA;AACO;AACP;AACA,iBAAiB,0BAA0B;AAC3C;AACA;AACA;AACA,CAAC,GAAG;;AAEJ;AACA,4DAA4D,4DAA4D;AACxH;AACA,iEAAiE;AACjE,yEAAyE;AACzE,yDAAyD;AACzD,sDAAsD;AACtD;AACA,WAAW,KAAK;AAChB,aAAa,QAAQ,wCAAwC,4DAA4D;AACzH;AACO;AACP,SAAS,gGAAM;AACf;;AAEA;AACA,8CAA8C,4DAA4D;AAC1G;AACA,+DAA+D;AAC/D,uEAAuE;AACvE;AACA,WAAW,KAAK;AAChB,aAAa,QAAQ,0CAA0C,4DAA4D;AAC3H;AACO;AACP;AACA;;AAEA;AACA,oDAAoD,4DAA4D;AAChH;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACO;AACP;AACA;;AAEA;AACA;AACA,sBAAsB,uFAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;ACjJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AAC1D;AACG;AACK;AACJ;AACH;AACE;AACF;AACK;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,kDAAkD;AACjG;AACA;AACA;AACA;AACA;AACA,aAAa,qBAAqB,gCAAgC,wDAAwD;AAC1H;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,UAAU,gDAAgD;AAC1D;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA,aAAa,8BAA8B;AAC3C;AACA,kEAAkE,iDAAiD;AACnH;AACA,MAAM,qDAAqD,KAAK,2DAA2D;AAC3H,aAAa,cAAc;AAC3B,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,aAAa,oBAAoB;AACjC;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,SAAS,+HAAY;AACrB;AACA;AACA,4EAA4E,aAAa;AACzF;AACA;AACA,0CAA0C,sBAAsB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,iDAAiD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,iBAAiB,YAAY;AAC7B,iBAAiB,mCAAmC;AACpD,iBAAiB,8BAA8B;AAC/C,iBAAiB,OAAO;AACxB,iBAAiB,QAAQ;AACzB,iBAAiB,MAAM;AACvB,iBAAiB,MAAM;AACvB,iBAAiB,MAAM;AACvB;AACA,GAAG;AACH;AACA;AACA,+EAA+E,eAAe;AAC9F;AACA;AACA,2CAA2C,uBAAuB;AAClE;AACA,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,+BAA+B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,kDAAkD;AAC1D;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,iBAAiB,oBAAoB;AACrC,YAAY,4DAA4D;AACxE;AACA,GAAG;AACH;AACA;AACA;AACA,+EAA+E,eAAe;AAC9F;AACA;AACA,4CAA4C,wBAAwB;AACpE;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,GAAG,kCAAkC,iDAAiD;AACvF;AACA;AACA,WAAW,mCAAmC;AAC9C,WAAW,8BAA8B;AACzC,aAAa,YAAY;AACK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA,WAAW,mCAAmC;AAC9C,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,sBAAsB;AACjC,WAAW,mCAAmC;AAC9C,aAAa,WAAW;AACxB;AACA;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA,WAAW,mCAAmC;AAC9C,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,2FAA2F,eAAe;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,6DAA6D;AAC/H;AACA;AACA,aAAa,8BAA8B;AAC3C;AACA,cAAc,cAAc;AAC5B,cAAc,oCAAoC;AAClD,cAAc,OAAO;AACrB;AACA,cAAc,OAAO;AACrB;AACA,G;;;;;;;;;;;;;ACreA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACpG;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwE;AACF;AAClB;AACoB;AACtC;;AAElC;AAC+C;;AAE/C;AACA;AACA;AACA;AACA,YAAY,yCAAyC;AACrD,OAAO,mCAAmC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA,gDAAgD,sDAAsD;AACtG;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2FAAa;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ,yDAAyD;AACjE,QAAQ,6EAA6E;AACrF;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,6CAA6C;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,qBAAqB;AACrB,sBAAsB;AACtB;AACA,iBAAiB,eAAe;AAChC;AACA,GAAG;AACH;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA,iBAAiB,MAAM;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,yCAAyC,KAAK;AAChE;AACA;AACA,eAAe,6BAA6B;AAC5C,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,2DAA2D;AAChF;AACA,eAAe,6BAA6B;AAC5C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mGAAa;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,2DAA2D;AAChF;AACA,eAAe,6BAA6B;AAC5C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,uCAAuC;AACtD,eAAe,6BAA6B;AAC5C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA,iBAAiB,+DAAK;;AAEtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,2DAA2D,OAAO;AACvF;AACA;AACA,mCAAmC;AACnC,gCAAgC;AAChC,4CAA4C;AAC5C;AACA;AACA;AACA;AACA,yCAAyC;AACzC,0CAA0C;AAC1C;AACA;AACA;AACA,+BAA+B;AAC/B,0CAA0C;AAC1C,+CAA+C;AAC/C;AACA;AACA;AACA,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV,UAAU;AACV;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,6BAA6B;AAC9C;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH,CAAC;AACD;AACA,uBAAuB,kDAAkD;AACzE;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA,uBAAuB,kDAAkD;AACzE;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA,eAAe,8CAA8C;AAC7D;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;AAC2B;AAC3B,yFAAG,OAAO,0FAAY,E;;;;;;;;;;;;;AClZtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEkD;;AAElD;AACA,IAAI,6DAA6D;AACjE;AACA;AACA,IAAI;AACJ,SAAS,+CAA+C;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,iEAAgB;AAClB;AACA;AACA;AACA,kBAAkB,8DAA8D;AAChF;AACA;AACA,IAAI,8DAA8D;AAClE,OAAO,mCAAmC,OAAO,+CAA+C;AAChG;AACA;AACA;AACA,WAAW,sDAAsD;AACjE;;;;;;;;;;;;;;ACpDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEkD;;AAElD;AACA,IAAI,mFAAmF;AACvF,IAAI,qFAAqF;AACzF,IAAI,+EAA+E;AACnF;AACA,+CAA+C,mCAAmC;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,iEAAgB;AAClB;AACA;AACA;AACA,kBAAkB,0EAA0E;AAC5F;AACA,sBAAsB,0EAA0E;AAChG,IAAI,mCAAmC;AACvC;AACA;AACA;AACA,WAAW,sDAAsD;AACjE;AACA;AACA;AACA;AACA,kBAAkB,0EAA0E;AAC5F;AACA,sBAAsB,0EAA0E;AAChG,IAAI,mCAAmC;AACvC;AACA;AACA;AACA,WAAW,sDAAsD;AACjE;AACA;AACA;AACA;AACA,kBAAkB,0EAA0E;AAC5F;AACA,sBAAsB,0EAA0E;AAChG,IAAI,mCAAmC;AACvC;AACA;AACA;AACA,WAAW,sDAAsD;AACjE;;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAA0G;AACN;AACpG;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEmC;;AAEnC;AACA,oDAAoD,2CAA2C;AAC/F;AACA;AACA;AACA;AACA;AACA,aAAa,6BAA6B;AAC1C,aAAa,MAAM;AACnB,aAAa,OAAO;AACpB;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B;AAC7C;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA,IAAI,gEAAM;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;;AC1FD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC1C;AACH;AACD;AACS;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEkC;AACQ;;AAE1C;AACA;AACA,IAAI,mEAAmE;AACvE,IAAI,sEAAsE;AAC1E,IAAI,uEAAuE;AAC3E;AACA,IAAI,gGAAgG;AACpG,IAAI,wFAAwF;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,sBAAsB;AACpC;;AAEA;AACA;AACA,eAAe,gCAAgC;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA,4CAA4C,4BAA4B;AACxE;AACA;AACA,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,QAAQ,uEAAuE;AAC/E;AACA,GAAG;AACH;AACA;AACA;AACA,0CAA0C,6DAAY;AACtD;AACA;AACA,GAAG;AACH,CAAC,CAAC,yDAAQ;;;;;;;;;;;;;;ACrHV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEkC;AACO;AACyB;AAC7B;;AAErC;AACA;AACA,OAAO,iEAAiE;AACxE;AACA,UAAU,uFAAuF;AACjG,IAAI,wFAAwF;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,6BAA6B;AAC1C;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA,8CAA8C,kEAAQ;AACtD;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,MAAM,gIAAa;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,iEAAiE;AAC3F,QAAQ,qEAAqE;AAC7E,QAAQ,sEAAsE;AAC9E;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,6BAA6B,0DAAa;AAC1C;AACA;AACA,OAAO;;AAEP;AACA,qBAAqB,uFAAQ,yBAAyB,uFAAQ;AAC9D;AACA;;AAEA;AACA,qBAAqB,uFAAQ,0BAA0B,uFAAQ;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,yDAAQ,EAAE;AACZ;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AAC+B;AAC5C;AACA,oBAAoB,uFAAQ,0BAA0B,uFAAQ,yBAAyB,uFAAQ,uBAAuB,uFAAQ;AAC9H,C;;;;;;;;;;;;;AC1IA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEkD;;AAElD;AACA,IAAI;AACJ,QAAQ,2DAA2D;AACnE,+BAA+B,qFAAqF;AACpH,IAAI,+EAA+E;AACnF;AACA,+CAA+C,mCAAmC;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAM,gIAAa;AACnB;AACA,GAAG;AACH,CAAC,CAAC,iEAAgB;AAClB;AACA;AACA;AACA,kBAAkB,8DAA8D;AAChF;AACA,sBAAsB,8DAA8D;AACpF,IAAI,mCAAmC;AACvC;AACA;AACA;AACA,WAAW,sDAAsD;AACjE;AACA;AACA;AACA;AACA,kBAAkB,8DAA8D;AAChF;AACA,sBAAsB,8DAA8D;AACpF,IAAI,mCAAmC;AACvC;AACA;AACA;AACA,WAAW,sDAAsD;AACjE;;;;;;;;;;;;;;AC7GA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEkD;;AAElD;AACA;AACA;AACA,+CAA+C,mCAAmC;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,iEAAgB;AAClB;AACA;AACA;AACA;AACA;AACA,kBAAkB,8DAA8D;AAChF;AACA,sBAAsB,8DAA8D;AACpF,IAAI,mCAAmC;AACvC;AACA;AACA;AACA,WAAW,sDAAsD;AACjE;;;;;;;;;;;;;;ACnDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEkD;AACe;;AAEjE;AACA;AACA;AACA,+CAA+C,mCAAmC;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,8FAAO;AACxB;AACA,OAAO;AACP;AACA,GAAG;AACH,CAAC,CAAC,iEAAgB;AAClB;AACA;AACA;AACA,kBAAkB,0DAA0D;AAC5E;AACA,sBAAsB,0DAA0D;AAChF,IAAI,mCAAmC;AACvC;AACA;AACA;AACA,WAAW,qDAAqD;AAChE;AACA;AACA;AACA;AACA,kBAAkB,0DAA0D;AAC5E;AACA,sBAAsB,0DAA0D;AAChF,IAAI,mCAAmC;AACvC;AACA;AACA;AACA,WAAW,qDAAqD;AAChE;AACA;AACA,+BAA+B,yDAAyD;AACxF,IAAI,uDAAuD;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oCAAoC;AACzE;AACA;AACA,YAAY,OAAO;AACnB;;;;;;;;;;;;;;ACpFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACJ;AACM;AACR;AACpD;AACA;AACP;AACa;AACb;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEkC;AACO;AAC0B;AAC3B;;AAExC;AACA,+DAA+D,2DAA2D;AAC1H,iCAAiC,kDAAkD;AACnF;AACA,IAAI,kDAAkD;AACtD,IAAI,2DAA2D;AAC/D;AACA;AACA;AACA;AACA,IAAI,6EAA6E;AACjF;AACA,+CAA+C,mCAAmC;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,gDAAgD;AACzE;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,yBAAyB,6CAA6C;AACtE;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,2DAA2D;AACrF;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,MAAM,gIAAa;AACnB,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,MAAM,gIAAa;AACnB;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,MAAM,gIAAa;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,eAAe;AAC9B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6EAAoB;AAC7C;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,8BAA8B,yEAAgB;AAC9C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA,eAAe,sEAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,8BAA8B,2DAAa;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,0DAAQ;AACV;AACA;AACA;AACA;AACA,kBAAkB,oEAAoE;AACtF;AACA,sBAAsB,oEAAoE;AAC1F,IAAI,mCAAmC;AACvC;AACA;AACA;AACA,WAAW;AACX;AACA,iCAAiC,+DAA+D;AAChG,IAAI,mEAAmE;AACvE,WAAW,4CAA4C;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,cAAc,OAAO;AACrB,cAAc,6BAA6B;AAC3C,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,cAAc,OAAO;AACrB,cAAc,mCAAmC;AACjD,cAAc,qCAAqC;AACnD,cAAc,qCAAqC;AACnD;;;;;;;;;;;;;;ACxZA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACpG;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE6E;AACzB;;AAEpD;AACA;AACA,sCAAsC,2CAA2C;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,6BAA6B;AAC1C;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,yBAAyB,2CAA2C;AACpE;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA,MAAM,mCAAmC,YAAY;AACrD,yBAAyB,wBAAwB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,yDAAyD;AACjE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B,eAAe,OAAO;AACtB;AACA,GAAG;AACH,CAAC;AAC8B;AAC/B,yFAAG,WAAW,8FAAe,E;;;;;;;;;;;;;ACvG7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9C;AACD;AACP;AACiB;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEkC;AACgB;AACb;;AAErC;AACA;AACA;AACA,IAAI,oEAAoE;AACxE,IAAI,iEAAiE;AACrE;AACA;AACA,+CAA+C,mCAAmC;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA,QAAQ,0EAA0E;AAClF,mBAAmB,iEAAiE;AACpF;AACA;AACA,gBAAgB;AAChB;AACA;AACA,8CAA8C,kEAAgB;;AAE9D;AACA,8BAA8B,6DAA6D;AAC3F;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,gDAAgD;AACzE;AACA;AACA,gBAAgB,6CAA6C;AAC7D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA,8CAA8C,mEAAQ;AACtD;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,MAAM,gIAAa;AACnB;AACA;AACA;;AAEA;AACA,mCAAmC,gFAAgF;AACnH,oCAAoC,iEAAiE;AACrG,YAAY,qEAAqE;AACjF;AACA;AACA,eAAe,SAAS;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,yDAAQ;AACV;AACA;AACA;AACA;AACA,kBAAkB,sEAAsE;AACxF;AACA,sBAAsB,sEAAsE;AAC5F,IAAI,mCAAmC;AACvC;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,uDAAuD;AAClE,IAAI,qDAAqD;AACzD,WAAW,uCAAuC;AAClD,WAAW,UAAU;AACrB;AACA;AACA;AACA;AACA,kBAAkB,sEAAsE;AACxF;AACA,sBAAsB,sEAAsE;AAC5F,IAAI,mCAAmC;AACvC;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,uDAAuD;AAClE,IAAI,qDAAqD;AACzD,WAAW,uCAAuC;AAClD,WAAW,UAAU;AACrB;;;;;;;;;;;;;;ACrPA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwG;AACwB;AACtF;AACU;AACP;AACV;AACa;AACD;AACF;AACL;AACiB;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEqC;;AAErC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,+EAA+E;AACnH;AACA,WAAW,OAAO;AAClB,WAAW,6BAA6B;AACxC,WAAW,mCAAmC;AAC9C;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,QAAQ,6EAA6E;AACrF;AACA,WAAW,6BAA6B;AACxC,WAAW,mCAAmC;AAC9C;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI,6EAA6E;AACjF,IAAI,+EAA+E;AACnF;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA,WAAW,iDAAiD;AAC5D,WAAW,mCAAmC;AAC9C,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI,6EAA6E;AACjF,IAAI,+EAA+E;AACnF;AACA;AACA,WAAW,iDAAiD;AAC5D,WAAW,mCAAmC;AAC9C,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,6EAA6E;AACjF;AACA;AACA,WAAW,mCAAmC;AAC9C,aAAa;AACb;AACO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,sCAAsC;AACjD,WAAW,iDAAiD;AAC5D,aAAa,QAAQ;AACrB;AACA;AACA;AACA,kBAAkB,6IAA0B;AAC5C;AACA;AACA,uBAAuB,+BAA+B;AACtD,wBAAwB,iIAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iDAAiD;AAC5D,WAAW,mCAAmC;AAC9C,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,mCAAmC;AAC9C,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AC3QA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AAC1D;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEsC;AACkC;AACA;AACxB;;AAEhD;AAC+C;;AAE/C;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,MAAM;AACN,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,aAAa,kFAAkF;AAC/F,aAAa,OAAO;AACpB;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yDAAyD,yDAAyD;AAClH;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,mDAAmD,yDAAyD;AAC5G;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,QAAQ,yEAAyE;AACjF;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA,mCAAmC,gEAAe;AAClD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,qCAAqC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,0DAA0D;AAClE;AACA;AACA;AACA,kEAAkE,SAAS;AAC3E,kEAAkE,wBAAwB,GAAG,yBAAyB;AACtH,mDAAmD;AACnD;AACA,eAAe,SAAS,+BAA+B,oDAAoD;AAC3G;AACA,eAAe,OAAO,iDAAiD,+CAA+C;AACtH;AACA,iBAAiB,qCAAqC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,2BAA2B,2DAAU;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,MAAM;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA,kBAAkB,mCAAmC,KAAK;AAC1D;AACA;AACA,eAAe,qCAAqC;AACpD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC;AAClC,uCAAuC;AACvC;AACA,wCAAwC;AACxC,iCAAiC;AACjC,+BAA+B;AAC/B;AACA,QAAQ,4EAA4E;AACpF;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,qCAAqC;AACpD,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAqC;AACpD,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAqC;AACpD,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,qCAAqC;AACpD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mBAAmB,mGAAa;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,0DAA0D;AAC5E;AACA,eAAe,OAAO,iDAAiD;AACvE,eAAe,+BAA+B;AAC9C,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,iBAAiB,2DAAU;AAC3B;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,oDAAoD;AAChE;AACA;AACA,UAAU,6CAA6C;AACvD;AACA;AACA;AACA,UAAU,yDAAyD;AACnE,UAAU,wDAAwD;AAClE;AACA;AACA,eAAe,kEAAkE;AACjF,eAAe,8BAA8B;AAC7C,6BAA6B,6CAA6C;AAC1E;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,oBAAoB,2FAAa;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,6BAA6B;AAC5C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD;AACA,kBAAkB,2FAAa;AAC/B;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,6BAA6B;AAC5C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD;AACA,kBAAkB,2FAAa;AAC/B;AACA,SAAS;AACT;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;;;;;;;;;;;;;;ACpcA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AAChB;AACZ;AACM;AACN;AACrD;AACL;AACM;AACD;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEkC;AACI;;AAEtC;AACA,wEAAwE,qDAAqD;AAC7H;AACA;AACA;AACA,MAAM;AACN,MAAM;AACN,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,6CAA6C,2CAA2C;AACxF;AACA,aAAa,qCAAqC;AAClD,aAAa,qCAAqC;AAClD;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,8CAA8C;AACtE,+DAA+D,qDAAqD;AACpH,iBAAiB,oDAAoD;AACrE;AACA,yBAAyB,0DAA0D;AACnF;AACA;AACA;AACA,eAAe;AACf;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA,IAAI,+HAAY;AAChB,aAAa,+HAAY;AACzB;AACA;AACA,8BAA8B,qIAAkB,KAAK,4DAAU;AAC/D;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,uDAAuD,iDAAiD;AACxG,QAAQ,6CAA6C,2BAA2B,yDAAyD;AACzI;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,IAAI;AAC7B,sBAAsB,IAAI;AAC1B;AACA;AACA;AACA,6BAA6B,2DAA2D;AACxF,6BAA6B,2DAA2D;AACxF,gCAAgC,6CAA6C;AAC7E;AACA,iBAAiB,+BAA+B;AAChD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,gBAAgB,0DAAQ;AACxB;AACA;AACA,cAAc,0DAAQ;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,IAAI;AAC9D,6DAA6D,IAAI;AACjE;AACA;AACA;AACA,6BAA6B,2DAA2D;AACxF,6BAA6B,2DAA2D;AACxF,gCAAgC,6CAA6C;AAC7E;AACA,iBAAiB,+BAA+B;AAChD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,oBAAoB,0DAAQ;AAC5B;AACA;AACA,kBAAkB,0DAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,+BAA+B;AAC9C,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,iDAAiD,oDAAoD;AACrG;AACA,eAAe,qCAAqC;AACpD,iBAAiB,QAAQ,kBAAkB,oDAAoD;AAC/F;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,iDAAiD,2CAA2C;AAC5F;AACA,eAAe,+BAA+B;AAC9C,eAAe,QAAQ;AACvB;AACA;AACA,iBAAiB,QAAQ,kBAAkB,2CAA2C;AACtF;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,2CAA2C;AAClF,QAAQ,2CAA2C;AACnD,iDAAiD,4CAA4C;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sGAAsG;AACtG;AACA;AACA;AACA,sGAAsG;AACtG;AACA;AACA;AACA,eAAe,+BAA+B;AAC9C,iBAAiB,uCAAuC;AACxD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA,wCAAwC,2CAA2C,YAAY,2CAA2C;AAC1I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG;AACvG,0GAA0G;AAC1G,8DAA8D;AAC9D;AACA,wGAAwG;AACxG,0DAA0D;AAC1D;AACA,eAAe,+BAA+B;AAC9C,iBAAiB,oCAAoC;AACrD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAkB,0DAA0D;AAC5E;AACA,eAAe,OAAO,iDAAiD,+CAA+C;AACtH,eAAe,qCAAqC;AACpD,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,iBAAiB,4DAAU;AAC3B;;AAEA;AACA,kBAAkB,mCAAmC,KAAK;AAC1D;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,mDAAmD,8CAA8C;AACjG;AACA;AACA,yBAAyB,+CAA+C;AACxE,+CAA+C,yCAAyC;AACxF,YAAY,oDAAoD;AAChE;AACA,oEAAoE,+CAA+C;AACnH;AACA;AACA,eAAe,OAAO,iDAAiD,+CAA+C;AACtH,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,0BAA0B,+HAAY;AACtC;AACA,eAAe,+HAAY;AAC3B;AACA;AACA;AACA;AACA,+BAA+B,4DAAU;AACzC,0BAA0B,6IAA0B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA,mDAAmD,qDAAqD;AACxG;AACA;AACA,yBAAyB,+CAA+C;AACxE,QAAQ,qDAAqD,OAAO,oDAAoD;AACxH;AACA,oEAAoE,+CAA+C;AACnH;AACA;AACA,eAAe,OAAO,iDAAiD,+CAA+C;AACtH,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,0BAA0B,+HAAY;AACtC;AACA,eAAe,+HAAY;AAC3B;AACA;AACA;AACA,+BAA+B,4DAAU;AACzC;AACA;AACA;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA,4BAA4B;AAC5B,iCAAiC;AACjC;AACA,kCAAkC;AAClC,8BAA8B;AAC9B,gCAAgC;AAChC;AACA,QAAQ,4EAA4E;AACpF;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,+BAA+B;AAC9C,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,kFAAkF;AACjG;AACA,eAAe,OAAO;AACtB,eAAe,kFAAkF;AACjG;AACA,eAAe,OAAO;AACtB,iBAAiB,+BAA+B;AAChD;AACA,GAAG;AACH;AACA;AACA,0BAA0B,0DAAQ,iCAAiC,0DAAQ;AAC3E;;AAEA;AACA,sDAAsD,oDAAoD;AAC1G;AACA;AACA;AACA,eAAe,qCAAqC;AACpD,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,iDAAiD;AACnF;AACA;AACA;AACA,eAAe,mCAAmC;AAClD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,iDAAiD,6CAA6C;AAC9F;AACA;AACA,eAAe,6BAA6B;AAC5C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,8CAA8C,0DAAQ;AACtD;AACA,GAAG;AACH,CAAC,GAAG;AACwB;AAC5B;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AClmBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACxD;AACF;AACA;AACD;AACC;AACE;AACC;AACO;AACR;AACI;AACb;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACF;AACY;AACzD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAE8B;AACQ;AAC2D;AAC7C;AACE;AACY;AACJ;AACc;AACJ;AACV;AACA;AACA;AACV;;AAEpD;AACA;AACA,QAAQ,2FAA2F;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mDAAmD;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,6CAA6C;AAC1D,aAAa,uDAAuD;AACpE;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,oDAAoD,yBAAyB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uCAAuC;AACpD,aAAa,6BAA6B;AAC1C;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oBAAoB,4FAAa;AACjC;AACA;AACA;;AAEA;AACA,sCAAsC,wBAAwB,GAAG,sBAAsB,MAAM,mBAAmB;AAChH;AACA;AACA;AACA;AACA;AACA,8BAA8B,wCAAwC;AACtE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,aAAa,yEAAgB;AAC7B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,6BAA6B;AAC5C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,iGAAM;AACpB;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,6BAA6B;AAC5C,eAAe,KAAK;AACpB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,+DAA+D;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,eAAe,0DAAY;AAC3B,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB,4BAA4B;AAC5B;AACA;AACA,sBAAsB,iGAAM,qBAAqB,yEAAgB;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA,WAAW,yEAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA,UAAU,uEAAc;AACxB;AACA,OAAO;AACP,uDAAuD,qEAAoB;AAC3E;AACA;AACA;;AAEA;AACA,6BAA6B,uCAAuC;AACpE;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAQ,yBAAyB,sDAAQ;AACzE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,6BAA6B;AAC5C,eAAe,OAAO;AACtB,eAAe,qCAAqC;AACpD;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8DAAa;AACpC;AACA;AACA,sBAAsB,+FAAQ;AAC9B,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,mCAAmC;AAClD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,mCAAmC;AAClD,eAAe,OAAO;AACtB,eAAe,qCAAqC;AACpD;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA,YAAY,mGAAQ;AACpB;AACA,WAAW;AACX;AACA,YAAY,iGAAM;AAClB,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,sBAAsB;AACrC,eAAe,sBAAsB;AACrC,iBAAiB,eAAe,mCAAmC,6BAA6B;AAChG;AACA,GAAG;AACH;AACA;AACA;AACA,aAAa,2FAAI;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,eAAe,iDAAiD,6BAA6B;AAC5G,eAAe,sBAAsB;AACrC,eAAe,aAAa;AAC5B,iBAAiB,eAAe;AAChC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA,2CAA2C,2FAAI;AAC/C;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,+BAA+B,2FAAI;AACnC;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,6BAA6B;AAC5C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,0BAA0B,6IAA0B;AACpD;AACA;AACA,+BAA+B,mCAAmC;AAClE;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU,kFAAG;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,mCAAmC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AAC8B;AAC/B,0FAAG,WAAW,8FAAe;;AAE7B;AACA;AACA;AACA,WAAW,mCAAmC;AAC9C,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,qBAAqB;AAChC,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACA;AACA;AACA,MAAM,iGAAM;AACZ,2BAA2B,8DAAa;AACxC;AACA,GAAG;AACH,gDAAgD,8DAAa;AAC7D;AACA;AACA,KAAK;AACL,MAAM,mGAAQ;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa;AACb;AACA,SAAS,iGAAM,WAAW,iGAAM,YAAY,iGAAM,YAAY,iGAAM;AACpE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO,yCAAyC,mEAAmE;AAC9H,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iGAAM,oBAAoB,iGAAM;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,C;;;;;;;;;;;;;AC5nCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AACxD;AACY;AACL;AACG;AACL;AACG;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEgD;AAChD;;AAEA;AACA,4EAA4E,4DAA4D;AACxI,0EAA0E;AAC1E,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA,iCAAiC,2CAA2C;AAC5E;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAsD;AACtD,kDAAkD;AAClD,0CAA0C;AAC1C,uCAAuC;AACvC,2DAA2D;AAC3D,uDAAuD;AACvD,+CAA+C;AAC/C,4CAA4C;AAC5C;AACA,gDAAgD;AAChD,mDAAmD;AACnD;AACA;AACA,MAAM,2EAA2E;AACjF;AACA,sCAAsC;AACtC,6DAA6D;AAC7D,uBAAuB;AACvB;AACA,MAAM,4EAA4E;AAClF;AACA,aAAa,OAAO;AACpB;AACA,aAAa,OAAO;AACpB,eAAe;AACf;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA,2CAA2C,gIAAa;AACxD,OAAO;AACP,gEAAgE,gIAAa;AAC7E;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,iEAAe;;;;;;;;;;;;;;ACrHjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoG;AAC4B;AACtB;AACN;AAC1D;AACA;AACK;AACF;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwE;AAC5C;AACM;AACkB;AACkB;AAC5C;AACM;AACwB;AACU;AACd;;AAEpD;AACA;AACA,aAAa,6DAA6D;AAC1E;AACA;AACA;AACA,MAAM,4EAA4E;AAClF,MAAM,oGAAoG;AAC1G;AACA,+BAA+B,4CAA4C;AAC3E,QAAQ,uEAAuE;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,4EAA4E;AACpF,QAAQ,oGAAoG;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iDAAiD;AACrF;AACA;AACA;AACA,gCAAgC,wCAAwC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,iBAAiB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,2BAA2B;AACnF;AACA,aAAa,wCAAwC;AACrD,aAAa,wCAAwC;AACrD,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,mBAAmB;AAC3B;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,aAAa,WAAW,cAAc;AACpE;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,QAAQ,yEAAyE;AACjF;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB;AACA,aAAa,+HAAY;AACzB;AACA;AACA,wBAAwB,6IAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,QAAQ,iDAAiD,WAAW,8DAA8D;AAClI;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,qFAAqF;AACrF,iBAAiB,4DAA4D;AAC7E;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,8DAA8D;AACtE;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,4DAA4D;AACpE;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,8FAA8F;AAC7G;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,wDAAwD;AAC1F;AACA;AACA,eAAe,8FAA8F;AAC7G;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,yBAAyB,4FAAK;AAC9B,yBAAyB,4FAAK;;AAE9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,sCAAsC,iDAAiD;AACvF;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,yDAAO;AAC9C;;AAEA;AACA;AACA,QAAQ,yDAAyD;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iDAAiD;AACnF;AACA;AACA;AACA;AACA,8BAA8B,wCAAwC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,2BAA2B;AAC5D;AACA;AACA,eAAe,wCAAwC;AACvD,eAAe,wCAAwC;AACvD,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO,mEAAmE,mEAAiB;AAC3F;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO,gCAAgC,sDAAK;AAC5C;AACA;AACA,OAAO,gCAAgC,0DAAQ;AAC/C,6BAA6B,sDAAK;AAClC;AACA,OAAO,gCAAgC,sDAAI;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2FAAa;AACjC,SAAS;AACT,kBAAkB,sDAAK;AACvB,SAAS;AACT,kBAAkB,sDAAK;AACvB,SAAS;AACT,sBAAsB,sDAAK,CAAC,0DAAQ;AACpC;AACA;AACA;AACA,OAAO,UAAU,iGAAU;AAC3B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,kBAAkB,2FAAa;AAC/B;AACA;AACA;;AAEA;AACA,cAAc,aAAa;AAC3B;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,eAAe,kEAAkE;AACjF,eAAe,8BAA8B;AAC7C,6BAA6B,6CAA6C;AAC1E;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2FAAa;AAC/B;AACA,qBAAqB,0DAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,sDAAK;AAChC,OAAO;AACP,2BAA2B,sDAAK;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC;AACpC,yCAAyC;AACzC;AACA,0CAA0C;AAC1C,kCAAkC;AAClC,gCAAgC;AAChC;AACA,QAAQ,4EAA4E;AACpF;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,gEAAgE,qBAAqB,MAAM,mBAAmB;AAC9G;AACA;AACA;AACA,eAAe,0CAA0C;AACzD,eAAe,QAAQ;AACvB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,iDAAiD,KAAK;AAC9D,gBAAgB,6CAA6C,KAAK,iDAAiD;AACnH,gCAAgC,qBAAqB,MAAM,mBAAmB;AAC9E;AACA,eAAe,6DAA6D;AAC5E;AACA;AACA;AACA;AACA,eAAe,+BAA+B;AAC9C,eAAe,QAAQ;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA,6BAA6B,sDAAK;AAClC;AACA,wEAAwE,qCAAqC;AAC7G;AACA;AACA;AACA,kBAAkB,2FAAa;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,6DAA6D;AAC5E;AACA;AACA;AACA,eAAe,+BAA+B;AAC9C;AACA,GAAG;AACH;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+BAA+B;AACtD,uBAAuB,+BAA+B;AACtD;AACA,sBAAsB,2FAAa;AACnC;AACA;AACA,aAAa;AACb;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,4BAA4B,sDAAK;AACjC;;AAEA;AACA,4DAA4D,+BAA+B;AAC3F;AACA;AACA;AACA,GAAG;AACH,CAAC;AAC+B;AAChC,0FAAG,YAAY,2FAAY;;AAE3B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,G;;;;;;;;;;;;;ACj2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE0B;;AAE1B;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA,mCAAmC,kEAAkE;AACrG;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB;AACxB,wBAAwB;AACxB,6BAA6B;AAC7B,6BAA6B;AAC7B;AACA,8BAA8B;AAC9B,2BAA2B;AAC3B,yBAAyB;AACzB;AACA,MAAM,4EAA4E;AAClF;AACA,aAAa,OAAO;AACpB,eAAe;AACf;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA,sDAAsD,gIAAa;AACnE;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,gCAAgC;AAChC;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,kEAAkE;AAClG;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,6BAA6B;AAC5C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,6BAA6B;AAC9C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,qDAAI;;;;;;;;;;;;;;ACnJN;AAAA;AAAA;AAAA;AAA0G;AACN;AACpG;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwE;;AAExE;AACA,4CAA4C,mCAAmC;AAC/E,IAAI,+CAA+C,sBAAsB,mCAAmC;AAC5G;AACA,sCAAsC,wCAAwC;AAC9E;AACA;AACA;AACA,QAAQ,uDAAuD;AAC/D;AACA;AACA;AACA,iGAAiG,mCAAmC;AACpI;AACA,uEAAuE,mCAAmC;AAC1G,2BAA2B,yCAAyC;AACpE;AACA,yCAAyC,gEAAgE;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,6BAA6B;AAC1C,aAAa,OAAO,yBAAyB;AAC7C;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA,yBAAyB,mCAAmC;AAC5D;AACA;AACA,gBAAgB,6BAA6B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2FAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2FAAa;AAC7B;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA,sFAAsF;AACtF;AACA;AACA,wEAAwE;AACxE,SAAS,uEAAuE;AAChF;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,QAAQ,yDAAyD;AACjE,QAAQ,6EAA6E;AACrF;AACA;AACA,cAAc;AACd;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC;AACpC,yCAAyC;AACzC;AACA,0CAA0C;AAC1C,kCAAkC;AAClC,gCAAgC;AAChC;AACA,QAAQ,4EAA4E;AACpF;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ,iDAAiD,UAAU;AAClF,eAAe,QAAQ;AACvB;AACA,iBAAiB,MAAM;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;;ACvMD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACrD;AACC;AACD;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEgC;AACN;AACU;AACF;AACsC;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,+BAA+B;AAC5C,aAAa,qCAAqC;AAClD,aAAa,qBAAqB;AAClC,aAAa,QAAQ;AACrB,MAAM,mCAAmC,4BAA4B,mCAAmC;AACxG,MAAM,6CAA6C;AACnD,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;AACA,WAAW,yCAAyC;AACpD;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4FAAa;AAC7B;AACA;AACA,gBAAgB,4FAAa;AAC7B;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,wCAAwC,aAAa;AACrD;AACA;AACA;AACA;AACA,gBAAgB,+BAA+B;AAC/C;AACA;;AAEA;AACA,qFAAqF,iBAAiB;AACtG;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA,sBAAsB,yDAAQ;AAC9B,KAAK;AACL,sBAAsB,yDAAQ;AAC9B;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;;AAEA;AACA,oDAAoD,mCAAmC;AACvF,QAAQ,mCAAmC,mBAAmB,6CAA6C;AAC3G;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA,yDAAyD,yCAAyC;AAClG;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B;AAC7C;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA,cAAc,gBAAgB,SAAS,iBAAiB;AACxD;AACA;AACA;AACA,sDAAsD,SAAS;AAC/D,sCAAsC,uCAAuC;AAC7E,uCAAuC;AACvC;AACA,eAAe,SAAS,+BAA+B,oDAAoD;AAC3G;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,8CAA8C;AAC/D;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,gDAAgD,gBAAgB;AAChE;AACA;AACA,iBAAiB;AACjB,iBAAiB,QAAQ;AACzB,iBAAiB,8CAA8C;AAC/D;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,4BAA4B,qDAAI;AAChC;AACA;AACA,0BAA0B,yDAAQ;AAClC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,0BAA0B,wDAAO;AACjC;AACA,yBAAyB,yDAAQ;AACjC,SAAS;AACT;AACA;AACA;AACA;AACA,OAAO,0BAA0B,qDAAI;AACrC;AACA,yBAAyB,yDAAQ;AACjC;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,0DAAS;AAChC,uBAAuB,yDAAQ;AAC/B,WAAW;AACX,uBAAuB,0DAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,4BAA4B,0DAAS;AACrC;AACA;AACA;AACA,OAAO;AACP;AACA,mBAAmB,yDAAQ;AAC3B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA,iDAAiD,gBAAgB;AACjE;AACA;AACA,iBAAiB;AACjB,iBAAiB,QAAQ;AACzB,iBAAiB,8CAA8C;AAC/D;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,eAAe,mCAAmC;AAClD,4BAA4B,qDAAI;AAChC;AACA;AACA,0BAA0B,yDAAQ;AAClC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,0BAA0B,wDAAO;AACjC;AACA,yBAAyB,yDAAQ;AACjC;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,OAAO,0BAA0B,qDAAI;AACrC;AACA,yBAAyB,yDAAQ;AACjC;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,0DAAS;AAChC;AACA,uBAAuB,yDAAQ;AAC/B,WAAW;AACX,uBAAuB,0DAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,4BAA4B,0DAAS;AACrC;AACA;AACA,OAAO;AACP;AACA,mBAAmB,yDAAQ;AAC3B;AACA;AACA;AACA;;AAEA;AACA,wGAAwG,mCAAmC;AAC3I;AACA;AACA,eAAe,kDAAkD;AACjE,eAAe,6BAA6B;AAC5C,eAAe,qCAAqC;AACpD,eAAe,qCAAqC;AACpD,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,0DAAS;AACnC;AACA;AACA;AACA,2BAA2B,yDAAQ;AACnC;AACA;AACA,WAAW;AACX,+BAA+B,yDAAQ;AACvC;AACA;;AAEA;AACA;AACA;AACA,2BAA2B,yDAAQ;AACnC;AACA;AACA,WAAW;AACX,+BAA+B,yDAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA,6BAA6B,+CAA+C;AAC5E;AACA;AACA,QAAQ,mCAAmC;AAC3C;AACA,aAAa,OAAO;AACpB;AACA;AACA,uBAAuB,+CAA+C;AACtE;AACA,aAAa,OAAO;AACpB,cAAc,kDAAkD;AAChE,cAAc,6BAA6B;AAC3C;AACA,cAAc,qCAAqC;AACnD;AACA;AACA;AACA;AACA,+DAA+D,mCAAmC;AAClG;AACA,cAAc,qCAAqC;AACnD;AACA;AACA;AACA;AACA,+DAA+D,mCAAmC;AAClG;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA,aAAa,qBAAqB;AAClC;;;;;;;;;;;;;;ACleA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACJ;AACM;AACR;AACpD;AACG;AACF;AACI;AACD;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEgC;AACwC;AAC9C;AACwC;;AAElE;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,0GAA0G;AAC9G;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAA0D;AAC1E,kBAAkB,8EAA8E;AAChG;AACA;AACA,IAAI,0GAA0G;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,6DAA6D;AAC1E;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,gBAAgB;AAC7B;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,iBAAiB,KAAK;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC;AAClC,gCAAgC;AAChC,6BAA6B;AAC7B,uCAAuC;AACvC,qCAAqC;AACrC,kCAAkC;AAClC;AACA,sCAAsC;AACtC,yCAAyC;AACzC;AACA;AACA,MAAM,uDAAuD;AAC7D;AACA,6BAA6B;AAC7B,0CAA0C;AAC1C,wBAAwB;AACxB;AACA,MAAM,4EAA4E;AAClF;AACA,aAAa,OAAO;AACpB;AACA,aAAa,OAAO;AACpB,eAAe;AACf;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA,yCAAyC,gIAAa;AACtD,OAAO;AACP,8DAA8D,gIAAa;AAC3E;AACA;;AAEA;AACA,kBAAkB,sDAAsD;AACxE,eAAe,6DAA6D;AAC5E;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,qCAAqC,sDAAI;AACzC;AACA,mCAAmC,6CAA6C;AAChF;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;;AAEA;AACA,qBAAqB,6CAA6C;AAClE,QAAQ,mDAAmD;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,yDAAO;AACT;AACA,2DAA2D,oDAAoD;AAC/G;AACA,2BAA2B,gFAAgF;AAC3G;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACgC;AACzB;AACP;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,wFAAQ;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AC9PA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwG;AACwB;AACtB;AACN;AAC1D;AACG;AACO;AACH;AACd;AACa;AACD;AACP;AACiB;AACA;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEkC;AACY;AACZ;AACQ;AACR;AACN;AACQ;AACuB;AACV;AACoB;AACR;AACR;AACY;AACZ;AACuB;AACxB;AACkC;AAChC;AACN;AACwB;AACpB;;AAEpD;AACA;AACA;AACA;AACA;AACA,0CAA0C,0CAA0C;AACpF,IAAI,uDAAuD;AAC3D;AACA;AACA;AACA,KAAK;AACL;AACA,kCAAkC,8DAA8D;AAChG,kCAAkC,oDAAoD;AACtF;AACA;AACA,MAAM,oEAAoE;AAC1E,MAAM,sEAAsE;AAC5E,MAAM,8DAA8D;AACpE,MAAM,0DAA0D;AAChE,MAAM,8EAA8E;AACpF,MAAM,0EAA0E;AAChF;AACA,oBAAoB,qFAAqF;AACzG;AACA;AACA,8DAA8D,gEAAgE;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA,wBAAwB,2CAA2C;AACnE;AACA;AACA,cAAc;AACd;AACA,wBAAwB,0DAAQ;;AAEhC;AACA,wBAAwB,gEAAgE;AACxF,QAAQ;AACR,YAAY,8DAA8D;AAC1E;AACA;AACA,cAAc;AACd;AACA,4BAA4B,8DAAY;;AAExC;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,gCAAgC,mBAAmB,MAAM,cAAc;AACvE;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA,wBAAwB,oDAAoD;AAC5E;AACA;AACA,cAAc;AACd;AACA,yBAAyB,0DAAQ;AACjC;;AAEA;AACA;AACA,WAAW,0DAA0D;AACrE,+BAA+B,iDAAiD;AAChF;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,0BAA0B,8DAA8D;AACxF;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,8BAA8B,2BAA2B;AACzD;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,gCAAgC,mBAAmB,MAAM,cAAc;AACvE;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,2EAA2E,yBAAyB;AACpG;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,wCAAwC,4BAA4B;AACpE;AACA;AACA,cAAc;AACd;AACA,uBAAuB,gEAAc;;AAErC;AACA,qBAAqB,2EAAgB;AACrC,qBAAqB,4EAAiB;AACtC,qBAAqB,wEAAa;AAClC,qBAAqB,sEAAW;AAChC,qBAAqB,gFAAqB;AAC1C,qBAAqB,8EAAmB;AACxC,QAAQ,kFAAG;AACX,uBAAuB,wEAAa;AACpC;;AAEA;AACA,IAAI,6EAAoB;AACxB,IAAI,mFAAuB;;AAE3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,WAAW,mEAAmE;AAC9E;AACA;AACA;AACA;AACA;AACA,oBAAoB,uCAAuC;AAC3D;AACA,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,yBAAyB;AAC7F;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,QAAQ,uCAAuC;AAC/C;AACA,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,+DAA+D,mEAAmE;AAClI,YAAY,qEAAqE;AACjF,QAAQ,0BAA0B;AAClC;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,kDAAkD,oDAAoD;AACtG,iBAAiB,8CAA8C;AAC/D;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D,6BAA6B,iIAAc;AAC3C;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,wDAAwD;AACzE;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,sCAAsC,gBAAgB;AACtD;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,QAAQ,oHAA0B;AAClC;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA,+CAA+C;AAC/C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,QAAQ,8DAA8D;AACtE;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,cAAc,KAAK,mBAAmB;AAC5D,sBAAsB,cAAc,KAAK,mBAAmB;AAC5D,cAAc,iFAAiF;AAC/F;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,QAAQ,4FAAa;AACrB;AACA;;AAEA;AACA,yBAAyB,yDAAyD;AAClF,8DAA8D,4BAA4B;AAC1F;AACA,wGAAwG;AACxG;AACA;AACA,eAAe,6DAA6D;AAC5E;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,gCAAgC;AAChC;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,oDAAoD;AAChE;AACA;AACA,UAAU,6CAA6C;AACvD;AACA;AACA;AACA,UAAU,4BAA4B;AACtC,UAAU,2BAA2B;AACrC;AACA,eAAe,mEAAmE;AAClF,eAAe,8BAA8B;AAC7C,6BAA6B,6CAA6C;AAC1E;AACA,GAAG;AACH;AACA;AACA,aAAa,0DAAQ;AACrB;;AAEA;AACA;AACA;AACA,eAAe,6BAA6B;AAC5C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,aAAa,0DAAQ;AACrB;;AAEA;AACA;AACA;AACA,eAAe,6BAA6B;AAC5C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,aAAa,0DAAQ;AACrB;;AAEA;AACA;AACA;AACA,uDAAuD,2CAA2C;AAClG;AACA,eAAe,qCAAqC;AACpD,eAAe,qCAAqC;AACpD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,iBAAiB,uDAAK;AACtB;;AAEA;AACA,iDAAiD,6CAA6C;AAC9F;AACA,eAAe,6BAA6B;AAC5C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,aAAa,uDAAK;AAClB;;AAEA;AACA,kCAAkC,iDAAiD;AACnF;AACA;AACA,eAAe,mCAAmC;AAClD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,aAAa,uDAAK;AAClB;;AAEA;AACA,kBAAkB,6CAA6C;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,iDAAiD;AACvF;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,iBAAiB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,2BAA2B;AACnF;AACA,eAAe,wCAAwC;AACvD,eAAe,wCAAwC;AACvD,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,iBAAiB,2DAAS;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,uDAAuD;AACrF,QAAQ,yEAAyE;AACjF;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ,yEAAyE;AACjF;AACA;AACA;AACA,GAAG;AACH,CAAC;AAC0B;AAC3B,0FAAG,OAAO,8FAAe,E;;;;;;;;;;;ACzxBzB;;AAEA;AACA,cAAc,mBAAO,CAAC,iWAA8K;AACpM;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,gHAAmD;AACrE,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;;;ACXf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AACf;AACE;;AAE5C;AACA;AACA;AACA,iBAAiB,yCAAyC;AAC1D;AACA,oDAAoD,8BAA8B;AAClF;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA,uBAAuB,8DAAa;AACpC,uCAAuC,6DAAY;AACnD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;AC/DR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AACnD;AACC;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2D;AACR;;AAEnD;AACA,qCAAqC,6CAA6C;AAClF;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,GAAG;AACH,CAAC,CAAC,oFAAO,EAAE;AACX;AACA,WAAW,0BAA0B;AACrC,WAAW,kCAAkC;AAC7C,WAAW,gGAAgG;AAC3G;AACA,WAAW,kCAAkC;AACV;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,+EAAwB;AACnD;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;ACrGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE6E;AACQ;AACnB;;AAElE;AACA,kCAAkC,uDAAuD;AACzF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;AACA;AACA,6CAA6C,uFAAQ;AACrD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT,8BAA8B,yGAAY;AAC1C;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA,GAAG;AACH,CAAC,CAAC,qGAAQ;AACV;AACA;AACA;AACA,qCAAqC;AACrC,+BAA+B,6CAA6C;AAC5E,IAAI,4DAA4D;AAChE;AACA;AACA,WAAW,sDAAsD;AACjE,WAAW,QAAQ;AACnB;;;;;;;;;;;;;;ACtEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoD;AACR;AACa;;AAEzD;AACA;AACA;AACA,iBAAiB,+BAA+B;AAChD;AACA,oDAAoD,8BAA8B;AAClF;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,uBAAuB,8DAAa;AACpC,4CAA4C,kEAAiB;AAC7D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;ACnFR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AACjD;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2D;AACR;;AAEnD;AACA,0CAA0C,4DAA4D;AACtG;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,oFAAO,EAAE;AACX;AACA,WAAW,kCAAkC;AAC7C,WAAW,gGAAgG;AACnE;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,0BAA0B;AACrC,WAAW,kCAAkC;AAC7C,WAAW,gGAAgG;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,+EAAwB;AACnD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oCAAoC;AAC/C,WAAW,4BAA4B;AACvC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;ACtJA;AAAA;AAAA;AAAoG;AAC4B;AAChI,2BAA2B,+HAAY;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI,oEAAoE;AACxE;AACA,WAAW,kCAAkC;AAC7C,WAAW,aAAa;AACxB,aAAa;AACb;AACO;AACP;AACA,SAAS,+HAAY;AACrB;AACA;AACA,oBAAoB,6IAA0B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,C;;;;;;;;;;;;;AC5DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AACW;AACZ;AACU;AACP;AACN;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,2CAA2C;AACjD,MAAM,+BAA+B;AACrC,MAAM,yCAAyC;AAC/C,MAAM,kCAAkC;AACxC,MAAM,4BAA4B;AAClC;AACA,wEAAwE,2CAA2C;AACnH;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2FAAS,EAAE,mFAAK,EAAE,wFAAU,EAAE,qFAAM,EAAE,iFAAI;AACxD;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;AC9DR;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sCAAsC;AACjD,WAAW,OAAO;AAClB,aAAa,gCAAgC;AAC7C;AACe;AACf;AACA;;AAEA;AACA;AACA;AACA,WAAW,sCAAsC;AACjD,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,sCAAsC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;ACxCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AACjB;AACV;;AAE9B;AACA;AACA;AACA,2CAA2C;AAC3C,QAAQ,gDAAgD;AACxD;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,4DAAW,EAAE,uDAAM;AACjC;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;AACR;AACA,6BAA6B,4BAA4B;AACzD;AACA,iBAAiB,kCAAkC;AACnD;AACA,YAAY,4BAA4B;AACxC;AACA;AACA,6BAA6B,yCAAyC;AACtE;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ,sEAAsE;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA,IAAI,4DAA4D;AAChE,IAAI,sEAAsE;AAC1E;AACA;AACA,gCAAgC;AAChC,OAAO,4DAA4D;AACnE;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA,MAAM,kEAAkE,QAAQ;AAChF;AACA,MAAM,4DAA4D,QAAQ;AAC1E;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,gEAAgE;AAChE,QAAQ,4DAA4D;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,iBAAiB,0EAA0E;AAC3F;AACA,YAAY,0DAA0D;AACtE;AACA;AACA,4CAA4C;AAC5C,OAAO,sEAAsE;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,0EAA0E;AAC5F;AACA,YAAY,qBAAqB;AACjC;AACA;AACA,2BAA2B,4DAA4D;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,aAAa,OAAO;AACpB,cAAc,YAAY;AAC1B,cAAc,SAAS;AACvB,cAAc,OAAO;AACrB,IAAI,2EAA2E;AAC/E,iCAAiC,6DAA6D;AAC9F;AACA;AACA,uBAAuB,4DAA4D;AACnF,uBAAuB,wCAAwC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,cAAc,SAAS;AACvB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,IAAI,2EAA2E;AAC/E,iCAAiC,6DAA6D;AAC9F;;;;;;;;;;;;;;AChOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACJ;AACF;AACpD;AACM;AAChD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2D;AACf;AACY;AACU;;AAElE;AACA,wCAAwC,yCAAyC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,iBAAiB;AAC/B;;AAEA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA,wBAAwB;AACxB,6BAA6B,qEAAqE;AAClG;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,iCAAiC,yFAAU;AAC3C;AACA;;AAEA;AACA,gCAAgC,wBAAwB;AACxD;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8CAA8C;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oFAAoF;AAC5F,QAAQ,+DAA+D;AACvE;AACA,2EAA2E,2DAA2D;AACtI;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,gFAAgF;AAClG;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO,uBAAuB;AAC7C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA4B,sEAAa;AACzC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2FAAK;AAClC;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,oFAAO;;;;;;;;;;;;;;AC9PT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACJ;AACF;AAClD;AACQ;AACL;AACE;AACD;AACL;AACA;AACR;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACU;AACA;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AACjB;AACI;AAC4D;AAC1C;AACR;AACqD;AAC/D;AACjB;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,cAAc,iEAAiB;AAC/B,OAAO;AACP;AACA;AACA;AACA,iBAAiB,yEAAiB,CAAC,qEAAa;AAChD;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA,sCAAsC,6DAAW;AACjD,wCAAwC,+DAAa;AACrD,2BAA2B,8EAAsB,WAAW,2EAAmB;AAC/E;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA,MAAM,yHAA2B;AACjC;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA,yCAAyC;AACzC,wBAAwB;AACxB;AACA,QAAQ,0DAA0D;AAClE;AACA;AACA,QAAQ,kGAAkG;AAC1G;AACA;AACA,eAAe,0DAA0D;AACzE;AACA,GAAG;AACH;AACA;AACA;AACA,oCAAoC,2EAAmB;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yCAAyC,uEAAuE;AAChH,6BAA6B,wCAAwC;AACrE,QAAQ,2DAA2D;AACnE;AACA,0BAA0B;AAC1B,4DAA4D;AAC5D;AACA;AACA;AACA,eAAe,uDAAuD;AACtE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA,iCAAiC,uEAAe;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qEAAqE;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uEAAa;AACxC;;AAEA;AACA;AACA,0BAA0B,6IAA0B;AACpD;AACA;AACA,+BAA+B,+BAA+B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,6BAA6B,6IAA0B;AACvD;AACA;AACA,kCAAkC,iCAAiC;AACnE;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,oFAAM;;;;;;;;;;;;;;AC7TR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AACpD;AACU;AACP;AACG;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACyD;AAC8B;AAC/C;AACmD;AACD;AACpB;AACzB;AACM;AACJ;AAC/C;AACA;AACA;AACA;AACA;AACA,IAAI,4FAA4F;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kIAAe;AACvB,eAAe,6HAAU;AACzB;AACA,IAAI,4HAAS;AACb,WAAW,+HAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,2GAAa;AAC7D;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,mDAAmD,2GAAiB;AACpE;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,gBAAgB,gIAAa;AAC7B;AACA;AACA,aAAa;AACb,oBAAoB,qDAAqD;AACzE;AACA;AACA,iBAAiB,+CAA+C;AAChE;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,sCAAsC,oEAAe;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb,oBAAoB,+CAA+C;AACnE;AACA;AACA,iBAAiB,yCAAyC;AAC1D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,iEAAY;AAC/C;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA,UAAU,gBAAgB;AAC1B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,qCAAqC,6FAAU;AAC/C;AACA;AACA,kCAAkC,sEAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,QAAQ,gBAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,gBAAgB,gHAAmB;AACnC;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,iBAAiB,mBAAmB,SAAS,gBAAgB;AAC7D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,iBAAiB,gBAAgB,SAAS,gBAAgB;AAC1D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,6BAA6B,6CAA6C;AAC1E;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb,oBAAoB,gBAAgB,WAAW,gBAAgB;AAC/D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,QAAQ,gBAAgB,KAAK,mBAAmB;AAChD;AACA,eAAe,QAAQ;AACvB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,oBAAoB,gBAAgB,WAAW,gBAAgB;AAC/D;AACA,YAAY,oBAAoB,GAAG,uBAAuB;AAC1D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,kCAAkC,wDAAwD;AAC1F;AACA;AACA,aAAa,eAAe;AAC5B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,aAAa;AACb,4BAA4B,gBAAgB,YAAY,gBAAgB;AACxE;AACA;AACA;AACA,cAAc;AACd;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,4BAA4B,mBAAmB,YAAY,gBAAgB;AAC3E;AACA;AACA;AACA,cAAc;AACd;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,4BAA4B,mBAAmB,YAAY,gBAAgB;AAC3E;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,4BAA4B,mBAAmB,KAAK,gBAAgB,YAAY,gBAAgB;AAChG;AACA;AACA;AACA,cAAc;AACd;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,4BAA4B,mBAAmB,KAAK,gBAAgB,YAAY,gBAAgB;AAChG;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,4CAA4C,gBAAgB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,aAAa;AACb,yBAAyB,2DAA2D;AACpF,YAAY,0DAA0D;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2GAAiB;AACzC,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,mFAAM;AACR;AACA;AACA;AACA,WAAW,qCAAqC;AAChD,aAAa,0DAA0D;AAGrE;AACF;AACA;AACA,eAAe,qEAAa;AAC5B,KAAK;AACL,C;;;;;;;;;;;;;AC3lBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9C;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACmD;AACoB;AACD;AACA;AACL;AACa;AACrC;AACa;AACmB;AACpC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kIAAe;AACvB,gBAAgB,6HAAU;AAC1B;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,iCAAiC,0FAAY;AAC7C;AACA,2BAA2B,qDAAqD;AAChF;AACA;AACA,gBAAgB;AAChB;AACA,+BAA+B,+FAAgB;AAC/C;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,kEAAkE,wEAAU;AAC5E;AACA;AACA;AACA,gBAAgB;AAChB;AACA,mEAAmE,gGAAU;AAC7E;AACA,oEAAoE,yBAAyB;AAC7F;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,gCAAgC,yFAAc;AAC9C;AACA,2BAA2B,mBAAmB;AAC9C;AACA;AACA;AACA,gBAAgB;AAChB;AACA,iCAAiC,uFAAW;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,IAAI,4HAAS;AACb,WAAW,+HAAY;AACvB;AACA;AACA;AACA;AACA,gBAAgB,gIAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb,yBAAyB,mBAAmB;AAC5C;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,uCAAuC;AACxD;AACA,SAAS;AACT;AACA;AACA;AACA,iCAAiC,4FAAU;AAC3C;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,iBAAiB,uCAAuC;AACxD;AACA,SAAS;AACT;AACA;AACA;AACA,iCAAiC,4FAAU;AAC3C;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,qEAAa;AACxD,yBAAyB;AACzB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,+EAAI;AACN;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA,mBAAmB,wBAAwB;AAC3C;AACA;AACA;;;;;;;;;;;;;;ACjOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AAChB;AACN;AACN;AACJ;AACM;AACR;AAClD;AACF;AACD;AACC;AACE;AACC;AACO;AACH;AACL;AACG;AACC;AACD;AACU;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACmD;AACoB;AACD;AACY;AACM;AACT;AACD;AACR;AACL;AACa;AACP;AACE;AACvC;AAClC;AACA;AACA;AACA,QAAQ,+CAA+C;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,+CAA+C;AAChF;AACA,eAAe,cAAc;AAC7B;AACA,aAAa,2BAA2B;AACxC,aAAa,mCAAmC;AAChD,MAAM,2DAA2D;AACjE;AACA;AACA;AACA;AACA,QAAQ,kIAAe;AACvB,gBAAgB,6HAAU;AAC1B;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,iCAAiC,2FAAY;AAC7C;AACA,2BAA2B,qDAAqD;AAChF;AACA;AACA,gBAAgB;AAChB;AACA,+BAA+B,+FAAgB;AAC/C;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,8DAA8D,+FAAS;AACvE;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,kEAAkE,gGAAU;AAC5E;AACA,wBAAwB,yDAAyD;AACjF,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,gCAAgC,0FAAc;AAC9C;AACA,2BAA2B,mBAAmB;AAC9C;AACA;AACA;AACA,gBAAgB;AAChB;AACA,iCAAiC,uFAAW;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA,+BAA+B,wEAAwE;AACvG,MAAM;AACN,aAAa,+CAA+C;AAC5D;AACA,eAAe,wBAAwB;AACvC;AACA;AACA,IAAI,4HAAS;AACb,WAAW,+HAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,IAAI;AACrB,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,gIAAa;AAC7B,gBAAgB,0GAAa,EAAE,aAAa;AAC5C,4DAA4D,qIAAkB;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb,yBAAyB,mBAAmB;AAC5C;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,iBAAiB,yDAAyD;AAC1E;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,uCAAuC,yGAAgB,cAAc,mGAAa;AAClF;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,uCAAuC;AACxD;AACA,SAAS;AACT;AACA;AACA;AACA,iCAAiC,6FAAU;AAC3C;AACA;AACA;AACA;AACA,iBAAiB;AACjB,uCAAuC,cAAc,mBAAmB,EAAE;AAC1E;AACA;AACA;AACA;AACA,aAAa;AACb,kBAAkB,8CAA8C,KAAK;AACrE,sBAAsB,2DAA2D;AACjF;AACA;AACA,eAAe,mCAAmC;AAClD;AACA,iBAAiB,wCAAwC;AACzD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,gCAAgC,6IAA0B;AAC1D;AACA;AACA;AACA,+CAA+C,mGAAgB;AAC/D;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,uCAAuC,+BAA+B;AACtE;AACA;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB;AACA;AACA;AACA,aAAa;AACb,sBAAsB,gBAAgB;AACtC;AACA,WAAW,6EAA6E;AACxF,uCAAuC,gCAAgC;AACvE;AACA;AACA;AACA,eAAe,mCAAmC;AAClD;AACA,iBAAiB,wCAAwC;AACzD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,gFAAI;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAAI;AACN;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA,sEAAsE,wBAAwB;AAC9F;AACA;AACA;;;;;;;;;;;;;;AC1VA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2D;AACf;;AAE5C;AACA,0CAA0C,wCAAwC;AAClF;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sEAAsE;AACjF;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sEAAa;;AAEnE;AACA,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,+BAA+B;AAC5D;AACA;AACA;AACA;AACA,+BAA+B,6IAA0B;AACzD;AACA;AACA,oCAAoC,iCAAiC;AACrE;AACA;AACA;AACA,eAAe;AACf;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH,CAAC,CAAC,oFAAO;;;;;;;;;;;;;;AC7FT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwG;AAC9D;AACU;AACH;AACH;AACE;AACL;AACC;AACE;AACW;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC,aAAa;AACb;AACO;AACP;AACA;AACA;AACA,iBAAiB,2DAA2D;AAC5E;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACO;AACP;AACA,0DAA0D,aAAa,GAAG,cAAc;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,gBAAgB,sEAAsE;AACtF,6DAA6D;AAC7D;AACA;AACA;AACA,sBAAsB,sEAAsE;AAC5F;AACA,WAAW,6BAA6B,kBAAkB;AAC1D,WAAW,iDAAiD;AAC5D;AACA,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,0DAA0D;AACrE,aAAa;AACb;AACO;AACP;AACA;AACA,sEAAsE,6BAA6B;AACnG,qCAAqC,iIAAc;AACnD,4CAA4C,UAAU,mBAAmB,qEAAU,QAAQ;AAC3F;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AC3GA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AAChD;AACH;AACD;AACL;AACA;AACR;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACU;AACA;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wDAAwD;AAChG,MAAM,sGAAsG;AAC5G;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA,iCAAiC,6EAA6E;AAC9G;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,qEAAqE,4CAA4C;AACjH;AACA;AACA;AACA,YAAY;AACZ;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,4GAA4G;AAC3H;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;;AAEA;AACA,mDAAmD,mEAAmE;AACtH;AACA,iBAAiB,SAAS;AAC1B,WAAW,mEAAmE;AAC9E;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6IAA0B;AACpD;AACA;AACA,+BAA+B,+BAA+B;AAC9D;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;;AC9HD;AAAA;AAAA;AAAA;AAAA;AAAoG;AACM;AAC1G;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE4E;AACxB;;AAEpD;AACA,+DAA+D;AAC/D;AACA,gDAAgD,2DAA2D;AAC3G;AACA;AACA;AACA,mCAAmC,+HAAY;AAC/C;AACA,8BAA8B,wCAAwC;AACtE;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,+DAA+D,6DAA6D;AAC5H;AACA;AACA;AACA;AACA;AACA,EAAE,kIAAe;AACjB;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,oEAAoE,6DAA6D;AACjI;AACA,YAAY;AACZ;AACA;AACA,CAAC;AACqC;AACtC,yFAAG,kBAAkB,6FAAe,E;;;;;;;;;;;;;ACpErB,8qB;;;;;;;;;;;;;ACAA,83B;;;;;;;;;;;ACAf;;AAEA;AACA,cAAc,mBAAO,CAAC,iVAAuK;AAC7L;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,gHAAmD;AACrE,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,+VAA8K;AACpM;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,gHAAmD;AACrE,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,yVAA2K;AACjM;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,gHAAmD;AACrE,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;;;ACXf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwG;AACQ;AACgB;AACpF;AACF;AACA;AACA;AACC;AACE;AACO;AACL;AACF;AACV;AACa;AACL;AACA;AACI;AACD;AACW;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEsH;AAC7C;;AAEzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gCAAgC;AAC3C,aAAa,SAAS;AACtB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sEAAc;AACjC,IAAI,sEAAc;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,gCAAgC;AAC3C,aAAa,SAAS;AACtB;AACO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM,sEAAc;AACpB;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,6IAA0B;AAC9C;AACA;AACA,yBAAyB,+BAA+B;AACxD;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA,UAAU,yDAAyD;AACnE;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,OAAO;AAClB,WAAW,kEAAkE;AAC7E;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oEAAoE,iDAAiD;AACrH;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,OAAO;AAClB,WAAW,kEAAkE;AAC7E;AACO;AACP;AACA;AACA;;AAEA;AACA,EAAE,sEAAc;AAChB,EAAE,sEAAc;;AAEhB;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,gCAAgC;AAC3C,aAAa,SAAS;AACtB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,sEAAc;AACpB;;AAEA;AACA;;AAEA;AACA,IAAI,sEAAc;;AAElB;AACA,qBAAqB,6IAA0B;AAC/C;AACA;AACA,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,wDAAwD,yCAAyC;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,OAAO;AAClB,WAAW,kEAAkE;AAC7E;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,kBAAkB;AACvC;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,sEAAc;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,sEAAc;AACpB;AACA;AACA;;AAEA;AACA,wDAAwD,yCAAyC;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,OAAO;AAClB,WAAW,kEAAkE;AAC7E;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,sEAAc;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,OAAO;AAClB,WAAW,8DAA8D;AACzE;AACO;AACP;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,OAAO;AAClB,WAAW,8DAA8D;AACzE;AACO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA,0CAA0C,uBAAuB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,OAAO;AAClB,WAAW,8DAA8D;AACzE;AACO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,mBAAmB,qIAAkB;AACrC;AACA;AACA,qBAAqB,6IAA0B;AAC/C;AACA;AACA,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,uEAAuE,6CAA6C;AACpH;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA,iEAAiE,6CAA6C;AAC9G;AACA;AACA;AACA;AACA,WAAW,gCAAgC;AAC3C,aAAa,SAAS;AACtB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gCAAgC;AAC3C,WAAW,kCAAkC;AAC7C,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,6IAA0B;AACrD;AACA,aAAa;AACb;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,MAAM,oBAAoB,oDAAoD;AACzF;AACO;AACP,cAAc,iIAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,oCAAoC;AAC/C,WAAW,wCAAwC;AACnD,WAAW,8DAA8D;AACzE,aAAa,sCAAsC;AACnD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,gGAAU;AACjC;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0EAAkB;AACxC;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,+EAAuB;;AAE1C;AACA;AACA,2BAA2B,qIAAkB,gCAAgC,mBAAmB;AAChG;AACA;AACA;AACA,MAAM,sEAAc;AACpB,MAAM,sEAAc;AACpB;AACA;AACA;;AAEA;AACA;AACA,WAAW,mCAAmC;AAC9C,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,mCAAmC;AAC9C,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;ACvjCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACJ;AACF;AACpD;AACA;AACG;AACE;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2D;AACH;;AAExD;AACA,+CAA+C,yCAAyC;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iCAAiC;AAC9C,aAAa,qBAAqB;AAClC;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA,8CAA8C,mBAAmB;AACjE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,+BAA+B;AAC5D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA,qBAAqB,4FAAK;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,oFAAO;;;;;;;;;;;;;;AChKT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwC;AACV;AAC2B;;AAEzD;AACA;AACA;AACA,2CAA2C;AAC3C,QAAQ,gDAAgD;AACxD;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,4DAAW,EAAE,uDAAM;AACjC;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;AClDR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACJ;AACF;AAClD;AACF;AACA;AACG;AACO;AACL;AACG;AACF;AACD;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2D;AACH;;AAExD;AACA,wCAAwC,yCAAyC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iCAAiC;AAC9C,aAAa,sBAAsB;AACnC;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,0BAA0B,6IAA0B;AACpD;AACA;AACA,+BAA+B,+BAA+B;AAC9D;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;;AAEA;AACA,6BAA6B,aAAa;AAC1C;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA,qBAAqB,4FAAK;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4FAAK;AAC5B;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,qFAAO,EAAE;AACX;AACA;AACA;AACA,WAAW,sCAAsC;AACjD,WAAW,QAAQ;AACnB;AACA,WAAW,OAAO;AACgB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,oCAAoC;AAC/C,WAAW,kCAAkC;AAC7C,aAAa;AACb;AACA;AACA,C;;;;;;;;;;;;;AC1WA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACJ;AACF;AACjD;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwC;AACI;AACa;AACW;AAC4P;;AAEhU;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,eAAe,iFAAoB;AACnC,OAAO;AACP;AACA;AACA,+CAA+C,gFAAmB;AAClE,+CAA+C,gFAAmB;AAClE,4CAA4C,gFAAmB;AAC/D,8CAA8C,2EAAsB;AACpE;AACA,OAAO;AACP,uDAAuD,+EAAkB;AACzE,2CAA2C,2EAAsB;AACjE;AACA,OAAO;AACP,oDAAoD,+EAAkB;AACtE,mEAAmE,wEAAmB;AACtF;AACA,OAAO;AACP,mEAAmE,kFAA6B;AAChG;AACA,OAAO;AACP,qEAAqE,kFAAqB;AAC1F,uDAAuD,4EAAe;AACtE,8CAA8C,wEAAmB;AACjE;AACA,OAAO;AACP,6CAA6C,8DAAS;AACtD;AACA,OAAO;AACP,6CAA6C,8DAAS;AACtD;AACA,OAAO;AACP,6CAA6C,kEAAa;AAC1D;AACA,OAAO;AACP,6CAA6C,uEAAkB;;AAE/D;AACA,uCAAuC,0EAAqB;AAC5D;AACA,OAAO;;AAEP;AACA,8CAA8C,4DAAW;AACzD,8CAA8C,4DAAW;;AAEzD;AACA,4CAA4C,8DAAa;AACzD,6CAA6C,8DAAa;AAC1D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,cAAc,2FAAS;AACvB;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;AAC0B;AAClC;AACA;AACA,kBAAkB,6IAA0B;AAC5C;AACA;AACA,uBAAuB,+BAA+B;AACtD;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,C;;;;;;;;;;;;;ACnOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AAC4C;AACmB;AACA;AACN;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kIAAe;AACvB,eAAe,6HAAU;AACzB;AACA,IAAI,4HAAS;AACb,WAAW,+HAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wEAAiB,kDAAkD,6EAAgB;AACnG,gBAAgB,wEAAiB,kDAAkD,6EAAgB;AACnG;AACA,SAAS;AACT,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;ACxCR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACnF;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEuF;AACjB;;AAEtE;AACA,wBAAwB,2DAA2D;AACnF;AACA,WAAW,iDAAiD;AAC5D,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,8BAA8B;AACzC,WAAW,8DAA8D;AACzE,aAAa,qDAAqD;AAClE;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC,WAAW,qDAAqD;AAChE,WAAW,8DAA8D;AACzE,WAAW,gCAAgC;AAC3C;AACO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,oBAAoB,6IAA0B;AAC9C;AACA;AACA,yBAAyB,+BAA+B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,iDAAiD;AAC5D,WAAW,6BAA6B;AACxC,WAAW,6BAA6B;AACxC,aAAa,0CAA0C;AACvD;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qCAAqC;AAChD,aAAa;AACb;AACO;AACP;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,WAAW,8BAA8B;AACzC,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACO;AACP;AACA;AACA,yBAAyB,4FAAU;AACnC;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;;AAEA;AACA;AACA,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA,SAAS,4GAAe;AACxB,C;;;;;;;;;;;;;ACpQe,8f;;;;;;;;;;;;;ACAA,2d;;;;;;;;;;;;;ACAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACJ;AACF;AACpD;AACG;AACG;AACL;AACA;AACR;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEkD;AACO;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,kEAAgB;;AAE3D;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;;AAEP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;;AAEP;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,oFAAM;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,aAAa;AACzB;AACgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AC/NA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2D;AACH;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2FAAK;AACvB;AACA;AACA;;AAEA;AACA,kDAAkD,wCAAwC;AAC1F;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,gGAAgG;AAC/G;AACA,mEAAmE,sDAAsD;AACzH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,+BAA+B;AAC5D;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH,CAAC,CAAC,oFAAO,EAAE;AACX;AACA;AACA,WAAW,oCAAoC;AAC/C,WAAW,kCAAkC;AAC7C,aAAa;AAC0B;AACvC;AACA;AACA,C;;;;;;;;;;;;;AC9FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AACX;AACU;;AAExD;AACA;AACA;AACA,4CAA4C;AAC5C,QAAQ,yDAAyD;AACjE;AACA,2CAA2C,4CAA4C;AACvF;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,oEAAmB,EAAE,+DAAc;AACjD;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;ACpDR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwG;AACJ;AAC4B;AACtB;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2D;AACH;;AAExD;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,2FAAK;AAC9B;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,+BAA+B;AAC5D;AACA;AACA,+BAA+B,6IAA0B;AACzD;AACA;AACA,oCAAoC,iCAAiC;AACrE;AACA;AACA;AACA,eAAe;AACf;AACA,eAAe;AACf;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,+BAA+B,6IAA0B;AACzD;AACA;AACA,oCAAoC,iCAAiC;AACrE;AACA;AACA;AACA,eAAe;AACf;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,wDAAwD;AACvE,eAAe,kCAAkC;AACjD,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB;AACA;AACA,aAAa,+HAAY;AACzB;AACA;AACA;AACA,uBAAuB,2FAAK;AAC5B;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sFAAsF;AACrG,eAAe,kCAAkC;AACjD,iBAAiB,kBAAkB;AACnC;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB;AACA,aAAa,+HAAY;AACzB;AACA;AACA,yBAAyB,6IAA0B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iIAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH,CAAC,CAAC,oFAAO;;;;;;;;;;;;;;ACjPT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AACD;;AAExD;AACA;AACA;AACA,qBAAqB,gFAAgF;AACrG;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,oEAAmB;AACjE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;ACjDR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACyD;AACa;AACN;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kIAAe;AACvB,eAAe,6HAAU;AACzB;AACA,IAAI,4HAAS;AACb,WAAW,+HAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4FAAU;AAC7C;AACA;AACA,8BAA8B,8EAAgB;AAC9C;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;AC9DO,q4B;;;;;;;;;;;;;ACAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACJ;AACF;AACpD;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AACb;AACE;AACM;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA,uBAAuB,+DAAc;AACrC,+CAA+C,8DAAa;AAC5D,wCAAwC,8DAAa;AACrD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,6IAA0B;AACpD;AACA;AACA,+BAA+B,+BAA+B;AAC9D;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,iFAAG;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;AC/GR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AACjD;AACO;AACH;AACD;AACS;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2D;AACH;AACR;;AAEhD;AACA,oCAAoC,iDAAiD;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iCAAiC;AAC9C,aAAa,qBAAqB;AAClC;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA,wBAAwB,oEAAY;AACpC;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC,mCAAmC;AACxE;AACA;AACA,eAAe,OAAO;AACtB,eAAe,YAAY,iCAAiC,gEAAgE;AAC5H,eAAe,OAAO;AACtB,gBAAgB,wDAAwD;AACxE,eAAe,wCAAwC;AACvD;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,4FAAK;AAC9B;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,oFAAO;;;;;;;;;;;;;;AC9MT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC5C;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE6E;AACQ;AACnB;AACd;;AAEpD;AACA,mCAAmC,wDAAwD;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;AACA;AACA;AACA,0BAA0B,uFAAQ,2BAA2B,uFAAQ;AACrE;AACA;AACA,KAAK;AACL;AACA;AACA,0BAA0B,uFAAQ;AAClC;AACA;AACA,OAAO,0BAA0B,uFAAQ;AACzC;AACA;AACA,OAAO;AACP;AACA;AACA,4BAA4B,iFAAG;AAC/B;AACA;AACA;AACA,KAAK;;AAEL;AACA,QAAQ,iFAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP,kCAAkC,yGAAY;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA,GAAG;AACH,CAAC,CAAC,qGAAQ;AACV;AACA;AACA;AACA,qCAAqC;AACrC,+BAA+B,iDAAiD;AAChF;AACA;AACA,WAAW,sDAAsD;AACjE,WAAW,mBAAmB;AAC9B,WAAW,mBAAmB;AAC9B,WAAW,OAAO;AAClB;AACA,WAAW,uCAAuC;AAClD;AACA;;;;;;;;;;;;;;ACxHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AACf;AAC0C;AACF;;AAElF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA6B,6DAAY;AACzC;AACA,MAAM,6FAA8B;AACpC,MAAM,4FAA6B;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,oEAAoE;AACpE;AACA;AACA,eAAe,gCAAgC;AAC/C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;AC9ER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9C;AACD;AACP;AACiB;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2D;AACX;;AAEhD;AACA,mCAAmC,8CAA8C;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iCAAiC;AAC9C,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA;AACA,gBAAgB,8CAA8C;AAC9D;AACA,wBAAwB,oEAAY;;AAEpC;AACA;AACA,QAAQ,wCAAwC;AAChD;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,MAAM,gIAAa;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,gCAAgC;AAC/C;AACA,eAAe,gCAAgC;AAC/C;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH,CAAC,CAAC,oFAAO;;;;;;;;;;;;;;AC/HT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AAC7B;AACE;;AAE9B;AACA;AACA;AACA,4CAA4C,gCAAgC,MAAM;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA,cAAc,sDAAK,EAAE,uDAAM;AAC3B;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;AACR;AACA;AACA;AACA,iBAAiB,wCAAwC;AACzD;AACA,YAAY,kCAAkC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ,sEAAsE;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;;;;;;;;;;;;;;ACzEA;AAAA;AAAA;AAA0G;AACN;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,8CAA8C;AAClD;AACA;AACA;AACA;AACA,kBAAkB,0BAA0B,8BAA8B,0BAA0B;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gCAAgC;AAC7C,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB,gCAAgC;AAChD;AACA;;AAEA;AACA,wEAAwE,aAAa;AACrF,YAAY,mBAAmB;AAC/B;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+EAA+E;AAC/E,gCAAgC,aAAa;AAC7C;AACA,YAAY;AACZ;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8DAA8D,YAAY;AAC1E,+BAA+B,aAAa;AAC5C;AACA,eAAe,OAAO;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ,qCAAqC,gBAAgB;AAC5E;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;;ACzLD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AAC1D;AACA;AACA;AACD;AACG;AACQ;AACN;AACD;AACD;AACG;AACC;AACL;AACI;AACD;AACW;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEsD;AACsB;AACA;;AAE5E;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C;AACe;AACf;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iCAAiC;AAC9C;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,6DAA6D;AAC7E;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb,mEAAmE;AACnE,aAAa,4CAA4C;AACzD;AACA,SAAS,+HAAY;AACrB;AACA;AACA,UAAU,gFAAwB;AAClC;AACA,OAAO;AACP,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,+BAA+B;AAC5D;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC;AAClC,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA,uDAAuD,gCAAgC;AACvF,WAAW,2BAA2B;AACtC;AACA;AACA,eAAe;AACf,qEAAqE;AACrE,eAAe,4CAA4C;AAC3D;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kCAAkC,iGAAY;AAC9C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,uBAAuB,2FAAI;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA,uBAAuB;AACvB;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF;AACtF;;AAEA;AACA;AACA;AACA;AACA,uBAAuB,2FAAI;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,mBAAmB,+EAAuB;AAC1C;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH,CAAC,GAAG,mEAAmE;AACvE,OAAO,iDAAiD;AACxD;AACA;AACA,WAAW;AACX,iEAAiE;AACjE,aAAa;AACb;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA,WAAW,sCAAsC;AACjD,WAAW,kCAAkC;AAC7C,aAAa;AACb;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,uBAAuB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,8BAA8B,oBAAoB;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;ACxWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACJ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEiE;AACb;;AAEpD;AACA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C;AACe;AACf;AACA;AACA;AACA;;AAEA;AACA,MAAM,iFAAG;AACT;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,qDAAqD;AAClE;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,8CAA8C,qBAAqB;AACnE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,oBAAoB,8FAAO,aAAa,8FAAO,gBAAgB,8FAAO,eAAe,8FAAO;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,aAAa;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,8CAA8C;AACzD,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AC9LA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AAChF;AACS;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEsD;AACkB;;AAExE;AACA;AACA;AACA;AACA,WAAW;AACX,iEAAiE;AACjE,aAAa;AACb;AACO;AACP;AACA;AACA;;AAEA;AACA,kBAAkB,6IAA0B;AAC5C;AACA;AACA,uBAAuB,+BAA+B;AACtD;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX,gEAAgE;AAChE,aAAa,iBAAiB,qBAAqB,+CAA+C;AAClG;AACA;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,0FAAI;AACvB,gBAAgB,mGAAa;;AAE7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC,WAAW,6BAA6B;AACxC,aAAa;AACb;AACO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA,C;;;;;;;;;;;;;AC7FA;AAAA;AAAgI;AAChI;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,sCAAsC;AACjD;AACA,WAAW,SAAS;AACpB,WAAW,oBAAoB;AAC/B;AACA,WAAW,SAAS;AACpB;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6IAA0B;AAC9C;AACA;AACA,yBAAyB,+BAA+B;AACxD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH,C;;;;;;;;;;;;;ACrDA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI,sDAAsD;AAC1D,IAAI,4CAA4C;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,WAAW,oBAAoB;AAC/B,aAAa;AACb;AACe;AACf;AACA;AACA;AACA;AACA,GAAG;AACH,C;;;;;;;;;;;;;ACrCA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,yBAAyB,gCAAgC;AACzD;AACA;AACA,IAAI,oDAAoD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,WAAW,OAAO;AAClB,WAAW,oBAAoB;AAC/B;AACe;AACf;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,C;;;;;;;;;;;;;ACpDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAClD;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2B;AACa;AACS;AACG;AACyB;AAC3B;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;AACA,uBAAuB,yFAAG;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2DAA2D,eAAe;AAC1E;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,iEAAiE,iCAAiC;AAClG;AACA;AACA,gBAAgB,0CAA0C;AAC1D;AACA;;AAEA;AACA,+DAA+D,6BAA6B;AAC5F;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;;AAEA;AACA,sDAAsD,gBAAgB;AACtE,QAAQ,2BAA2B;AACnC;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA,yBAAyB,8DAAQ;AACjC;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA,MAAM,gIAAa;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,eAAe;AACnC;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,gDAAgD;AAClE;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,4BAA4B,oEAAW;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,0BAA0B,qDAAI;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;;AAEA;AACA,8BAA8B,mBAAmB;AACjD,QAAQ,eAAe,GAAG,aAAa,MAAM,iBAAiB;AAC9D;AACA;AACA;AACA;AACA,eAAe,wBAAwB;AACvC,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,wBAAwB,2GAAmB;AAC3C;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,qDAAI;;;;;;;;;;;;;;AClQN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2B;AACW;AACkB;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA,MAAM,gIAAa;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,iCAAiC,qDAAI;AACrC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA,GAAG;AACH,CAAC,CAAC,2DAAU;;;;;;;;;;;;;;AC/FZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoG;AAC4B;AACtB;AACN;AACjE;AACa;AACD;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwE;;AAExE;AACA,kDAAkD,+BAA+B;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,4DAA4D;AACpE,kBAAkB,yDAAyD;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iCAAiC;AAC9C;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA,IAAI,+HAAY;AAChB;AACA,aAAa,+HAAY;AACzB;AACA;AACA,wBAAwB,6IAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,QAAQ,qBAAqB;AAC7B,QAAQ,4DAA4D;AACpE,qCAAqC,+BAA+B;AACpE;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA,kBAAkB,2FAAa;AAC/B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,yBAAyB,4DAA4D;AACrF,uBAAuB,iBAAiB;AACxC,QAAQ,+BAA+B;AACvC;AACA,eAAe,OAAO;AACtB,iBAAiB,oBAAoB;AACrC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA,kBAAkB,2FAAa;AAC/B;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,GAAG;AACJ;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AAC0B;AACvC;AACA;AACA,C;;;;;;;;;;;;;AC9LA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEiD;AACuB;AAC7B;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iBAAiB,sEAAsE;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA,MAAM,gIAAa;AACnB;AACA;;AAEA;AACA,kBAAkB,uCAAuC,cAAc,iBAAiB;AACxF;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,0BAA0B,8DAAQ;AAClC,0BAA0B,+EAAiB;AAC3C;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH,CAAC,CAAC,kEAAU;;;;;;;;;;;;;;AC/FZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2B;;AAE3B;AACA;AACA;AACA,QAAQ,mDAAmD;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA,2DAA2D,eAAe;AAC1E;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;;AAEA;AACA;AACA;AACA,mCAAmC,uCAAuC,MAAM,gDAAgD;AAChI,YAAY,iDAAiD;AAC7D,QAAQ,oDAAoD;AAC5D;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,eAAe,uEAAuE;AACtF;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,uEAAuE;AACxF;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,qDAAI;;;;;;;;;;;;;;AClHN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AACjD;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2B;AAC2C;AACQ;AACxB;AAC0B;;AAEhF;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E;AAC/E,QAAQ,oDAAoD;AAC5D,IAAI,8CAA8C;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,sEAAsE,8CAA8C;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA,aAAa,2BAA2B;AACxC,aAAa,wDAAwD;AACrE,aAAa,uDAAuD;AACpE;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;;AAEA;AACA,mEAAmE,iBAAiB;AACpF;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;;AAEA;AACA,iDAAiD,kBAAkB;AACnE,QAAQ,oEAAoE;AAC5E;AACA;AACA;AACA;AACA;AACA,YAAY,sEAAsE;AAClF,QAAQ,kDAAkD;AAC1D;AACA;AACA,gBAAgB,uDAAuD;AACvE;AACA;;AAEA;AACA,4EAA4E,uBAAuB;AACnG;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA,YAAY,uDAAuD;AACnE;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA,gEAAgE,eAAe;AAC/E;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,iGAAiG;AACzG;AACA;AACA,QAAQ,sEAAsE;AAC9E,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA,gBAAgB,2BAA2B;AAC3C;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,6BAA6B,0FAAY;;AAEzC;AACA,wBAAwB,qDAAqD;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,2BAA2B,8FAAgB;AAC3C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,gBAAgB,iDAAiD;AACjE,eAAe,mEAAmE;AAClF;AACA,yEAAyE,iDAAiD;AAC1H;AACA;AACA,gBAAgB,iCAAiC;AACjD;;AAEA;AACA;AACA,QAAQ,mEAAmE;AAC3E;AACA,yEAAyE,oDAAoD;AAC7H;AACA;AACA,gBAAgB,0CAA0C;AAC1D;;AAEA;AACA;AACA;AACA,YAAY,gBAAgB,gCAAgC;AAC5D;AACA;AACA,YAAY,mBAAmB;AAC/B,QAAQ,oEAAoE;AAC5E;AACA,yEAAyE;AACzE,WAAW,oDAAoD;AAC/D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA,MAAM,gIAAa;;AAEnB;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,kBAAkB;AACtC;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,uBAAuB;AACvC,QAAQ;AACR;AACA;AACA,cAAc;AACd;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,qDAAI;AACN;AACA;AACA;AACA,IAAI,mEAAmE;AACvE,IAAI,iEAAiE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,yCAAyC;AACvF;AACA;AACA,gCAAgC;AAChC;AACA;AACA,YAAY,OAAO;AACnB;AACmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA,mCAAmC,sGAAkB,C;;;;;;;;;;;;;ACjarD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgH;AACvE;AACW;AACR;AACD;AACK;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACoD;AACV;AACmB;AACZ;AACT;AACQ;AACU;AACZ;AACY;AACQ;AACL;AACH;AAC1D;AACA,iEAAiE,4DAA4D;AAC7H,WAAW,qEAAqE;AAChF,IAAI,mEAAmE;AACvE;AACA;AACA;AACA,4BAA4B,sEAAsE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,8DAA8D;AAClE,IAAI,gEAAgE;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE;AAClE,iCAAiC,wDAAwD;AACzF,qDAAqD,iDAAiD;AACtG,IAAI,oDAAoD;AACxD;AACA,WAAW,2BAA2B;AACtC,WAAW,SAAS;AACpB,IAAI,8DAA8D;AAClE,aAAa,6CAA6C;AAC1D;AACO;AACP,0FAA0F,0EAAkB;AAC5G;AACA,wBAAwB,kEAAiB;AACzC,2BAA2B,6DAAY;AACvC;AACA,8BAA8B,0EAAkB;AAChD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gDAAgD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAA8C,MAAM,gDAAgD;AAC5G;AACA,WAAW,6CAA6C;AACxD,WAAW,kDAAkD;AAC7D;AACO;AACP;AACA;AACA,qDAAqD,oEAAW;AAChE;AACA,iCAAiC,cAAc,iCAAiC,EAAE;AAClF;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,wBAAwB,uCAAuC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,0DAA0D;AAC9D;AACA;AACA,QAAQ,8CAA8C,MAAM,4BAA4B;AACxF;AACA,WAAW,6CAA6C;AACxD,WAAW,+DAA+D;AAC1E;AACA;AACO;AACP;AACA,+CAA+C,+DAAQ;AACvD;AACA;AACA;AACA,uBAAuB,wEAAiB;AACxC,SAAS;AACT;AACA,mCAAmC,mEAAY;AAC/C;AACA;AACA,iCAAiC,mEAAU;AAC3C,aAAa;AACb,iCAAiC,yEAAgB;AACjD;AACA;AACA,+DAA+D,qIAAkB;AACjF;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,WAAW,6CAA6C;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,6CAA6C;AACxD;AACA;AACA,QAAQ,sFAAmB;AAC3B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,WAAW,6CAA6C;AACxD;AACA;AACA;AACA;AACA,kCAAkC,yEAAgB;AAClD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,WAAW,6CAA6C;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,8CAA8C;AAC9C;AACA;AACA,aAAa,OAAO;AACpB;AACA,cAAc,OAAO;AACrB,cAAc,sBAAsB;AACpC;AACA,G;;;;;;;;;;;;;AC/QA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AACjD;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2BAA2B;AACxC,aAAa,6BAA6B;AAC1C,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;;AAEA;AACA,4BAA4B,wBAAwB;AACpD,qCAAqC,gBAAgB;AACrD;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA,oEAAoE,wBAAwB;AAC5F;AACA;AACA,QAAQ,yDAAyD;AACjE;AACA;AACA;AACA,gBAAgB,6BAA6B;AAC7C;AACA;AACA;AACA;;AAEA;AACA,8CAA8C,gBAAgB;AAC9D,MAAM,wBAAwB,eAAe,eAAe,KAAK,wBAAwB;AACzF;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA,MAAM,gIAAa;AACnB;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAM,gIAAa;AACnB;;AAEA;AACA,qEAAqE,eAAe;AACpF,YAAY,iBAAiB,2BAA2B,iCAAiC;AACzF;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;AACH,CAAC,CAAC,qDAAI;;;;;;;;;;;;;;ACnKN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AACjD;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AAC6D;AAC7D;AACA,wDAAwD,yDAAyD;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2BAA2B;AACxC,aAAa,6BAA6B;AAC1C,aAAa,YAAY;AACzB,MAAM;AACN;AACA;AACA;AACA;AACA,QAAQ,kIAAe;AACvB,gBAAgB,6HAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,IAAI,4HAAS;AACb,WAAW,+HAAY;AACvB;AACA;AACA;AACA,gBAAgB,gIAAa;AAC7B;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT,CAAC,CAAC,0EAAc;;;;;;;;;;;;;;AC/DhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACuD;AACT;AACM;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA,QAAQ,kIAAe;AACvB,gBAAgB,6HAAU;AAC1B,2BAA2B,yFAAG;AAC9B;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,IAAI,4HAAS;AACb,WAAW,+HAAY;AACvB;AACA;AACA;AACA,qCAAqC,gEAAS;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT,CAAC,CAAC,sEAAY;;;;;;;;;;;;;;ACzHd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAE2B;AACQ;AACmB;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA;AACA,gBAAgB,wCAAwC;AACxD;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA,MAAM,gIAAa;AACnB;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,aAAa,gIAAa;AAC1B;;AAEA;AACA,4CAA4C,YAAY;AACxD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,4DAA4D,yDAAQ;AACpE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH,CAAC,CAAC,qDAAI;;;;;;;;;;;;;;AC/FN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACxD;AACF;AACC;AACS;AACL;AACF;AACG;AAChD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE8D;;AAE9D;AACA,sDAAsD,gCAAgC;AACtF,IAAI,8CAA8C;AAClD,IAAI,6CAA6C;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,2BAA2B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,qDAAqD;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,0CAA0C;AACvD,aAAa,uCAAuC;AACpD,aAAa,+CAA+C;AAC5D,aAAa,OAAO;AACpB;AACA;AACA;AACA,IAAI,kIAAe;AACnB;;AAEA;AACA,UAAU,+BAA+B;AACzC;AACA;AACA,gBAAgB,mCAAmC;AACnD;;AAEA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA,gBAAgB,uCAAuC;AACvD;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,gBAAgB,+CAA+C;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,+BAA+B;AAC5D;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,kBAAkB;AAC5D;AACA;AACA;AACA,cAAc,yBAAyB;AACvC;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,kBAAkB;AAC7D;AACA;AACA;AACA,gBAAgB,yBAAyB;AACzC;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,kBAAkB,WAAW,eAAe;AACvF;AACA;AACA;AACA,gBAAgB,yBAAyB;AACzC;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,+CAA+C,kBAAkB,WAAW,eAAe;AAC3F;AACA;AACA;AACA,gBAAgB,yBAAyB;AACzC;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,kBAAkB;AACtD,WAAW,oBAAoB;AAC/B;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,oBAAoB,aAAa,UAAU,kBAAkB;AAC7D;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY,UAAU,kBAAkB;AAC5D;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY,UAAU,kBAAkB;AAC5D;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,gBAAgB,UAAU,kBAAkB;AAChE;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uDAAuD,kBAAkB;AACzE,WAAW,eAAe;AAC1B;AACA;AACA,eAAe,OAAO,4CAA4C,eAAe;AACjF;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH,CAAC,GAAG;AACJ;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa;AACqB;AAClC;AACA,0BAA0B,yFAAM;AAChC,C;;;;;;;;;;;;;ACvUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AACpD;AACU;AACH;AACD;AACL;AACc;AACzD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAE2B;AACmB;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA,MAAM,gIAAa;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;;AAEA;AACA,oBAAoB,eAAe,oBAAoB,eAAe;AACtE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;AACH,CAAC,CAAC,sDAAI;;;;;;;;;;;;;;AC1IN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2B;AAC6B;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA,QAAQ,yEAAyE;AACjF;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA,MAAM,gIAAa;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,qDAAI;;;;;;;;;;;;;;ACjJN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoG;AACM;AACV;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2B;AACqB;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB,CAAC,CAAC,qDAAI;;;;;;;;;;;;;;AC5DN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2B;AACyB;AACT;AACmB;;AAE9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2BAA2B;AACxC,aAAa,SAAS;AACtB;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB,sCAAsC,yFAAG;AACzC,wCAAwC,yFAAG;;AAE3C;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA,iBAAiB;AACjB,eAAe,iBAAiB;AAChC;AACA,gCAAgC,iBAAiB;AACjD,QAAQ;AACR;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;;AAEA;AACA,8DAA8D,iBAAiB;AAC/E;AACA;AACA;AACA;AACA,mEAAmE,iBAAiB;AACpF,+CAA+C,iBAAiB;AAChE,QAAQ,iBAAiB;AACzB;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,oCAAoC;AACpD;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,gDAAgD;AAChE;AACA;;AAEA;AACA,gCAAgC,iBAAiB,eAAe,iBAAiB;AACjF,QAAQ,gBAAgB;AACxB;AACA,gBAAgB,oBAAoB;AACpC;AACA;;AAEA;AACA,yCAAyC,iBAAiB,MAAM,gBAAgB;AAChF,gCAAgC,iBAAiB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe;AACf;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA,0BAA0B,gEAAS;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,sDAAsD,iBAAiB,MAAM;AAC7E,oBAAoB,iBAAiB,OAAO,mBAAmB;AAC/D;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA,2BAA2B,qDAAI;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,qDAAI;;;;;;;;;;;;;;AC3ON;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA,8DAA8D,eAAe;AAC7E;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,qDAAI;;;;;;;;;;;;;;ACxDN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoG;AACM;AACV;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB,CAAC,CAAC,qDAAI;;;;;;;;;;;;;;ACtCN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACJ;AACM;AACR;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2B;AAC2C;AAC7B;AACqC;AAChC;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,6BAA6B,0FAAY;;AAEzC;AACA,wBAAwB,qDAAqD;AAC7E;AACA;AACA,gBAAgB;AAChB;AACA,2BAA2B,8FAAgB;;AAE3C;AACA,qCAAqC,aAAa;AAClD;AACA;AACA;AACA,gBAAgB;AAChB;AACA,6BAA6B,4DAAW;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA,MAAM,gIAAa;;AAEnB;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA,uCAAuC,aAAa;AACpD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,sCAAsC,aAAa;AACnD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,qDAAI;;;;;;;;;;;;;;AC5IN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AACjD;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE8B;AACkD;AAChB;AACF;AACA;AACxB;AACoB;AAC1D,WAAW,gGAAM;AACjB,4BAA4B,wFAAM;;AAElC;AACA;AACA;AACA;AACA,IAAI,wEAAwE;AAC5E,IAAI,sDAAsD;AAC1D;AACA;AACA;AACA,oBAAoB,wEAAwE;AAC5F;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,IAAI,gDAAgD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,uBAAuB;AACrC;AACA;AACA,QAAQ,iFAAiF;AACzF;AACA,gBAAgB,gBAAgB,MAAM,WAAW;AACjD;AACA;AACA;AACA,gBAAgB,4CAA4C;AAC5D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA,6CAA6C,eAAe;AAC5D;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA,sDAAsD,iBAAiB;AACvE,wBAAwB,WAAW;AACnC;AACA;AACA,gBAAgB,SAAS;AACzB;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,UAAU,iBAAiB;AAC3B;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,+CAA+C;AACzF;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8DAA8D,YAAY;AAC1E;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA,eAAe,kCAAkC;AACjD,QAAQ,mDAAmD;AAC3D,QAAQ,iFAAiF;AACzF;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,kCAAkC,gBAAgB;AAClD;AACA;AACA,8BAA8B;AAC9B,WAAW,gDAAgD;AAC3D;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,2CAA2C,aAAa;AACxD;AACA,4DAA4D,YAAY;AACxE;AACA,eAAe,kCAAkC;AACjD,QAAQ,mDAAmD;AAC3D,QAAQ,iFAAiF;AACzF;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA8C,WAAW;AACzD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2DAA2D,WAAW;AACtE;AACA;AACA,eAAe,kCAAkC;AACjD,QAAQ,mDAAmD;AAC3D;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,wFAAM;AAC1B;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;;AAEP;AACA,oBAAoB,wFAAM;AAC1B;AACA,OAAO;AACP;;AAEA;AACA,0DAA0D,WAAW;AACrE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,yBAAyB,wFAAM;AAC/B,yBAAyB,wFAAM;AAC/B;AACA,GAAG;AACH,CAAC,CAAC,qDAAI,EAAE;AACR;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa;AAC0B;AACvC;AACA,MAAM,oEAAS;AACf;AACA;AACA,MAAM,iGAAO;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA,uCAAuC,qGAAkB;;AAEzD;AACA;AACA,6BAA6B,yEAAyE;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yEAAyE;AACjF;AACA,kDAAkD,yCAAyC;AAC3F;AACA;AACA,+CAA+C,gBAAgB;AAC/D;AACA,YAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B,WAAW,oBAAoB;AAC/B,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B,WAAW,oBAAoB;AAC/B,aAAa;AACb;AACA;AACA,C;;;;;;;;;;;;;AC3vBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsG;AACI;AACN;AACJ;AACF;AACpD;AACA;AACI;AACM;AACP;AACV;AACa;AACD;AACA;AACU;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACyD;AACP;AACpB;AACmB;AACuB;AACF;AACR;AACJ;AACK;AACJ;AACC;AACL;AACvD,WAAW,iGAAM;AACjB;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,6EAA6E;AACtF;AACA;AACA,IAAI,gEAAgE;AACpE,oDAAoD,yEAAyE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kIAAe;AACvB,gBAAgB,6HAAU;AAC1B;AACA,YAAY;AACZ,gBAAgB,oBAAoB,+CAA+C;AACnF,WAAW,sBAAsB;AACjC;AACA;AACA,QAAQ;AACR,eAAe,qDAAqD;AACpE;AACA,gBAAgB,0CAA0C;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yBAAyB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAA0D;AAC1E;AACA,yBAAyB,kEAAgB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,oBAAoB;AACjC,eAAe;AACf;AACA,IAAI,4HAAS;AACb,WAAW,+HAAY;AACvB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,oBAAoB;AACnC,eAAe,kCAAkC;AACjD,eAAe,OAAO,+DAA+D,oBAAoB;AACzG,eAAe,QAAQ,oCAAoC,oBAAoB;AAC/E,eAAe,QAAQ;AACvB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4FAAa;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4FAAa;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,eAAe,kCAAkC;AACjD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,eAAe,OAAO;AACtB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4FAAa;AAC3C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,cAAc;AACd;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,eAAe,IAAI;AACnB,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB,GAAG,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,oBAAoB;AACnC,eAAe,OAAO,8EAA8E,oBAAoB;AACxH,eAAe,QAAQ,oCAAoC,oBAAoB;AAC/E;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,aAAa,gCAAgC;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,CAAC,CAAC,oFAAM;AACR;AACA,2CAA2C,oFAAoF;AAC/H;AACA,YAAY,oFAAoF;AAChG;AACA;AACA;AAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kIAAe;AACvB,iBAAiB,6HAAU;AAC3B;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,kCAAkC,2FAAY;AAC9C;AACA;AACA;AACA,cAAc;AACd;AACA,wEAAwE,gFAAQ;AAChF;AACA;AACA;AACA,cAAc;AACd;AACA,oEAAoE,4EAAQ;AAC5E;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,yCAAyC,yCAAyC;AAClF,wCAAwC,2BAA2B;AACnE,yBAAyB;AACzB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iCAAiC,uCAAuC;AACxE;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,IAAI,4HAAS;AACb,WAAW,+HAAY;AACvB;AACA;AACA;AACA,gBAAgB,gIAAa;AAC7B;AACA,aAAa;AACb;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA,+BAA+B,mEAAU;AACzC;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,CAAC,CAAC,sDAAI;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kIAAe;AACvB,iBAAiB,6HAAU;AAC3B;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,eAAe,OAAO;AACtB,IAAI,4HAAS;AACb,WAAW,+HAAY;AACvB;AACA;AACA;AACA;AACA,mCAAmC,sDAAI;AACvC,sCAAsC,aAAa;AACnD;AACA;AACA;AACA,aAAa;AACb,4BAA4B,OAAO;AACnC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oCAAoC,uFAAI;AACxC;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,CAAC,CAAC,sDAAI,E;;;;;;;;;;;;;ACtvBN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACM;AACR;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE8D;AAChC;AACQ;AACwB;AACL;AACzD,WAAW,gGAAM;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;;AAEA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA,gDAAgD,yBAAyB;AACzE,iBAAiB,6BAA6B,UAAU;AACxD;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,4CAA4C,kCAAkC;AAC9E;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,yCAAyC,yDAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,eAAe;AAC7D,iDAAiD,gBAAgB;AACjE;AACA;AACA,kBAAkB;AAClB;AACA,8BAA8B,yDAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA,MAAM,gIAAa;;AAEnB;AACA;;AAEA;AACA,oBAAoB,wFAAM;AAC1B;AACA,OAAO;;AAEP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qEAAqE,wFAAM;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,qDAAI;;;;;;;;;;;;;;ACnRN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgH;AACV;AACN;AACF;AACU;AACQ;AACZ;AAC4B;AACtB;AACN;AACxD;AACA;AACF;AACD;AACC;AACE;AACQ;AACL;AACH;AACG;AACF;AACG;AACD;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEwE;AACpB;AACkB;AAC5C;AACoB;AACgB;AACV;AACpD;;AAEA;AACA;AACA,IAAI,uDAAuD;AAC3D,gBAAgB,0DAA0D;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA,QAAQ,4CAA4C;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA,aAAa,sCAAsC;AACnD;AACA;AACA,IAAI,kIAAe;AACnB;;AAEA;AACA;AACA,QAAQ,uBAAuB;AAC/B;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;AACA,gBAAgB,sDAAsD;AACtE;;AAEA;AACA,8CAA8C,kBAAkB;AAChE;AACA;AACA,sDAAsD,WAAW;AACjE;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA,sDAAsD,WAAW;AACjE;AACA,gBAAgB,yCAAyC;AACzD;;AAEA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA,6BAA6B,cAAc;AAC3C;AACA,aAAa,aAAa;AAC1B;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,qCAAqC,MAAM;AAC3C;AACA,WAAW,aAAa;AACxB;AACA,eAAe;AACf;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAuD;AAC/D,QAAQ,4DAA4D;AACpE,yBAAyB,qDAAqD;AAC9E;AACA;AACA;AACA;AACA;AACA,QAAQ,yCAAyC;AACjD;AACA;AACA,uCAAuC,qBAAqB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,SAAS;AACT;AACA,yCAAyC;AACzC;AACA;AACA;AACA,eAAe,KAAK;AACpB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,2BAA2B,gDAAgD;AAC3E;AACA,eAAe,KAAK;AACpB,0BAA0B,wCAAwC;AAClE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;;AAEA;AACA,sEAAsE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,+HAAY;AAChB;AACA,aAAa,+HAAY;AACzB;AACA;AACA;AACA;AACA,qBAAqB,+HAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6IAA0B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qIAAkB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,mCAAmC,+HAAY;AAC/C,+BAA+B,qIAAkB;AACjD;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,QAAQ,0DAA0D;AAClE;AACA;AACA;AACA,QAAQ,8CAA8C,oBAAoB;AAC1E,YAAY,sCAAsC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,QAAQ,8CAA8C,oBAAoB,sCAAsC;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,iBAAiB,uCAAuC;AACxD;AACA,eAAe,wCAAwC;AACvD,eAAe,kCAAkC;AACjD,iFAAiF,0BAA0B;AAC3G,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC,uCAAuC;AAC1E;AACA;AACA,eAAe,8BAA8B;AAC7C;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C,6CAA6C;AAC5F;AACA;AACA,eAAe,8BAA8B;AAC7C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mEAAQ;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,6CAA6C;AACrD;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,4BAA4B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO,iDAAiD,4CAA4C;AACnH,eAAe,8BAA8B;AAC7C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yDAAyD,2CAA2C;AACpG;AACA;AACA,eAAe,8BAA8B;AAC7C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,6IAA0B;AACzD;AACA;AACA,oCAAoC,iCAAiC;AACrE;AACA;AACA;AACA,eAAe;AACf;AACA,eAAe;AACf;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU,iGAAM;AAC3B;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,aAAa;AACb;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gDAAgD;AAChD;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,iIAAc;AACxC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,6CAA6C,aAAa;AAC9E;AACA;AACA,cAAc,6CAA6C;AAC3D;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,uCAAuC;AACtD,eAAe,SAAS;AACxB,eAAe,8BAA8B;AAC7C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,6DAA6D;AAC7E;AACA;AACA;AACA,eAAe,iBAAiB;AAChC,eAAe,OAAO;AACtB,QAAQ,aAAa,mBAAmB,+CAA+C;AACvF;AACA,GAAG;AACH;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,qBAAqB,gCAAgC;AACrD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA,4BAA4B,kCAAkC;AAC9D,qBAAqB,4CAA4C;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,gCAAgC,iBAAiB,EAAE,iBAAiB;AACpE;AACA;AACA;AACA,eAAe,4BAA4B;AAC3C,eAAe,sCAAsC;AACrD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAmD;AACnE,wCAAwC,cAAc;AACtD;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA,GAAG;AACH,CAAC;AAC8B;AAC/B,0FAAG,WAAW,2FAAY;;AAE1B;AACA,uCAAuC,uCAAuC;AAC9E;AACA;AACA;AACO;AACP;AACA,iCAAiC,yCAAyC;AAC1E;AACA,aAAa,sCAAsC;AACnD;AACA;AACA,IAAI,kIAAe;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6CAA6C;AAC7D;;AAEA;AACA,WAAW,wCAAwC;AACnD;AACA,gDAAgD,oDAAoD;AACpG;AACA;AACA,gBAAgB,uCAAuC;AACvD;;AAEA;AACA,wBAAwB,uEAAuE;AAC/F;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA,sDAAsD,mDAAmD;AACzG;AACA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA,+DAA+D,mDAAmD;AAClH,MAAM,oDAAoD;AAC1D,MAAM,kDAAkD;AACxD;AACA,aAAa,KAAK,iDAAiD,kDAAkD;AACrH,eAAe,EAAE,eAAe,mDAAmD;AACnF,MAAM,oDAAoD;AAC1D;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,8DAA8D,mDAAmD;AACjH,QAAQ,oDAAoD;AAC5D,iBAAiB,6CAA6C;AAC9D;AACA,eAAe,uCAAuC;AACtD,eAAe,SAAS;AACxB,eAAe,8BAA8B;AAC7C,iBAAiB,SAAS;AAC1B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAED;AACA;AACA;AACA,sBAAsB,8CAA8C;AACpE;AACA;AACA,yBAAyB,sCAAsC;AAC/D;AACA;AACA;AACO;AACP;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA,YAAY,iDAAiD;AAC7D;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,8BAA8B;AAC7C,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAED;AACA,2BAA2B,mDAAmD,iBAAiB;AAC/F;AACA;AACA;AACA;AACO;AACP;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gIAAa;AAC/B;AACA;;AAEA;AACA,gEAAgE,mDAAmD;AACnH,QAAQ,oDAAoD;AAC5D;AACA,gBAAgB,OAAO;AACvB;AACA,GAAG;AACH,CAAC;;AAED,yBAAyB,6CAA6C;AACtE,IAAI,yCAAyC;AAC7C;AACA,WAAW,uCAAuC;AAClD,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,8BAA8B,6CAA6C;AAC3E,4DAA4D;AAC5D;AACA;AACA,WAAW,uCAAuC;AAClD,WAAW,KAAK,6BAA6B,mDAAmD;AAChG,aAAa;AACb;AACA;AACA,gBAAgB,yCAAyC;AACzD;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA,qBAAqB,6CAA6C;AAClE;AACA,WAAW,uCAAuC;AAClD,WAAW,SAAS;AACpB,WAAW,KAAK,6BAA6B,mDAAmD;AAChG;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa;AACb;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,sCAAsC;AACjD,aAAa;AACb;AACA,cAAc,wEAAa;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,qBAAqB,4CAA4C;AACjE;AACA;AACA,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP;AACA,WAAW,sCAAsC;AACjD,aAAa,sCAAsC;AACnD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,yBAAyB,6IAA0B;AACnD;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA,sDAAsD,iGAAM;AAC5D;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAuC,4CAA4C;AACnF;AACA;AACA;AACA,SAAS,yCAAyC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yCAAyC;AACpD;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,+BAA+B,4CAA4C;AAC3E;AACA;AACA;AACA,SAAS,yCAAyC;AAClD,WAAW,yCAAyC,SAAS,MAAM;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yCAAyC;AACpD,WAAW,yCAAyC,SAAS,MAAM;AACnE;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,4CAA4C;AACpE;AACA;AACA;AACA;AACA;AACA,KAAK,kBAAkB;AACvB;AACA,WAAW,OAAO;AAClB,aAAa,sCAAsC;AACnD;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,4CAA4C;AAChE;AACA;AACA,MAAM,cAAc;AACpB,MAAM,QAAQ,yCAAyC;AACvD;AACA;AACA;AACA;AACA;AACA,MAAM,kBAAkB;AACxB,MAAM,UAAU,yCAAyC;AACzD;AACA;AACA,WAAW,sCAAsC;AACjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA,2CAA2C,qIAAkB;AAC7D,KAAK;AACL;AACA;AACA;AACA;;AAEA,iBAAiB,yCAAyC,uBAAuB,kCAAkC;AACnH,sBAAsB,4CAA4C,OAAO,yCAAyC;AAClH;AACA,WAAW,4BAA4B;AACvC,WAAW,sCAAsC;AACjD,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,qIAAkB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4FAAa;AAC7B;AACA;AACA,qBAAqB,6IAA0B;AAC/C;AACA;AACA,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb;AACA;AACA;;AAEA,yCAAyC;AACzC;AACA;AACA,WAAW,EAAE;AACb;AACA,yBAAyB,sDAAI;AAC7B;;AAEA,yCAAyC;AACzC;AACA;AACA,WAAW,EAAE;AACb;AACA;AACA;;AAEA,yCAAyC;AACzC;AACA;AACA,WAAW,EAAE;AACb;AACA,yBAAyB,gEAAc;AACvC;;AAEA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,wCAAwC;AAC5C;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA,wBAAwB,kCAAkC;AAC1D;AACA;AACA;AACA;AACA,MAAM,6CAA6C;AACnD,MAAM,gDAAgD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,MAAM;AAC1B;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,cAAc,6CAA6C;AAC3D,WAAW,6CAA6C;AACxD,cAAc;AACd;AACA;AACA,MAAM;AACN;AACA,gBAAgB;AAChB;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,KAAK;AACL;AACA,MAAM,0BAA0B,WAAW,kCAAkC;AAC7E,sEAAsE,kCAAkC;AACxG;AACA;AACA,yCAAyC,MAAM;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,cAAc,8CAA8C;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,cAAc,OAAO,uBAAuB,sCAAsC;AAClF;AACA,cAAc,8CAA8C;AAC5D,qBAAqB,2CAA2C;AAChE;AACA,cAAc,wDAAwD;AACtE,qBAAqB,6CAA6C;AAClE;AACA,cAAc,oGAAoG;AAClH,qBAAqB,uCAAuC;AAC5D;AACA,cAAc,2DAA2D;AACzE,qBAAqB,iDAAiD;AACtE;;AAEA;AACA;AACA,wCAAwC,8CAA8C;AACtF;AACA;AACA,MAAM,4CAA4C;AAClD,MAAM,uCAAuC;AAC7C,IAAI,8CAA8C;AAClD,MAAM,yCAAyC;AAC/C,MAAM,6CAA6C,MAAM;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,+CAA+C,MAAM;AACrD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,oCAAoC,eAAe;AACnD;AACA;AACA;AACA;AACA,6BAA6B,MAAM;AACnC;AACA,KAAK;AACL;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA,eAAe,8CAA8C;AAC7D;AACA;AACA;AACA,MAAM,4CAA4C;AAClD,MAAM,6CAA6C;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,aAAa;AACrC,QAAQ;AACR;AACA;AACA,KAAK;AACL;AACA;AACA,UAAU;AACV;;AAEA;AACA,wBAAwB,uCAAuC;AAC/D,0BAA0B,yDAAyD;AACnF;AACA;AACA;;AAEA;AACA,aAAa,yDAAyD;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,KAAK;AACL;AACA,yCAAyC,6CAA6C;AACtF,IAAI,gDAAgD;AACpD;AACA;AACA,WAAW,gBAAgB;AAC3B,IAAI,8CAA8C;AAClD,WAAW,SAAS;AACpB,aAAa;AACb;;AAEA;AACA,aAAa,yDAAyD;AACtE;AACA;AACA,WAAW,sCAAsC;AACjD,uCAAuC,8CAA8C;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,yCAAyC,6CAA6C;AACtF;AACA;AACA,WAAW,OAAO,iCAAiC,8CAA8C;AACjG,WAAW,OAAO,mCAAmC,8CAA8C;AACnG;AACA,WAAW,SAAS;AACpB,aAAa;AACb;;AAEA;AACA,QAAQ,8CAA8C;AACtD;AACA;AACA;AACA;;AAEA;AACA,UAAU,8CAA8C;AACxD;AACA;AACA;AACA,YAAY,QAAQ;AACpB;;AAEA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;;AAEA;AACA,0BAA0B,2CAA2C;AACrE,qBAAqB,mCAAmC;AACxD;AACA,YAAY,QAAQ;AACpB;;AAEA;AACA,0CAA0C;AAC1C;AACA,IAAI,mCAAmC;AACvC;AACA,YAAY,OAAO;AACnB,G;;;;;;;;;;;;;ACh5DA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACA,WAAW,+CAA+C;AAC1D;AACA,WAAW,uCAAuC;AAClD;AACA,WAAW,0CAA0C;AACrD;AACA,WAAW,SAAS;AACpB;AACA,WAAW,SAAS;AACpB;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,C;;;;;;;;;;;;;AC1DA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,uBAAuB;AAClC,aAAa,OAAO;AACpB;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,C;;;;;;;;;;;;;AC5CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoG;AACM;AACV;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB,CAAC,CAAC,qDAAI;;;;;;;;;;;;;;ACtCN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwG;AACwB;AACtB;AACN;AACJ;AACM;AACR;AACrD;AACW;AACR;AACI;AACA;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC2B;AAC2C;AAC7B;AACqC;AACpB;AAC0B;AACzB;AACD;AACI;AAInC;AAC6D;AACI;AACxC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gDAAgD;AACjF;AACA,eAAe,cAAc;AAC7B;AACA,aAAa,2BAA2B;AACxC,aAAa,6CAA6C;AAC1D;AACA;AACA;AACA,QAAQ,kIAAe;AACvB,gBAAgB,6HAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,iCAAiC,2FAAY;AAC7C;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,gBAAgB;AAChB;AACA,+BAA+B,+FAAgB;AAC/C;AACA,6CAA6C,eAAe;AAC5D;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,wBAAwB,aAAa;AACrC,+EAA+E,aAAa;AAC5F;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA,2BAA2B,kCAAkC;AAC7D;AACA;AACA;AACA,gBAAgB;AAChB;AACA,iCAAiC,6DAAW;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,2BAA2B,oFAAc;AACzC;AACA,SAAS;AACT;AACA;AACA;AACA,YAAY,oDAAoD;AAChE;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,4HAAS;AACb,WAAW,+HAAY;AACvB;AACA;AACA;AACA;AACA,gBAAgB,gIAAa;AAC7B;AACA,gCAAgC,6IAA0B;AAC1D;AACA,uCAAuC,+BAA+B;AACtE;AACA;AACA;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,uBAAuB,gIAAa;AACpC,aAAa;AACb,uCAAuC,kBAAkB;AACzD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,sCAAsC,kBAAkB;AACxD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,QAAQ,sDAAsD;AAC9D;AACA,eAAe,eAAe;AAC9B,eAAe,4CAA4C;AAC3D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,sEAAoB;AACjE,qBAAqB;AACrB;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qDAAqD,gCAAgC;AACrF;AACA;AACA;AACA,+BAA+B,oCAAoC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,OAAO;AAC5B;AACA,qCAAqC,sHAAyB,+EAA+E,aAAa;AAC1J;AACA,iBAAiB;AACjB;AACA;AACA;AACA,CAAC,CAAC,sDAAI;AACN;AACA,0BAA0B,gDAAgD;AAC1E,IAAI,sDAAsD;AAC1D;AACA;AACA;AACA;AAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kIAAe;AACvB,iBAAiB,6HAAU;AAC3B;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA,IAAI,4HAAS;AACb,WAAW,+HAAY;AACvB,CAAC,CAAC,sDAAI;AACN;AACA;AACA;AACA,cAAc,2DAA2D;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iDAAiD;AAClF;AACA;AACA,aAAa,0CAA0C;AACvD;AACA;AACA;AACA,QAAQ,kIAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,WAAW,+HAAY;AACvB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,oDAAoD;AACrF;AACA;AACA,aAAa,0CAA0C;AACvD;AACA;AACA;AACA;AACA,QAAQ,kIAAe;AACvB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA,4BAA4B,sDAAsD;AAClF,gFAAgF;AAChF,eAAe,qCAAqC;AACpD,QAAQ,0DAA0D;AAClE;AACA,yBAAyB,sDAAsD;AAC/E,oBAAoB,sDAAsD;AAC1E;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,4BAA4B,sDAAsD;AAClF;AACA,mDAAmD,qCAAqC;AACxF;AACA,yBAAyB,sDAAsD;AAC/E;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA,QAAQ,0EAA0E;AAClF;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+BAA+B;AAC5D;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,+DAA+D;AAC/D,sBAAsB,sDAAsD;AAC5E;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa,0CAA0C;AACvD;AACA;AACA,WAAW,+HAAY;AACvB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,iDAAiD,sBAAsB;AACvE,qCAAqC,oBAAoB;AACzD;AACA;AACA,QAAQ,oBAAoB,yBAAyB,sBAAsB;AAC3E;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,4BAA4B,wDAAwD;AACpF;AACA;AACA;AACA,cAAc;AACd;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,uFAAI;AAC5C,sCAAsC,uFAAI;AAC1C;AACA,wCAAwC,yFAAM;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb,gDAAgD,sBAAsB;AACtE;AACA,QAAQ,oBAAoB;AAC5B;AACA,gFAAgF,sBAAsB;AACtG;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,4GAAiB;AACvD,gCAAgC,iIAAc;AAC9C;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb,uDAAuD,sBAAsB;AAC7E,eAAe,oBAAoB;AACnC;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,8CAA8C,sEAAoB;AAClE;AACA;AACA;AACA;AACA,aAAa;AACb,+CAA+C,oBAAoB;AACnE,eAAe,sBAAsB;AACrC;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,oBAAoB,4BAA4B,gCAAgC;AAChF;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,+BAA+B,+EAAc;AAC7C;AACA;AACA;AACA;AACA,gBAAgB,qFAAoB;AACpC;AACA;AACA;AACA,0BAA0B,6GAAgB;AAC1C,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb,oBAAoB;AACpB;AACA;AACA,0BAA0B,4BAA4B;AACtD;AACA;AACA,gBAAgB,sEAAsE;AACtF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,GAAG;AACJ,0BAA0B,4DAA4D;AACtF;AACA;AACA;AACA;AACA,6DAA6D,sDAAsD;AACnH;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA,mDAAmD,gDAAgD;AACnG;AACA;AACA,IAAI,wDAAwD;AAC5D,IAAI,iEAAiE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAA4D;AAC/F,0CAA0C,yDAAyD;AACnG;AACA;AACA;AACA,WAAW,0CAA0C;AACrD;AACA;AACA,+CAA+C,gEAAgE;AAC/G,mFAAmF;AACnF;AACA;AACA;AACA,YAAY,SAAS;AACrB,WAAW,0CAA0C;AACrD;AACA;AACA,+CAA+C,kEAAkE;AACjH;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB,G;;;;;;;;;;;;;AC/zBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoG;AACM;AACV;AACF;AACnD;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2B;AACyB;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB,CAAC,CAAC,qDAAI;;;;;;;;;;;;;;ACnFN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AAC3D;AACW;AACR;AACI;AAChD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwE;AAC1B;AACZ;AAC2C;AACD;AACV;AACd;AACc;AAC5B;;AAEtC;AACA;AACA,IAAI,mCAAmC;AACvC;AACA;AACA,UAAU,kDAAkD;AAC5D,IAAI,uDAAuD;AAC3D;AACA;AACA,YAAY,4CAA4C;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA,eAAe,cAAc;AAC7B;AACA,aAAa,2BAA2B;AACxC;AACA;AACA,IAAI,kIAAe;AACnB;AACA,kDAAkD;AAClD,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,kDAAkD,0CAA0C;AAC5F;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,8CAA8C;AAC/D;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,sBAAsB,mCAAmC;AACzD;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,wBAAwB;AAC5D;AACA;AACA,gBAAgB;AAChB;AACA,gCAAgC,yFAAU;;AAE1C;AACA;AACA,iBAAiB,2CAA2C;AAC5D;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA,+CAA+C,eAAe;AAC9D,kCAAkC,uBAAuB;AACzD;AACA,gBAAgB,4BAA4B;AAC5C;;AAEA;AACA,eAAe,8CAA8C;AAC7D,QAAQ,gBAAgB,OAAO,oBAAoB;AACnD;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;;AAEA;AACA,oBAAoB,uCAAuC;AAC3D,MAAM,6CAA6C;AACnD;AACA,kBAAkB,6CAA6C;AAC/D,MAAM,6CAA6C;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yDAAyD;AAC3E;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA,kCAAkC,yDAAQ;AAC1C;;AAEA;AACA;AACA,QAAQ,2CAA2C;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,wCAAwC;AACzD;AACA,GAAG;AACH;AACA;AACA,2BAA2B,+DAAc;AACzC;AACA;AACA;;AAEA;AACA;AACA,iDAAiD;AACjD,YAAY,2BAA2B;AACvC;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,WAAW;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,gBAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,eAAe,mDAAmD;AAClE;AACA,GAAG;AACH;AACA;AACA,WAAW,iGAAU;AACrB;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA,eAAe,mDAAmD;AAClE;AACA,GAAG;AACH;AACA;AACA,WAAW,iGAAU;AACrB;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD;AACA,GAAG;AACH;AACA;AACA,0BAA0B,yDAAQ;AAClC;;AAEA;AACA,QAAQ,iDAAiD,MAAM,gBAAgB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gBAAgB,yBAAyB,mBAAmB;AAC9F;AACA,eAAe,sCAAsC;AACrD,oBAAoB,gBAAgB;AACpC;AACA,GAAG;AACH;AACA;AACA,MAAM,yDAAQ;AACd;;AAEA;AACA;AACA;AACA;AACA,cAAc,eAAe,iCAAiC,gBAAgB;AAC9E,cAAc,kBAAkB;AAChC;AACA;AACA,kCAAkC;AAClC,iDAAiD,wBAAwB;AACzE,uBAAuB;AACvB;AACA;AACA;AACA,QAAQ,eAAe;AACvB;AACA,0BAA0B,yCAAyC,MAAM,gBAAgB;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2FAAa;AAC/B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,wEAAwE,qBAAqB;AAC7F,+CAA+C,wBAAwB;AACvE;AACA;AACA,8DAA8D;AAC9D,yBAAyB,gBAAgB;AACzC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA,YAAY,4DAA4D;AACxE;AACA;AACA;AACA,GAAG;AACH,CAAC;AAC0B;AAC3B,0FAAG,OAAO,+FAAe;AACzB,0FAAG,OAAO,8FAAe,E;;;;;;;;;;;;;ACtiBzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACJ;AACF;AACrD;AACW;AACN;AACF;AACI;AAChD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwE;AACN;;AAElE;AACA,aAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,2CAA2C;AACxF;AACA;AACA;AACA;AACA,gDAAgD;AAChD,gDAAgD;AAChD;AACA,OAAO,kEAAkE;AACzE;AACA;AACA;AACA;AACA;AACA,qBAAqB,aAAa;AAClC,KAAK;AACL;AACA;AACA;AACA;AACA,4DAA4D;AAC5D,SAAS,2CAA2C;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,8CAA8C;AAClF;AACA,aAAa,2BAA2B,eAAe,uDAAuD;AAC9G;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;AACtB;AACA;AACA;AACA,KAAK;;AAEL,eAAe,kCAAkC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL,eAAe,kCAAkC;AACjD;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,YAAY,8DAA8D;AAC1E,qBAAqB,wCAAwC;AAC7D;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,kCAAkC;AACrD;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,6EAA6E,kBAAkB;AAC/F,QAAQ,uBAAuB;AAC/B,QAAQ,2CAA2C;AACnD;AACA,eAAe,YAAY;AAC3B;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,wCAAwC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iDAAiD;AAC7D;AACA,eAAe,UAAU,SAAS,0BAA0B;AAC5D,QAAQ,wCAAwC;AAChD,iBAAiB;AACjB,iBAAiB,SAAS;AAC1B,QAAQ,2DAA2D;AACnE;AACA,GAAG;AACH;AACA;AACA;AACA,2EAA2E,aAAa;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4FAAa;AAC/B;AACA;AACA;AACA,oCAAoC,iDAAiD;AACrF;AACA;AACA;AACA,mBAAmB,kCAAkC;AACrD;AACA;AACA;AACA;AACA,0BAA0B,6IAA0B;AACpD;AACA;AACA,+BAA+B,+BAA+B;AAC9D;AACA,kDAAkD,uBAAuB;AACzE;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA,8CAA8C,qBAAqB;AACnE;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA,gDAAgD,uBAAuB;AACvE;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA,yDAAyD,gCAAgC;AACzF,qCAAqC,0CAA0C;AAC/E;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,eAAe,kCAAkC;AACjD,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH,CAAC,CAAC,yFAAU,EAAE;AACd;AACA;AACA,WAAW,MAAM;AACjB,aAAa;AACwB;AACrC;AACA;AACA;AACA,GAAG;AACH,C;;;;;;;;;;;AC3PA;;AAEA;AACA,cAAc,mBAAO,CAAC,uXAA2L;AACjN;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,sHAAyD;AAC3E,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,mYAAiM;AACvN;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,sHAAyD;AAC3E,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,6XAA6L;AACnN;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,sHAAyD;AAC3E,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,qYAAiM;AACvN;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,sHAAyD;AAC3E,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,2YAAoM;AAC1N;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,sHAAyD;AAC3E,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,6XAA6L;AACnN;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,sHAAyD;AAC3E,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,iXAAyL;AAC/M;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,sHAAyD;AAC3E,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,gYAA8L;AACpN;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,sHAAyD;AAC3E,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,oXAA0L;AAChN;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,sHAAyD;AAC3E,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,yYAAiM;AACvN;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,sHAAyD;AAC3E,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,iXAAyL;AAC/M;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,sHAAyD;AAC3E,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,kYAAiM;AACvN;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,sHAAyD;AAC3E,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,sYAAmM;AACzN;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,sHAAyD;AAC3E,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,4XAA8L;AACpN;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,sHAAyD;AAC3E,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,gYAAgM;AACtN;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,sHAAyD;AAC3E,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,0XAA4L;AAClN;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,sHAAyD;AAC3E,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,0XAA4L;AAClN;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,sHAAyD;AAC3E,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,sWAAmL;AACzM;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,mHAAsD;AACxE,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;;;ACXA,gR;;;;;;;;;;;;;ACAA,2R;;;;;;;;;;;;;ACAA,0R;;;;;;;;;;;;;ACAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACJ;AACF;AAClD;AACF;AACA;AACA;AACC;AACD;AACE;AACQ;AACL;AACF;AACG;AACD;AACP;AACiB;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2D;AAC8B;;AAEzF;AACA,0CAA0C,0CAA0C,MAAM,0CAA0C;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA;AACA;AACA,UAAU,4CAA4C;AACtD,UAAU,wDAAwD;AAClE;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,0CAA0C;AAC1D;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA,gFAAgF;AAChF;AACA;AACA,eAAe,gCAAgC;AAC/C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,yEAAyE;AAC9F;AACA;AACA,eAAe,wCAAwC;AACvD,eAAe,QAAQ;AACvB,eAAe,0DAA0D;AACzE;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;;AAEA;AACA;AACA,oCAAoC,eAAe;AACnD;AACA;AACA,eAAe,gCAAgC;AAC/C,eAAe,gCAAgC;AAC/C;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;AACA,gCAAgC,uHAAa;AAC7C;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,qFAAO,EAAE;AACX;AACkC;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,iBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AC1PA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwC;;AAExC;AACA,4BAA4B,8CAA8C;AAC1E,IAAI,0CAA0C;AAC9C;AACA,IAAI,4DAA4D;AAChE;AACA,sDAAsD,yEAAyE;AAC/H;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA,2DAA2D,4CAA4C;AACvG;AACA,QAAQ,qDAAqD;AAC7D,8BAA8B,yEAAyE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH,CAAC,CAAC,4DAAW;;;;;;;;;;;;;;AC3Db;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AACjB;AACV;;AAE9B;AACA;AACA;AACA,4CAA4C;AAC5C,QAAQ,gDAAgD;AACxD;AACA,yEAAyE,kDAAkD;AAC3H;AACA,eAAe,kEAAkE;AACjF,IAAI,qDAAqD;AACzD,QAAQ,4CAA4C;AACpD,IAAI,0CAA0C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,6EAA6E;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,4DAAW,EAAE,uDAAM;AACjC;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;ACrIR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9C;AACJ;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwC;;AAExC;AACA,4BAA4B,8CAA8C;AAC1E,IAAI,qDAAqD;AACzD,iBAAiB,4DAA4D;AAC7E;AACA,sDAAsD,yEAAyE;AAC/H;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,WAAW,6HAAU;AACrB;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA,oDAAoD,4CAA4C;AAChG,gDAAgD,qDAAqD;AACrG,8BAA8B,yEAAyE;AACvG;AACA;AACA;AACA,eAAe,gCAAgC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH,CAAC,CAAC,4DAAW;AACb;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACtEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9C;AACD;AACP;AACiB;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEyD;AACjB;AACA;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB,YAAY,6HAAU;;AAEtB;AACA,sCAAsC,8CAA8C;AACpF,0CAA0C,mCAAmC;AAC7E;AACA;AACA,gBAAgB,oCAAoC;AACpD;;AAEA;AACA,sCAAsC,8CAA8C;AACpF,0CAA0C,mCAAmC;AAC7E;AACA;AACA,gBAAgB,oCAAoC;AACpD;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,4DAAW;AACzC,8BAA8B,6DAAW;;AAEzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;ACrIR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACyD;AACa;AACvB;AACA;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kIAAe;AACvB,eAAe,6HAAU;AACzB;AACA,IAAI,4HAAS;AACb,WAAW,+HAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,qEAAQ,GAAG,qEAAQ;AACjG,8EAA8E,qEAAQ,GAAG,qEAAQ;AACjG;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4FAAU;AAC7C;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA;AACA;AACA,CAAC,CAAC,mFAAM;;;;;;;;;;;;;;AC1EO,4Y;;;;;;;;;;;;;ACAA,2Y;;;;;;;;;;;;;;;;;;;;;;;;;ACAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACJ;AACF;AACc;AACjE;AACC;AACC;AACC;AACH;AACC;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iDAAiD;AAC5D;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,YAAY,qBAAqB,YAAY;AAC1H;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA,aAAa,YAAY,8CAA8C;AACvE;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,yDAAyD,YAAY;AACrE;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,YAAY,6HAAU;;AAEtB;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,4HAAS;AACX,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA,yDAAyD,+CAA+C;AACxG,4CAA4C,wCAAwC;AACpF,aAAa,+CAA+C;AAC5D;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6EAA6E,wCAAwC;AACrH,wCAAwC,+CAA+C;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH,CAAC,cAAc,mIAAgB;AAC/B;AACA;AACA,gCAAgC,+CAA+C;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA,qFAAqF,OAAO;AAC5F;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACoC;AAC7B;AACP;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;ACvKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AACrD;AACH;AACF;AACD;AACC;AACE;AACA;AACQ;AACL;AACF;AACD;AACG;AACZ;AACa;AACD;AACP;AACiB;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE0C;AACE;AACpB;AACA;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO,YAAY;AAChC,aAAa,OAAO;AACpB;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,+DAA+D,cAAc;AAC7E;AACA;AACA;AACA,YAAY,oCAAoC;AAChD;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA,SAAS,cAAc;AACvB;AACA;AACA,YAAY,oCAAoC;AAChD;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA,gBAAgB,mCAAmC;AACnD;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,+DAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,+DAAa;AACjC;AACA,OAAO;AACP,oCAAoC,6DAAG;AACvC;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,kBAAkB,+DAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,cAAc;AAC7B,iBAAiB,YAAY;AAC7B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,kBAAkB,+DAAa;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,cAAc;AAC7B,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,qBAAqB;AACpC,iBAAiB,OAAO;AACxB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+DAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,cAAc;AACtB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sBAAsB;AAC9D;AACA;AACA;AACA;AACA,qBAAqB,eAAe;AACpC,qBAAqB,eAAe;AACpC;AACA,qCAAqC;AACrC,6CAA6C;AAC7C;AACA;AACA,qCAAqC;AACrC,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sBAAsB;AAC9D;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,SAAS;AACT;AACA,qBAAqB,eAAe;AACpC,qBAAqB,eAAe;AACpC;AACA,qCAAqC;AACrC,2DAA2D;AAC3D,2DAA2D;AAC3D;AACA;AACA;AACA,wCAAwC,sBAAsB;AAC9D;AACA;AACA;AACA;AACA,qBAAqB,SAAS,eAAe,EAAE;AAC/C,qBAAqB,SAAS,eAAe,EAAE;AAC/C;AACA,qCAAqC;AACrC,6CAA6C;AAC7C,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,qBAAqB,eAAe;AACpC,qBAAqB,gBAAgB;AACrC;AACA,qCAAqC;AACrC,qCAAqC;AACrC;AACA,kBAAkB,aAAa;AAC/B;AACA,eAAe,mCAAmC;AAClD,iBAAiB;AACjB,iBAAiB,8CAA8C;AAC/D;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+DAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA,uDAAuD,QAAQ;AAC/D;AACA;AACA,eAAe,SAAS;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6IAA0B;AACpD;AACA;AACA,+BAA+B,+BAA+B;AAC9D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA,2BAA2B,6IAA0B;AACrD;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,2DAA2D;AACpF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,GAAG;AACH,CAAC;AACgC;AACjC,6DAAG,aAAa,8DAAY;;AAE5B;AACA,8BAA8B,2DAA2D;AACzF;AACA;AACA,YAAY,2DAA2D;AACvE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,G;;;;;;;;;;;;;AC5sBA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,2CAA2C;AAC3C,qCAAqC;AACrC,wCAAwC;AACxC,wCAAwC;AACxC;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,yCAAyC;AACtD;AACe;AACf;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,aAAa,4BAA4B;AACzC,G;;;;;;;;;;;;;ACjDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AAChD;AACH;AACN;AACK;AACS;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoE;;AAEpE;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA,wCAAwC;AACxC,oCAAoC;AACpC;AACA,aAAa,cAAc;AAC3B;AACA,aAAa,EAAE;AACf;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,WAAW;AAC5C;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA,eAAe,EAAE;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B;AACA,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,UAAU,uEAAa;AACvB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA,eAAe,uEAAa;AAC5B;AACA;;AAEA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,UAAU,uEAAa;AACvB;AACA,aAAa,uEAAa;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,uBAAuB,6IAA0B;AACjD;AACA;AACA,4BAA4B,iCAAiC;AAC7D;AACA,eAAe,uEAAa;AAC5B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,iDAAiD,oBAAoB;AACrE;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH,CAAC,GAAG;AACJ,WAAW,EAAE;AACb,aAAa,EAAE;AACc;AAC7B;AACA,SAAS,uEAAa;AACtB;;AAEA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa;AACb;AACA,SAAS,mEAAS;AAClB,C;;;;;;;;;;;;;AC5QA;AAAA;AAAgI;AAChI;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,WAAW,aAAa;AACxB,aAAa,OAAO;AACpB;AACe;AACf;AACA,kBAAkB,6IAA0B;AAC5C;AACA;AACA,uBAAuB,+BAA+B;AACtD;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,C;;;;;;;;;;;;;AClCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0C;AACC;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEuC;;AAEvC;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,kDAAkD,kDAAkD;AACpG;AACA;AACA,WAAW,aAAa;AACxB,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;;AAEA;AACA,uBAAuB,WAAW;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,6DAAQ,C;;;;;;;;;;;;;ACpIxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0C;AACU;AACH;AACD;AACS;AACA;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA,0CAA0C;AAC1C;AACA,WAAW,kCAAkC,iBAAiB,6BAA6B;AAC3F,WAAW,aAAa;AACxB,aAAa,eAAe;AAC5B;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoG;AACM;AAC9D;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEgG;AACvE;AACK;AACI;AACC;;AAEnC;AACA;AACA,oBAAoB,6CAA6C;AACjE;AACA,qDAAqD,0BAA0B;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,sBAAsB,gEAAM,GAAG,EAAE,6DAAY;AAC7C;AACA;AACA,sCAAsC,sDAAsD;AAC5F;AACA,aAAa,uCAAuC;AACpD,aAAa,OAAO;AACpB,aAAa,SAAS;AACtB,aAAa,OAAO,YAAY;AAChC,aAAa,8CAA8C;AAC3D;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,0FAA0F,aAAa;AACvG;AACA;AACA;AACA;AACA,QAAQ,+DAAM,aAAa,iEAAQ;AACnC;AACA;AACA;AACA;;AAEA;AACA,6BAA6B,6DAAY;AACzC,GAAG;AACH;AACA;AACA,sCAAsC,sDAAsD;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uCAAuC;AACpD,aAAa,OAAO;AACpB;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA,QAAQ,+DAAM,aAAa,iEAAQ;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,6DAAY;AAChB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,aAAa,KAAK;AAClB,eAAe,2CAA2C;AAC1D;AACA;AACA,WAAW,mFAAqB;AAChC;AACA,CAAC;AACc,wEAAe,EAAC;;AAE/B;AACA;AACA,oEAAoE,gDAAgD;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,iBAAiB;AACjB;AACA,yBAAyB,uCAAuC;AAChE;AACA,cAAc,0CAA0C;AACxD,YAAY;AACZ,UAAU,8DAA8D;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,+HAAY;AAC5C;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACA;AACA,EAAE,kIAAe;AACjB;AACA,EAAE,2EAAa;;AAEf;AACA;AACA,CAAC;AACD,gEAAM,yBAAyB,6DAAY;AAC3C;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,SAAS;AACtB,aAAa,OAAO,YAAY;AAChC,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA,aAAa,aAAa;;AAE1B;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACA,+DAA+D,4DAAG;AAClE;;AAEA;AACA,gDAAgD,iDAAiD;AACjG;AACA;AACA,G;;;;;;;;;;;;;ACjQA;AAAA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,8BAA8B;AAC3C;AACe;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AC7BA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,YAAY;AACvB,aAAa,OAAO;AACpB;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;ACzBA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE0C;;AAE1C;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,oCAAoC;AACjD;AACe;AACf,mBAAmB,qEAAY;AAC/B,mBAAmB,qEAAY;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AC5BA;AAAA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,YAAY;AACvB,aAAa,OAAO;AACpB;AACe;AACf;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;ACtBA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE8B;;AAE9B;AACA;AACA;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACe;AACf;AACA,QAAQ,uDAAM;AACd;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;ACzBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AAC1D;AACU;AACH;AACd;AACa;AACb;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACU;AACA;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEyB;AACK;AACJ;AACmB;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA,aAAa,kDAAkD;AAC/D;AACe;AACf;AACA;AACA;AACA;AACA,aAAa,wDAAM;AACnB,eAAe,wDAAM;AACrB,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gEAAgE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA,4CAA4C,yBAAyB;AACrE;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA,gCAAgC,qCAAqC;AACrE;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,YAAY;AACzB;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,4CAA4C,iCAAiC;AAC7E,QAAQ,0BAA0B;AAClC,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAM;AAC1B;AACA,OAAO;AACP;AACA;;AAEA;AACA,mDAAmD,0BAA0B;AAC7E;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6CAA6C,yBAAyB;AACtE,YAAY,iCAAiC;AAC7C;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,sBAAsB,6IAA0B;AAChD;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iDAAiD,sCAAsC;AACvF;AACA;AACA;AACA,eAAe,YAAY;AAC3B,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAI;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD,6DAAG,yBAAyB,8DAAe;;AAE3C;AACA,+CAA+C,sEAAsE;AACrH;AACA;AACA,aAAa,SAAS;AACtB,G;;;;;;;;;;;;;AC7QA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACe;AACf;AACA;AACA,CAAC,E;;;;;;;;;;;;;AC5BD;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;ACtBA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB;AACe;AACf;AACA,C;;;;;;;;;;;;;AClBA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa;AACb;AACe;AACf;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;ACxBA;AAAA;AAAA;AAAA;AAAA;AAAgD;AACA;AAChD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa;AACb;AACe;AACf;AACA,C;;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAgD;AACA;AAChD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa;AACb;AACe;AACf;AACA,C;;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAgD;AACA;AAChD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa;AACb;AACe;AACf;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AC9BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwG;AAC3D;AACO;AACP;AACG;AAChD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE8B;AACJ;AACkC;AACZ;AACT;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,kCAAkC;AAC7C,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;AACA;AACA,aAAa,+CAA+C;AAC5D;AACA,MAAM,oEAAU;AAChB;AACA;;AAEA,aAAa,gDAAgD;AAC7D;AACA,MAAM,oEAAU;AAChB;AACA;AACA,kCAAkC,8EAAqB;AACvD,wBAAwB,qDAAI;AAC5B,uBAAuB,qDAAI;AAC3B;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,iIAAc;AACtC;AACA;AACA,GAAG;AACH,qCAAqC,qDAAI;AACzC,4CAA4C,qDAAI,CAAC,uDAAM;AACvD;AACA;AACA;AACA;AACA,gBAAgB,iIAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,qDAAI;AAC9D,+BAA+B,wEAAe;;AAE9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,sCAAsC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS,gCAAgC,yCAAyC;AAC7F,WAAW,oBAAoB;AAC/B,WAAW,oBAAoB;AAC/B,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,4CAA4C;AACvD,IAAI,yCAAyC;AAC7C,WAAW,oBAAoB,2BAA2B,+CAA+C;AACzG,WAAW,oBAAoB,mCAAmC,gDAAgD;AAClH,WAAW,oBAAoB,4BAA4B,gDAAgD;AAC3G,WAAW,oBAAoB;AAC/B,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,iIAAc;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,OAAO;AACpB;AACA;AACA;AACA,uBAAuB,uDAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,YAAY;AACxB;;AAEA;AACA;AACA;AACA,YAAY,2CAA2C;AACvD;;AAEA;AACA,uCAAuC,yCAAyC;AAChF;AACA;AACA,YAAY,iBAAiB;AAC7B;;AAEA;AACA;AACA;AACA;AACA,YAAY,2CAA2C;AACvD;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,G;;;;;;;;;;;;;ACjUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgI;AACtB;AACN;AAC1D;AACA;AACK;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEgC;AACE;AACc;AAClB;AACQ;AACtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,gEAAgE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D;AAC9D;AACA;AACA,aAAa,sEAAsE;AACnF;AACA;AACA,IAAI,kIAAe;AACnB,wBAAwB,gEAAO;;AAE/B;AACA;AACA;AACA;AACA;AACA,gBAAgB,+DAA+D;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,QAAQ,oEAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,SAAS;AACrC;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK,UAAU,iEAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA,eAAe,2BAA2B;AAC1C;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,2BAA2B;AAC5C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,2BAA2B;AAC5C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,2BAA2B;AAC1C,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,2BAA2B;AAC1C,iBAAiB,OAAO;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gCAAgC;AACjD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,WAAW,GAAG,YAAY,GAAG,aAAa;AACjF,QAAQ,cAAc,GAAG,aAAa,MAAM,cAAc;AAC1D;AACA;AACA,eAAe,2BAA2B;AAC1C,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA,wDAAwD,6BAA6B;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,2BAA2B;AAC1C,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC,eAAe;AAClD;AACA;AACA,iBAAiB,2BAA2B;AAC5C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,UAAU,iEAAQ;AAClB;AACA;AACA;AACA,OAAO;AACP,2BAA2B,wEAAe;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,mCAAmC;AACpD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6IAA0B;AAClD;AACA;AACA,6BAA6B,+BAA+B;AAC5D;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,+DAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,GAAG;AACJ;AACA;AACA,WAAW,2BAA2B;AACtC,WAAW,6CAA6C;AAC7B;AAC3B;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa;AACb;AACA,OAAO,oEAAS;AAChB;AACA;AACA;AACA,C;;;;;;;;;;;;;AC9aA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACe;AACf;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgD;AAChD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEgC;AACN;AACI;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B;AACO;AACP;AACA;AACA,eAAe,qDAAI;AACnB,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,2BAA2B;AACtC,WAAW,OAAO;AAClB;AACA;AACA;AACA,yBAAyB,qDAAI;AAC7B;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB,qDAAI;AACzB;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,2BAA2B;AACtC,WAAW,2BAA2B;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,2BAA2B;AACtC,WAAW,2BAA2B;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,2BAA2B;AACtC,WAAW,2BAA2B;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,2BAA2B;AACtC,WAAW,2BAA2B;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa;AACb;AACA,MAAM,gEAAO;AACb;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa;AACb;AACA,MAAM,gEAAO;AACb;;AAEA;AACA,QAAQ,+DAAM;AACd;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA,iBAAiB,qDAAI;AACrB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,0BAA0B,qDAAI;AAC9B;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AClSA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,OAAO;AAClB;AACe;AACf;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;ACtBA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACe;AACf;AACA;AACA;AACA;AACA;AACA,cAAc,EAAE;AAChB,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AC5BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AAC1D;AACU;AACH;AACD;AACS;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA,iCAAiC,eAAe;AAChD;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,mDAAmD,eAAe;AAClE;AACA,aAAa,YAAY;AACzB,aAAa,YAAY;AACzB;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,eAAe;AACrC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;;ACpED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgH;AACR;AACwB;AAC1F;AACY;AACN;AACF;AACA;AACC;AACC;AACC;AACO;AACH;AACd;AACa;AACD;AACU;AACA;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEoC;AACZ;AACc;;AAEtC;AACmB;AACyB;AAC5C;AACA;;AAEA;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8FAA8F,aAAa;AAC3G;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,4DAAU;AAC7B;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,6IAA0B;AAC9C;AACA;AACA,yBAAyB,+BAA+B;AACxD;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,6CAA6C,2DAAS,qBAAqB,2DAAS;AACpF;AACA;;AAEA;AACA;;AAEA;AACA,gGAAgG,eAAe;AAC/G;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,MAAM,+DAAa;AACnB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,4EAA4E,eAAe;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACe,qEAAY,EAAC;;AAE5B;AACA;AACA;AACA,uDAAuD,6CAA6C;AACpG;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,kEAAkE;AACpF;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,OAAO,YAAY;AAC9B,WAAW,8CAA8C;AACzD;AACA;AACA;;AAEA;AACA;AACA,YAAY,UAAU,cAAc,WAAW;AAC/C;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,OAAO,YAAY;AAC9B,WAAW,8CAA8C;AACzD;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,mEAAmE;AACrF;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2DAA2D;AACrF,YAAY,2DAA2D,SAAS,YAAY;AAC5F;AACA;AACA,WAAW,kCAAkC;AAC7C,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,OAAO,YAAY;AAC9B,WAAW,8CAA8C;AACzD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,kCAAkC;AAC7C,WAAW,OAAO;AAClB;AACA,WAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA,kDAAkD,uCAAuC;AACzF;AACA;AACA;AACA,WAAW,wCAAwC;AACnD,WAAW,KAAK;AAChB,aAAa,EAAE;AACf,gCAAgC,2DAA2D;AAC3F;AACA;;AAEA;AACA,yCAAyC,wCAAwC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,kCAAkC;AAC7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,kCAAkC;AAC7C,WAAW,OAAO;AAClB,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,kCAAkC;AAC7C,WAAW,OAAO;AAClB;AACO;AACP;AACA,gCAAgC,6DAAG;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,kCAAkC;AAC7C;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6IAA0B;AAC/C;AACA;AACA,0BAA0B,iCAAiC;AAC3D;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,oBAAoB;AACjC,OAAO,wCAAwC;AAC/C,aAAa,gBAAgB;AAC7B,aAAa,UAAU;AACvB;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD,yBAAyB,iIAAc;AACvC;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,8BAA8B,2DAAS;AACvC,2BAA2B,qIAAkB;AAC7C,yDAAyD,qIAAkB;AAC3E;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,WAAW,kCAAkC;AAC7C,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB;AACA;AACA,mBAAmB,6IAA0B;AAC7C;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA,qBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA,wBAAwB,6BAA6B;AACrD;AACA;AACA;;AAEA;AACA,4BAA4B,sDAAsD;AAClF;AACA;AACA,WAAW,kCAAkC;AAC7C,WAAW,gBAAgB;AAC3B,G;;;;;;;;;;;;;ACzqBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkD;AACJ;AACH;AACE;AACG;AACJ;AACC;AAC7C;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F,EAAE,SAAS,EAAE;AACvG;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACe,4DAAG,EAAC;;AAEnB;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA,iFAAiF,EAAE,SAAS,EAAE;AAC9F;AACA;AACA;AACA,aAAa;AACb;AACO;AACP;;AAEA;AACA;;AAEA;AACA;AACA,8CAA8C,EAAE;AAChD,GAAG;AACH;AACA;AACA;AACA,C;;;;;;;;;;;;;ACtJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoG;AACM;AAC7D;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwB;;AAExB;AACA;AACA;AACA;AACA,6BAA6B,+HAAY;AACzC;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA,EAAE,kIAAe;AACjB;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,wCAAwC,sDAAsD;AAC9F;AACA;AACA,cAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,4DAAG;;AAEjB;AACA;AACA;AACA;AACA;AACA,aAAa,4DAAG;;AAEhB;AACA,0CAA0C,kDAAkD;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;;ACjFD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACF;AACA;AACA;AACC;AACI;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU,sDAAsD;AAChE;AACA;AACA,UAAU,4CAA4C;AACtD;AACA;AACA,UAAU,uCAAuC;AACjD;AACA;AACA,UAAU,uCAAuC;AACjD;AACA;AACA,UAAU,sDAAsD,GAAG,uCAAuC;AAC1G;AACA;AACA;AACA;AACA,iBAAiB,WAAW,GAAG,WAAW,OAAO,WAAW,GAAG,WAAW;AAC1E;AACA,KAAK;AACL,UAAU,sCAAsC,WAAW,IAAI,GAAG,uCAAuC;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,QAAQ,sCAAsC;AAC9C;AACA;AACA;AACA;AACA;AACA,IAAI,iEAAiE;AACrE,kCAAkC,sCAAsC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB,iFAAiF,sCAAsC;AACvH,aAAa,MAAM;AACnB;AACe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,2BAA2B,KAAK;AAChC;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa;AACb,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa;AACb;AACA,iBAAiB,wCAAwC;AACzD;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,eAAe,mCAAmC,+CAA+C;AAC9G;AACA;AACA;AACA;AACA;;AAEA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,eAAe,mCAAmC,6BAA6B;AAC5F;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;ACzQA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,aAAa;AACxB,aAAa;AACb;AACe;AACf;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;ACrBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACpD;AACb;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACU;AACzD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEiD;AACD;AACJ;AACpB;;AAExB;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA,cAAc,6BAA6B;AAC3C;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,YAAY;AACzB;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA,kBAAkB,+DAAa;AAC/B;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,iDAAiD,WAAW;AAC5D;AACA;AACA,eAAe,YAAY;AAC3B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iDAAiD,iBAAiB;AAClE;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACkC;AACnC,6DAAG,eAAe,kEAAe;AACjC,6DAAG,eAAe,iEAAe,E;;;;;;;;;;;;;ACpLjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+C;AACC;AACD;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACe;AACf;AACA,C;;;;;;;;;;;;;ACrBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyC;AACG;AACD;AACS;AACR;AACG;AACC;AACL;AACC;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAE4C;AACpB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;;AAEP;AACA,6BAA6B,yDAAyD;AACtF;AACA,qCAAqC,qCAAqC;AAC1E;AACA,WAAW,2CAA2C,gBAAgB,qCAAqC;AAC3G;AACA,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA,4DAA4D,qCAAqC;AACjG;AACA;AACA,iBAAiB,OAAO;AACxB;AACA,gBAAgB,8DAAa;AAC7B;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS,oCAAoC,sBAAsB,yDAAyD;AAC5H;AACA;AACA;AACA;AACA,qBAAqB,qDAAqD;AAC1E;AACA;AACA;AACA,qCAAqC,qCAAqC;AAC1E;AACA;AACA;AACA,WAAW,6BAA6B;AACxC,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACO;AACP,OAAO,qDAAG;AACV;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,YAAY;AACjC;AACA;AACA;;AAEA;AACA,sBAAsB,aAAa;AACnC;AACA;;AAEA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,G;;;;;;;;;;;;;AC3MA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACpG;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEiD;AACI;;AAErD;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,+FAA+F;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,mCAAmC,iEAAe;AAClD;;AAEA;AACA;AACA;AACA,aAAa,kCAAkC;AAC/C;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,iEAAO;AAClD,OAAO;AACP;;AAEA;AACA;AACA;AACA,eAAe,6BAA6B;AAC5C,YAAY,2CAA2C;AACvD,eAAe,SAAS;AACxB,QAAQ,0EAA0E;AAClF;AACA,eAAe,OAAO,YAAY;AAClC,eAAe,8CAA8C;AAC7D;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,oBAAoB,wEAAc;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA,8FAA8F,mBAAmB;AACjH;AACA,eAAe,qDAAqD;AACpE,iBAAiB,QAAQ;AACzB;AACA,GAAG;AACH;AACA;AACA,iDAAiD,iEAAO;AACxD;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;;ACjJD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0G;AACN;AACtD;AACH;AACG;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEkD;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,+DAA+D;AACrE;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,uEAAuE,kBAAkB;AACzF,aAAa,OAAO;AACpB;AACA,UAAU,uBAAuB;AACjC;AACA;AACA;AACA;AACA,IAAI,kIAAe;AACnB;AACA;AACA;AACA,eAAe,wCAAwC;AACvD;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA,4BAA4B,kCAAkC;AAC9D;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,8BAA8B,qCAAqC;AACnE;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,8BAA8B,+CAA+C;AAC7E;AACA;AACA;AACA;AACA,eAAe,+CAA+C,uBAAuB,kCAAkC;AACvH,0DAA0D,iDAAiD;AAC3G;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,2CAA2C,kBAAkB;AAC7D,QAAQ,yCAAyC,MAAM,4BAA4B;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8DAA8D,kBAAkB,MAAM;AACtF;AACA;AACA;AACA,cAAc;AACd;AACA,SAAS,+HAAY;AACrB;AACA;AACA;AACA,cAAc,4DAA4D;AAC1E,oDAAoD,kBAAkB,MAAM,uBAAuB;AACnG;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,6BAA6B,8EAAS;AACtC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,GAAG;AACH,CAAC,GAAG;AACJ;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACS;AAC7B;AACA;AACA,C;;;;;;;;;;;;;AC1JA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsC;AACM;AACQ;AACH;AACiB;AACL;AACb;AACS;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB;AACe;AACf,0FAA0F,aAAa;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,C;;;;;;;;;;;;;ACtDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmC;AACa;AACD;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,qBAAqB;AACnD,qBAAqB;AACrB;AACA,WAAW,OAAO;AAClB,aAAa,IAAI;AACjB;AACe;AACf;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;AC5BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0F;AACsB;AAC1E;AACY;AACN;AACF;AACD;AACC;AACU;AACN;AACG;AACL;AACT;AACQ;AACK;AACb;AACc;AACE;AACI;AACJ;AACE;AACM;AACf;AACG;AACU;AACA;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE0C;AACE;AACC;AAC7C;AACA;AACA;;AAEA;AACA;AACA,IAAI,kBAAkB;AACtB;AACA;AACA,MAAM;AACN,mBAAmB,yFAAyF;AAC5G,MAAM,sEAAsE;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,mEAAQ;AAChB;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,0BAA0B;AACxE;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,gBAAgB,+DAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,iFAAiF,aAAa;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,+DAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,+DAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+DAAa;AAC/B;AACA,KAAK;AACL;;AAEA,iBAAiB,OAAO;AACxB,kBAAkB,MAAM;AACxB,kBAAkB,MAAM,8DAA8D,gCAAgC;AACtH,kBAAkB,MAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL,iBAAiB,OAAO;AACxB,kBAAkB,SAAS,SAAS,+BAA+B;AACnE,kBAAkB,SAAS,aAAa,mCAAmC;AAC3E,kBAAkB,wCAAwC;AAC1D,kBAAkB,MAAM;AACxB,kBAAkB,MAAM,8CAA8C,wDAAwD;AAC9H,kBAAkB,IAAI;AACtB,QAAQ,wCAAwC,EAAE;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF,eAAe;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+DAAa;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB,iBAAiB,OAAO;AACxB;AACA,gBAAgB,+DAAa;AAC7B;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA,4EAA4E,eAAe;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA,iEAAM,kBAAkB,8DAAY;AACrB,wEAAe,EAAC;;AAE/B;AACA;AACA;AACA,WAAW,6CAA6C;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,GAAG;;AAEH;AACA,QAAQ,wCAAwC,SAAS,oEAAoE;AAC7H;AACA,UAAU,wDAAwD;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,mDAAmD;AAC9D,WAAW;AACX;AACA;AACA,WAAW,mDAAmD;AAC9D;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,mDAAmD;AAC9D,WAAW;AACX;AACA;AACA,WAAW,mDAAmD;AAC9D;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;AACA,QAAQ;AACR;AACA;AACA,YAAY;AACZ;AACA;AACA,GAAG;;AAEH;AACA,4BAA4B,wCAAwC;AACpE,MAAM,qEAAqE;AAC3E,mBAAmB,qEAAqE;AACxF,MAAM,0DAA0D;AAChE;AACA,UAAU,wDAAwD;AAClE;AACA;AACA;AACA;AACA;AACA,YAAY,mDAAmD;AAC/D,YAAY,mDAAmD;AAC/D,YAAY;AACZ,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,YAAY,mDAAmD;AAC/D,YAAY,mDAAmD;AAC/D,YAAY,mDAAmD;AAC/D,YAAY;AACZ,QAAQ;AACR;AACA;AACA,YAAY;AACZ;AACA;AACA,GAAG;AACH;;AAEA,mBAAmB,wDAAwD;AAC3E;AACA;AACA,WAAW,gCAAgC;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,+DAAa;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,+DAAa;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,+DAAa;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA,WAAW,0BAA0B;AACrC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,+DAAa;AAC3B;AACA,sBAAsB,qIAAkB;AACxC;AACA;AACA;;AAEA;AACA,IAAI,sBAAsB;AAC1B;AACA,WAAW,mBAAmB;AAC9B,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa;AACb;AACA;AACA;AACA,GAAG;AACH;;AAEA,yBAAyB,sBAAsB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,qCAAqC;AAC5C,OAAO,qCAAqC;AAC5C;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK,oBAAoB,sBAAsB;AAC1D,aAAa;AACb;AACA,wEAAwE,eAAe;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,+DAAa;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,UAAU,0HAAO;AACtB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,gBAAgB,+DAAa;AAC7B;AACA,GAAG;AACH;AACA;;AAEA,iBAAiB,qDAAqD,OAAO,cAAc;AAC3F;AACA;AACA,WAAW,QAAQ,gCAAgC,mCAAmC;AACtF,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,kCAAkC,MAAM;AACzD,SAAS,gBAAgB;AACzB;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAsB,KAAK,0BAA0B;AACpG;AACA;AACA,UAAU,uCAAuC;AACjD,UAAU,uCAAuC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU,+CAA+C;AACzD;AACA;AACA,iCAAiC,mCAAmC;AACpE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS,mDAAmD;AAC5D;AACA;AACA,MAAM;AACN;AACA;AACA,WAAW,UAAU,mCAAmC,sBAAsB;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;;AAEA,6BAA6B,iBAAiB;AAC9C,8BAA8B,kCAAkC;AAChE;AACA;AACA,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,mCAAmC,oBAAoB;AACvD,IAAI,4BAA4B,EAAE,gCAAgC;AAClE,qBAAqB,4BAA4B;AACjD;AACA;AACA,WAAW,UAAU,iCAAiC,sBAAsB;AAC5E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,uDAAuD,mDAAmD;AAC1G;AACA;AACA,MAAM;AACN,mBAAmB,yFAAyF;AAC5G,MAAM,sEAAsE;AAC5E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,eAAe,oBAAoB,WAAW,MAAM,WAAW;AACpF,KAAK;AACL;AACA,wBAAwB;AACxB;AACA,kBAAkB;AAClB,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,WAAW,EAAE;AACb;;AAEA;AACA;AACA;AACA;AACA,QAAQ,wEAAwE;AAChF;AACA;AACA;AACA;AACA,uDAAuD,WAAW,MAAM,WAAW;AACnF,+CAA+C,6BAA6B;AAC5E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,4CAA4C,WAAW,MAAM,WAAW;AACxE,KAAK;AACL;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,WAAW,EAAE;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,EAAE;AACb;;AAEA;AACA,UAAU,iCAAiC;AAC3C,IAAI,8CAA8C;AAClD;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,qDAAqD;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;;AAEA;AACA,qCAAqC,YAAY;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,iEAAiE,oDAAoD;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG,mBAAmB;AAC3B;AACA,iBAAiB;AACjB;AACA;AACA,uBAAuB,sDAAsD;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB,IAAI,IAAI,IAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,KAAK,GAAG,mBAAmB;AAC3B;AACA,uBAAuB;AACvB;AACA;AACA,WAAW,OAAO;AAClB,G;;;;;;;;;;;;;AC52BA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,yCAAyC;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,8CAA8C;AAC3D,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACe,mEAAU,E;;;;;;;;;;;;;ACzCzB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACe,4DAAG,E;;;;;;;;;;;;;ACvBlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmC;AACa;AACD;AACU;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwC;AACE;;AAE1C;AACA;AACA;AACA,kBAAkB,qBAAqB;AACvC;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,IAAI;AACjB;AACe;AACf,MAAM,uEAAa;AACnB,WAAW,oEAAW;AACtB,GAAG;AACH;AACA;AACA,C;;;;;;;;;;;;;AChCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2C;AACA;AACG;AAC9C;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,+DAA+D;AACtH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mHAAmH;AACnH;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,wBAAwB;AACnC;AACO;AACP,yGAAyG;AACzG;AACA;;AAEA;AACA;AACA,QAAQ,2DAA2D;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;ACnGA;AAAA;AAAA;AAAA;AAAA;AAAgD;AACA;AAChD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACe;AACf,iBAAiB;;AAEjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,C;;;;;;;;;;;;;ACxBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2C;AACA;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;AACO;AACP;AACA,C;;;;;;;;;;;;ACrEA;AAAA;AAAA;AAAA;AAA0F;AAC1F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEiD;AACL;AAC5C,oEAAoE,0HAAO;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kGAAkG;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,yEAAyE;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,uGAAuG;AAC7G,gBAAgB,kDAAkD;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8DAAa;AACzB,CAAC;AACD,oCAAoC,sEAAO;AAC3C,C;;;;;;;;;;;;;AC9IA;AACA;AACA;AACA;AACA,eAAe,KAAiD,oBAAoB,SAA+G,CAAC,oBAAoB,mBAAmB,SAAS,cAAc,4BAA4B,YAAY,qBAAqB,2DAA2D,uCAAuC,qCAAqC,oBAAoB,EAAE,iBAAiB,4FAA4F,eAAe,wCAAwC,SAAS,EAAE,mBAAmB,8BAA8B,qDAAqD,0BAA0B,6CAA6C,sBAAsB,6DAA6D,YAAY,eAAe,SAAS,iBAAiB,iCAAiC,iBAAiB,YAAY,UAAU,sBAAsB,mBAAmB,iDAAiD,iBAAiB,kBAAkB,aAAa,aAAa,kDAAkD,MAAM,kBAAkB,eAAe,MAAM,aAAa,YAAY,GAAG,IAAI,mCAAmC,SAAS,oCAAoC,YAAY,iBAAiB,aAAa,OAAO,kBAAkB,eAAe,6CAA6C,mHAAmH,oBAAoB,wFAAwF,kBAAkB,yBAAyB,IAAI,YAAY,SAAS,UAAU,gBAAgB,mCAAmC,6BAA6B,kBAAkB,iBAAiB,0BAA0B,kBAAkB,4FAA4F,kBAAkB,oCAAoC,kBAAkB,wDAAwD,iFAAiF,kBAAkB,+BAA+B,mBAAmB,SAAS,iDAAiD,cAAc,wCAAwC,kBAAkB,gBAAgB,yDAAyD,uBAAuB,sBAAsB,mCAAmC,mEAAmE,cAAc,YAAY,qCAAqC,cAAc,sCAAsC,cAAc,UAAU,wCAAwC,aAAa,UAAU,oBAAoB,2BAA2B,cAAc,wBAAwB,KAAK,cAAc,yCAAyC,aAAa,iBAAiB,6BAA6B,0BAA0B,mDAAmD,yCAAyC,sIAAsI,+CAA+C,oBAAoB,2BAA2B,IAAI,OAAO,0BAA0B,uBAAuB,QAAQ,QAAQ,2BAA2B,QAAQ,uBAAuB,SAAS,2BAA2B,EAAE,UAAU,0BAA0B,WAAW,yBAAyB,YAAY,kCAAkC,wBAAwB,YAAY,wBAAwB,cAAc,+EAA+E,8FAA8F,YAAY,iBAAiB,EAAE,iBAAiB,wGAAwG,QAAQ,WAAW,6DAA6D,aAAa,8BAA8B,UAAU,sBAAsB,gCAAgC,0CAA0C,0BAA0B,MAAM,WAAW,EAAE,4EAA4E,wBAAwB,wCAAwC,uBAAuB,KAAK,SAAS,WAAW,0BAA0B,cAAc,YAAY,WAAW;AACtjJ,oC;;;;;;;;;;;;;ACmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEe;EACf8C,KAAA;IACApB,KAAA;MACAqB,IAAA,EAAAC,MAAA;MACAC,OAAA;IACA;IACAC,UAAA;MACAH,IAAA,EAAAC,MAAA;MACAC,OAAA;IACA;IACAE,MAAA;MACAJ,IAAA,EAAAC,MAAA;MACAC,OAAA;IACA;IACAG,QAAA;MACAL,IAAA,EAAAC,MAAA;MACAC,OAAA;IACA;IACAI,KAAA;MACAN,IAAA,GAAAC,MAAA,EAAAM,KAAA;MACAL,OAAA;IACA;EACA;EAEAM,UAAA;IACAC,QAAA,EAAAC,8DAAA,CAAAC;EACA;EAEAC,IAAA,WAAAA,KAAA;IACA;MACAC,MAAA,EAAAC,oGAAA;MACAC,MAAA,OAAApC,KAAA;MACAqC,aAAA;QACAC,IAAA;UACAC,OAAA,GAAAC,6FAAA,EAAAC,kGAAA,EAAAC,yFAAA,EAAAC,2FAAA,EAAAC,8FAAA;UACAC,OAAA,GACA,gBACA,KACA,QACA,QACA,KACA,QACA,UACA;QAEA;QACAC,QAAA;UACAC,qBAAA;UACAR,OAAA,GACAC,6FAAA,EACAC,kGAAA,EACAC,yFAAA,EACAC,2FAAA,EACAC,8FAAA,EACAI,iFAAA,EACAC;UACA;UAAA,CACA;UACAJ,OAAA,GACA,gBACA,KACA,QACA,QACA,KACA,QACA,UACA,aACA,KACA,QACA,KACA,gBACA;UAEA;UACA;UACA;QACA;MACA;IACA;EACA;EAEAK,QAAA;IACAC,QAAA,WAAAA,SAAA;MACA,IACA,CAAAvB,KAAA,CAAAwB,OAAA,MAAAzB,KAAA,UAAAA,KAAA,IACAC,KAAA,CAAAwB,OAAA,MAAAzB,KAAA,UAAAA,KAAA,CAAA5B,MAAA,EACA;QACA;MACA;QACA;MACA;IACA;EACA;EAEAsD,OAAA;IACAC,OAAA,WAAAA,QAAApB,MAAA;MACA,IAAAqB,eAAA,GAAArB,MAAA,CAAAK,OAAA,CAAA9C,GAAA;MACA,IAAA+D,WAAA,GAAAtB,MAAA,CAAAuB,OAAA,CAAAC,IAAA;MACAF,WAAA,CAAAG,QAAA,CAAAC,EAAA,6BAAAC,GAAA,EAAA5B,IAAA;QACA,IAAAC,MAAA,CAAA4B,UAAA;UACA;QACA;QAEA,IAAAC,YAAA,GAAA9B,IAAA,CAAA8B,YAAA;QACA,IAAAC,OAAA,GAAAC,gHAAA,CAAAF,YAAA,CAAAG,OAAA;QAEAF,OAAA,GAAAT,eAAA,CAAAY,kBAAA,CAAAC,MAAA,CAAAJ,OAAA;QAEAT,eAAA,CAAAc,IAAA;UAAAL,OAAA,EAAAA,OAAA;UAAAD,YAAA,EAAAA;QAAA;QAEAP,WAAA,CAAAc,oBAAA;QAEAT,GAAA,CAAAU,IAAA;MACA;MAEArC,MAAA,CAAAuB,OAAA,CAAAC,IAAA,CAAAC,QAAA,CAAAC,EAAA,CACA,SACA,UAAAC,GAAA,EAAA5B,IAAA;QACA,IAAAA,IAAA,CAAAuC,MAAA;UACAtC,MAAA,CAAAuC,OAAA;QACA;UACAvC,MAAA,CAAAuC,OAAA;QACA;QAEAxC,IAAA,CAAAyC,cAAA;QACAb,GAAA,CAAAU,IAAA;QACArC,MAAA,CAAAuB,OAAA,CAAAC,IAAA,CAAAY,oBAAA;MACA,GACA;QAAAK,QAAA;MAAA,CACA;IACA;IACAC,MAAA,WAAAA,OAAA;MACA,KAAAC,KAAA,eAAAzC,MAAA;IACA;IACA0C,QAAA,WAAAA,SAAA;MACA,KAAAD,KAAA,eAAAzC,MAAA;IACA;IACA2C,OAAA,WAAAA,QAAA;IACAC,OAAA,WAAAA,QAAA;MACA,KAAAH,KAAA,eAAAzC,MAAA;IACA;EACA;AACA,CAAC,E;;;;;;;;;;;;;ACpMD;AAAA;AAAA,IAAI6C,MAAM,GAAG,SAASA,MAAMA,CAAA,EAAG;EAC7B,IAAIC,GAAG,GAAG,IAAI;IACZC,EAAE,GAAGD,GAAG,CAACE,KAAK,CAACD,EAAE;EACnB,OAAOA,EAAE,CAAC,YAAY,EAAE;IAAEE,KAAK,EAAE;MAAEC,IAAI,EAAE,MAAM;MAAEC,IAAI,EAAE;IAAS;EAAE,CAAC,EAAE,CACnEJ,EAAE,CAAC,KAAK,EAAE;IAAEK,KAAK,EAAE;MAAE,WAAW,EAAEN,GAAG,CAAC/B;IAAS;EAAE,CAAC,EAAE,CAClDgC,EAAE,CACA,KAAK,EACL;IAAEM,WAAW,EAAE;EAAU,CAAC,EAC1B,CACEN,EAAE,CAAC,UAAU,EAAE;IACbE,KAAK,EAAE;MACLnD,MAAM,EAAEgD,GAAG,CAAChD,MAAM;MAClBwD,MAAM,EAAER,GAAG,CAAC7C,aAAa,CAAC6C,GAAG,CAAC1D,UAAU;IAC1C,CAAC;IACDoC,EAAE,EAAE;MACF+B,KAAK,EAAET,GAAG,CAAC5B,OAAO;MAClBsC,IAAI,EAAEV,GAAG,CAACN,MAAM;MAChBiB,KAAK,EAAEX,GAAG,CAACJ,QAAQ;MACnBgB,KAAK,EAAEZ,GAAG,CAACH,OAAO;MAClBgB,KAAK,EAAEb,GAAG,CAACF;IACb,CAAC;IACDgB,KAAK,EAAE;MACLhG,KAAK,EAAEkF,GAAG,CAAC9C,MAAM;MACjB6D,QAAQ,EAAE,SAAVA,QAAQA,CAAYC,GAAG,EAAE;QACvBhB,GAAG,CAAC9C,MAAM,GAAG8D,GAAG;MAClB,CAAC;MACDC,UAAU,EAAE;IACd;EACF,CAAC,CAAC,CACH,EACD,CACF,CAAC,EACDjB,GAAG,CAACvD,KAAK,GACLwD,EAAE,CAAC,KAAK,EAAE,CACR,CAACvD,KAAK,CAACwB,OAAO,CAAC8B,GAAG,CAACvD,KAAK,CAAC,GACrBwD,EAAE,CAAC,MAAM,EAAE;IACTM,WAAW,EAAE,gBAAgB;IAC7BW,QAAQ,EAAE;MAAEC,SAAS,EAAEnB,GAAG,CAACoB,EAAE,CAACpB,GAAG,CAACvD,KAAK;IAAE;EAC3C,CAAC,CAAC,GACFwD,EAAE,CACA,KAAK,EACL;IAAEM,WAAW,EAAE;EAAiB,CAAC,EACjCP,GAAG,CAACqB,EAAE,CAACrB,GAAG,CAACvD,KAAK,EAAE,UAAU6E,OAAO,EAAEC,KAAK,EAAE;IAC1C,OAAOtB,EAAE,CAAC,KAAK,EAAE;MACfuB,GAAG,MAAAC,MAAA,CAAMF,KAAK,CAAE;MAChBL,QAAQ,EAAE;QAAEC,SAAS,EAAEnB,GAAG,CAACoB,EAAE,CAACE,OAAO;MAAE;IACzC,CAAC,CAAC;EACJ,CAAC,CAAC,EACF,CACF,CAAC,CACN,CAAC,GACFtB,GAAG,CAAC0B,EAAE,CAAC,CAAC,CACb,CAAC,CACH,CAAC;AACJ,CAAC;AACD,IAAIC,eAAe,GAAG,EAAE;AACxB5B,MAAM,CAAC6B,aAAa,GAAG,IAAI;;;;;;;;;;;;;;ACxDd;AACb,kBAAkB,mBAAO,CAAC,qGAAoC;AAC9D,qBAAqB,mBAAO,CAAC,2FAA+B;AAC5D,kBAAkB,mBAAO,CAAC,6FAAgC;AAC1D,iBAAiB,mBAAO,CAAC,iFAA0B;AACnD,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,wBAAwB,mBAAO,CAAC,mGAAmC;AACnE,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,cAAc,mBAAO,CAAC,yEAAsB;AAC5C,2BAA2B,mBAAO,CAAC,yFAA8B;AACjE,aAAa,mBAAO,CAAC,2FAA+B;AACpD,0BAA0B,mBAAO,CAAC,uFAA6B;;AAE/D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,wEAAwE,iCAAiC;AACzG,KAAK;;AAEL;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,WAAW,mBAAmB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;;;;;;;;;;;;;AClIa;AACb,sBAAsB,mBAAO,CAAC,6FAAgC;;AAE9D;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK,iBAAiB;AACtB,GAAG;AACH;;;;;;;;;;;;;;ACfa;AACb,kBAAkB,mBAAO,CAAC,qGAAoC;AAC9D,6BAA6B,mBAAO,CAAC,2GAAuC;AAC5E,eAAe,mBAAO,CAAC,6EAAwB;;AAE/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6FAA6F;AAC7F;AACA;;;;;;;;;;;;;;ACfa;AACb,aAAa,mBAAO,CAAC,2FAA+B;;AAEpD;AACA;AACA;;;;;;;;;;;;;;ACLa;AACb,eAAe,mBAAO,CAAC,6EAAwB;;AAE/C;;AAEA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;ACTa;AACb,iBAAiB,mBAAO,CAAC,iFAA0B;AACnD,YAAY,mBAAO,CAAC,qEAAoB;AACxC,kBAAkB,mBAAO,CAAC,qGAAoC;AAC9D,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,WAAW,mBAAO,CAAC,iFAA0B;AAC7C,kBAAkB,mBAAO,CAAC,iFAA0B;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,6BAA6B,EAAE;;AAErE;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;;ACtBY;AACb,YAAY,mBAAO,CAAC,qEAAoB;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;ACVa;AACb,0BAA0B,mBAAO,CAAC,uGAAqC;AACvE,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,6BAA6B,mBAAO,CAAC,2GAAuC;;AAE5E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,MAAM;AACd;AACA;;;;;;;;;;;;;AChBa;AACb,QAAQ,mBAAO,CAAC,uEAAqB;AACrC,WAAW,mBAAO,CAAC,qFAA4B;AAC/C,cAAc,mBAAO,CAAC,yEAAsB;AAC5C,gBAAgB,mBAAO,CAAC,+EAAyB;AACjD,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,wBAAwB,mBAAO,CAAC,iGAAkC;AAClE,oBAAoB,mBAAO,CAAC,uFAA6B;AACzD,+CAA+C,mBAAO,CAAC,uJAA6D;;AAEpH;;AAEA;AACA;AACA,GAAG,uFAAuF;AAC1F;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK,GAAG,qCAAqC;AAC7C;AACA,CAAC;;;;;;;;;;;;;AC/BY;AACb,QAAQ,mBAAO,CAAC,uEAAqB;AACrC,eAAe,mBAAO,CAAC,2FAA+B;;AAEtD;AACA;AACA;AACA,GAAG,qEAAqE;AACxE;AACA,CAAC;;;;;;;;;;;;;ACTY;AACb,QAAQ,mBAAO,CAAC,uEAAqB;AACrC,YAAY,mBAAO,CAAC,qEAAoB;AACxC,0BAA0B,mBAAO,CAAC,uIAAqD;;AAEvF;AACA,6CAA6C,uCAAuC,EAAE;;AAEtF;AACA;AACA,GAAG,4DAA4D;AAC/D;AACA,CAAC;;;;;;;;;;;;;ACZY;AACb,QAAQ,mBAAO,CAAC,uEAAqB;AACrC,WAAW,mBAAO,CAAC,qFAA4B;AAC/C,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,uBAAuB,mBAAO,CAAC,+FAAiC;AAChE,qCAAqC,mBAAO,CAAC,+HAAiD;AAC9F,qBAAqB,mBAAO,CAAC,yGAAsC;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG,gCAAgC;AACnC;AACA,CAAC;;;;;;;;;;;;;ACxBY;AACb,QAAQ,mBAAO,CAAC,uEAAqB;AACrC,iBAAiB,mBAAO,CAAC,iFAA0B;AACnD,qBAAqB,mBAAO,CAAC,6FAAgC;;AAE7D,GAAG,eAAe,GAAG,YAAY,EAAE;;AAEnC;AACA;AACA;;;;;;;;;;;;;ACTa;AACb,QAAQ,mBAAO,CAAC,uEAAqB;AACrC,iBAAiB,mBAAO,CAAC,iFAA0B;AACnD,6BAA6B,mBAAO,CAAC,+FAAiC;;AAEtE;AACA;AACA,GAAG,0EAA0E;AAC7E;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACXY;AACb,QAAQ,mBAAO,CAAC,uEAAqB;AACrC,kBAAkB,mBAAO,CAAC,mHAA2C;AACrE,+BAA+B,mBAAO,CAAC,+HAAiD;AACxF,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,iBAAiB,mBAAO,CAAC,mFAA2B;AACpD,6BAA6B,mBAAO,CAAC,2GAAuC;AAC5E,2BAA2B,mBAAO,CAAC,yGAAsC;AACzE,cAAc,mBAAO,CAAC,yEAAsB;;AAE5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,GAAG,uFAAuF;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACjCY;AACb,QAAQ,mBAAO,CAAC,uEAAqB;AACrC,kBAAkB,mBAAO,CAAC,qGAAoC;AAC9D,iBAAiB,mBAAO,CAAC,mFAA2B;AACpD,6BAA6B,mBAAO,CAAC,2GAAuC;AAC5E,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,2BAA2B,mBAAO,CAAC,yGAAsC;;AAEzE;;AAEA;AACA;AACA,GAAG,2EAA2E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACpBY;AACb,WAAW,mBAAO,CAAC,qFAA4B;AAC/C,kBAAkB,mBAAO,CAAC,qGAAoC;AAC9D,oCAAoC,mBAAO,CAAC,+HAAiD;AAC7F,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,6BAA6B,mBAAO,CAAC,2GAAuC;AAC5E,gBAAgB,mBAAO,CAAC,+EAAyB;AACjD,yBAAyB,mBAAO,CAAC,mGAAmC;AACpE,qBAAqB,mBAAO,CAAC,2FAA+B;AAC5D,iBAAiB,mBAAO,CAAC,mGAAmC;;AAE5D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACrDY;AACb,QAAQ,mBAAO,CAAC,uEAAqB;AACrC,aAAa,mBAAO,CAAC,qFAA4B;;AAEjD;AACA;AACA,GAAG,gCAAgC;AACnC;AACA,CAAC;;;;;;;;;;;;;ACRY;AACb,WAAW,mBAAO,CAAC,qFAA4B;AAC/C,kBAAkB,mBAAO,CAAC,qGAAoC;AAC9D,oCAAoC,mBAAO,CAAC,+HAAiD;AAC7F,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,6BAA6B,mBAAO,CAAC,2GAAuC;AAC5E,yBAAyB,mBAAO,CAAC,iGAAkC;AACnE,yBAAyB,mBAAO,CAAC,mGAAmC;AACpE,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,gBAAgB,mBAAO,CAAC,+EAAyB;AACjD,iBAAiB,mBAAO,CAAC,mGAAmC;AAC5D,oBAAoB,mBAAO,CAAC,qGAAoC;AAChE,YAAY,mBAAO,CAAC,qEAAoB;;AAExC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;AC9GY;AACb,QAAQ,mBAAO,CAAC,uEAAqB;AACrC,kBAAkB,mBAAO,CAAC,mHAA2C;AACrE,+BAA+B,mBAAO,CAAC,+HAAiD;AACxF,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,iBAAiB,mBAAO,CAAC,mFAA2B;AACpD,6BAA6B,mBAAO,CAAC,2GAAuC;AAC5E,2BAA2B,mBAAO,CAAC,yGAAsC;AACzE,cAAc,mBAAO,CAAC,yEAAsB;;AAE5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,GAAG,uFAAuF;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;;AC/BY;AACb,eAAe,mBAAO,CAAC,2EAAuB;AAC9C,iBAAiB,mBAAO,CAAC,iFAA0B;AACnD,kBAAkB,mBAAO,CAAC,qGAAoC;AAC9D,qBAAqB,mBAAO,CAAC,2FAA+B;AAC5D,6BAA6B,mBAAO,CAAC,6FAAgC;AACrE,iBAAiB,mBAAO,CAAC,+EAAyB;AAClD,qBAAqB,mBAAO,CAAC,yFAA8B;AAC3D,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,2BAA2B,mBAAO,CAAC,uFAA6B;AAChE,YAAY,mBAAO,CAAC,qEAAoB;AACxC,sBAAsB,mBAAO,CAAC,2GAAuC;;AAErE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;ACzGa;AACb;AACA,mBAAO,CAAC,qGAAoC;;;;;;;;;;;;;;ACF/B;AACb,iBAAiB,mBAAO,CAAC,+EAAyB;AAClD,qBAAqB,mBAAO,CAAC,yFAA8B;;AAE3D;AACA;AACA;AACA,6BAA6B,gEAAgE;AAC7F,CAAC;;;;;;;;;;;;;ACRY;AACb;AACA,mBAAO,CAAC,qGAAoC;;;;;;;;;;;;;ACF5C;AACA,kCAAkC,mBAAO,CAAC,8FAAyC;AACnF;AACA;AACA,cAAc,QAAS,iBAAiB,kBAAkB,2DAA2D,0BAA0B,gDAAgD,gBAAgB,uIAAuI,sCAAsC,4BAA4B,6BAA6B,gDAAgD,sBAAsB,iFAAiF,wBAAwB,gBAAgB,yMAAyM,sCAAsC,gBAAgB,yCAAyC,2CAA2C,gBAAgB,yHAAyH,sCAAsC,yBAAyB,0BAA0B,0DAA0D,yCAAyC;AAC5wC;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,8FAAyC;AACnF;AACA;AACA,cAAc,QAAS,wDAAwD,+BAA+B,oBAAoB,wCAAwC,aAAa,qDAAqD,YAAY,8CAA8C;AACtS;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,8FAAyC;AACnF;AACA;AACA,cAAc,QAAS,yBAAyB,oDAAoD;AACpG;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,8FAAyC;AACnF;AACA;AACA,cAAc,QAAS,uBAAuB,oBAAoB,oBAAoB,aAAa,8BAA8B,6BAA6B,uBAAuB,mBAAmB,qBAAqB,iBAAiB,8CAA8C,qBAAqB,gEAAgE,gBAAgB,oCAAoC,oBAAoB,mBAAmB,eAAe,8CAA8C,6BAA6B,gBAAgB,8DAA8D,4BAA4B,gBAAgB,oBAAoB,mCAAmC,wDAAwD,eAAe,gBAAgB,mPAAmP,gBAAgB,+DAA+D,wBAAwB,gBAAgB,gFAAgF,0BAA0B,0EAA0E,mCAAmC,mCAAmC,uBAAuB,eAAe,qCAAqC,cAAc,kBAAkB,gFAAgF,0BAA0B,0BAA0B,aAAa,qHAAqH,uCAAuC,oCAAoC,oBAAoB,UAAU,2CAA2C,wDAAwD,+DAA+D,0EAA0E,YAAY,eAAe,8DAA8D,mCAAmC,sCAAsC,gBAAgB,SAAS,iDAAiD,wEAAwE,cAAc,sFAAsF,mDAAmD,wEAAwE,cAAc,qFAAqF,oDAAoD;AAClwF;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,8FAAyC;AACnF;AACA;AACA,cAAc,QAAS,oBAAoB,oBAAoB,oBAAoB,aAAa,2BAA2B,aAAa,oCAAoC,iBAAiB,mBAAmB,eAAe,mCAAmC,6BAA6B,gBAAgB,4BAA4B,4BAA4B,gBAAgB,iCAAiC,cAAc,iBAAiB,mCAAmC,uBAAuB,aAAa,2FAA2F,uCAAuC,oCAAoC,iBAAiB,UAAU,2CAA2C,mCAAmC,+DAA+D,kDAAkD,YAAY,WAAW,4BAA4B,mCAAmC,sCAAsC,gBAAgB,SAAS,iDAAiD,sCAAsC,cAAc,oDAAoD,mDAAmD,sCAAsC,cAAc,mDAAmD,oDAAoD,iCAAiC,UAAU,qCAAqC,mDAAmD,qFAAqF,kEAAkE,YAAY,WAAW,4CAA4C,mCAAmC,SAAS,gBAAgB,SAAS,iDAAiD,UAAU,sDAAsD,cAAc,oEAAoE,mDAAmD,sDAAsD,cAAc,mEAAmE,mDAAmD,6CAA6C,cAAc,wEAAwE,SAAS,WAAW,8EAA8E,gBAAgB;AACj8E;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,oGAA+C;AACzF;AACA;AACA,cAAc,QAAS,gCAAgC,sBAAsB,yBAAyB,qBAAqB,iBAAiB,qDAAqD,cAAc,oBAAoB,qDAAqD,cAAc,6BAA6B,kBAAkB,2BAA2B,2BAA2B,oBAAoB,yBAAyB,sBAAsB,mBAAmB,sBAAsB,mBAAmB,qBAAqB,yGAAyG,qBAAqB,iFAAiF,wBAAwB,qBAAqB,uBAAuB,iEAAiE,mBAAmB,UAAU,0JAA0J,aAAa,6BAA6B,qDAAqD,6EAA6E,2DAA2D,+EAA+E,4DAA4D,gFAAgF,wEAAwE,qDAAqD,8DAA8D,6BAA6B,gBAAgB,wIAAwI,sCAAsC,6BAA6B,mBAAmB,eAAe,sBAAsB,+BAA+B,kBAAkB,4CAA4C,6CAA6C,cAAc,kBAAkB,6BAA6B,sDAAsD,8CAA8C,sCAAsC,0EAA0E,wBAAwB,oFAAoF,aAAa,4BAA4B,oDAAoD,4CAA4C,yBAAyB,oIAAoI,6DAA6D,qDAAqD,uFAAuF,mCAAmC,yFAAyF,mCAAmC,qEAAqE,0DAA0D,2HAA2H,6CAA6C,qCAAqC,2HAA2H,8CAA8C,oCAAoC,yCAAyC,gDAAgD,yFAAyF,sDAAsD,2FAA2F,uDAAuD,2EAA2E,mEAAmE,iEAAiE,yDAAyD,2DAA2D,kCAAkC,+DAA+D,oCAAoC,kJAAkJ,cAAc,iEAAiE,kBAAkB,oBAAoB,cAAc,eAAe,sBAAsB,qFAAqF,gBAAgB,qFAAqF,iBAAiB,2CAA2C,oDAAoD,2FAA2F,0DAA0D,6FAA6F,2DAA2D,+EAA+E,uEAAuE,mEAAmE,6DAA6D,2CAA2C,yCAAyC,uCAAuC,gBAAgB;AACzvL;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,oGAA+C;AACzF;AACA;AACA,cAAc,QAAS,+HAA+H,cAAc,MAAM,+CAA+C,oDAAoD,sCAAsC,8CAA8C,0DAA0D,6CAA6C,0DAA0D,4CAA4C,6DAA6D,mCAAmC,iDAAiD,gBAAgB,yIAAyI,sCAAsC,2DAA2D,iBAAiB,2DAA2D,kBAAkB,iDAAiD,uCAAuC,+BAA+B,2CAA2C,wDAAwD,uDAAuD,8DAA8D,iFAAiF,wEAAwE,gEAAgE,2EAA2E,gBAAgB,6LAA6L,sCAAsC,gDAAgD,2EAA2E,8CAA8C,gDAAgD,iDAAiD,0DAA0D,gCAAgC,wBAAwB,uDAAuD,uDAAuD,6DAA6D,6DAA6D,2FAA2F,kEAAkE,0DAA0D,2FAA2F,2EAA2E,mEAAmE;AACj6F;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,oGAA+C;AACzF;AACA;AACA,cAAc,QAAS,mBAAmB,qBAAqB,kBAAkB,oCAAoC,oBAAoB,4BAA4B,+CAA+C,WAAW,iEAAiE,aAAa,oCAAoC,mCAAmC,aAAa,0BAA0B,kBAAkB,+DAA+D,qBAAqB,sBAAsB,oHAAoH,YAAY,oHAAoH,wCAAwC,gCAAgC,oHAAoH,OAAO,oHAAoH,QAAQ,MAAM,uDAAuD,gBAAgB,kBAAkB,oCAAoC,oCAAoC,8CAA8C,iCAAiC,oCAAoC,8CAA8C,gCAAgC,qCAAqC,gDAAgD,mCAAmC,mFAAmF,qCAAqC,mFAAmF,sCAAsC,6EAA6E,mCAAmC,qDAAqD,4BAA4B,6BAA6B,iEAAiE,UAAU,gBAAgB,uBAAuB,uBAAuB,6CAA6C,qCAAqC,gBAAgB,qFAAqF,sCAAsC,yBAAyB,uBAAuB,qDAAqD,uDAAuD,SAAS,eAAe;AACnhF;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,oGAA+C;AACzF;AACA;AACA,cAAc,QAAS,gDAAgD,gBAAgB,iIAAiI,sCAAsC,yBAAyB,mFAAmF,gBAAgB,6MAA6M,sCAAsC,yBAAyB,4BAA4B,6BAA6B,kFAAkF,gBAAgB,2MAA2M,sCAAsC,yBAAyB,0BAA0B;AACrkC;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,oGAA+C;AACzF;AACA;AACA,cAAc,QAAS,gEAAgE,qBAAqB,iBAAiB,6DAA6D,sCAAsC,oCAAoC,SAAS;AAC7Q;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,oGAA+C;AACzF;AACA;AACA,cAAc,QAAS,4DAA4D,gBAAgB,yJAAyJ,sCAAsC,oEAAoE,aAAa,4BAA4B,8CAA8C,sCAAsC,+BAA+B,cAAc,qCAAqC,6BAA6B,wCAAwC,gBAAgB,wCAAwC,iBAAiB,4CAA4C,mCAAmC,2CAA2C,sCAAsC,gEAAgE,oDAAoD,gEAAgE,iDAAiD;AACxkC;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,oGAA+C;AACzF;AACA;AACA,cAAc,QAAS,eAAe,sBAAsB,MAAM,2EAA2E,YAAY,0BAA0B,2BAA2B,wBAAwB,sBAAsB,0BAA0B,cAAc,eAAe,yBAAyB,kBAAkB;AAC9V;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,oGAA+C;AACzF;AACA;AACA,cAAc,QAAS,SAAS,2BAA2B,kBAAkB,gBAAgB,2EAA2E,sCAAsC,kBAAkB,8CAA8C,sCAAsC,4CAA4C,8CAA8C,8DAA8D,qCAAqC,6CAA6C,sDAAsD,8CAA8C,sCAAsC,yDAAyD,mCAAmC,2BAA2B,wBAAwB,aAAa,4BAA4B,uEAAuE,+DAA+D,4BAA4B,uDAAuD,qDAAqD,0CAA0C,kCAAkC,gFAAgF,wEAAwE,2BAA2B,gDAAgD,oDAAoD,4CAA4C,iCAAiC,6EAA6E,qEAAqE,uCAAuC,IAAI,mCAAmC,2BAA2B,IAAI,kCAAkC,0BAA0B,IAAI,mCAAmC,2BAA2B,IAAI,kCAAkC,2BAA2B,+BAA+B,IAAI,mCAAmC,2BAA2B,IAAI,kCAAkC,0BAA0B,IAAI,mCAAmC,2BAA2B,IAAI,kCAAkC,2BAA2B;AAChwE;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,oGAA+C;AACzF;AACA;AACA,cAAc,QAAS,gBAAgB,cAAc,mBAAmB,aAAa,aAAa,gBAAgB;AAClH;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,oGAA+C;AACzF;AACA;AACA,cAAc,QAAS,kDAAkD,oCAAoC,mCAAmC,mBAAmB,qDAAqD,iCAAiC;AACzP;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,oGAA+C;AACzF;AACA;AACA,cAAc,QAAS,eAAe,sBAAsB,yBAAyB,qBAAqB,iBAAiB,oBAAoB,oBAAoB,aAAa,4BAA4B,6BAA6B,0BAA0B,sBAAsB,2DAA2D,cAAc,kCAAkC,kBAAkB,4BAA4B,YAAY,gBAAgB,+DAA+D,sCAAsC,YAAY,qBAAqB,2CAA2C,kBAAkB,eAAe,eAAe,6BAA6B,iBAAiB,WAAW,gBAAgB,gBAAgB,SAAS,oIAAoI,+CAA+C,0EAA0E,oCAAoC,wBAAwB,gBAAgB,mCAAmC,qDAAqD,0CAA0C,0DAA0D,2DAA2D,0CAA0C,wBAAwB,gBAAgB,qDAAqD,wDAAwD,yCAAyC,2CAA2C,cAAc,gEAAgE,wDAAwD,cAAc,uBAAuB,WAAW,WAAW,uCAAuC;AAC50D;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,oGAA+C;AACzF;AACA;AACA,cAAc,QAAS,SAAS,+DAA+D,qBAAqB,aAAa,kBAAkB,0BAA0B,+GAA+G,aAAa,kBAAkB,wDAAwD,8CAA8C,uDAAuD,wDAAwD,4CAA4C,8CAA8C,2CAA2C,wDAAwD,4CAA4C,8CAA8C,2CAA2C,wDAAwD,8CAA8C,cAAc,MAAM,8BAA8B,+BAA+B,kCAAkC,qBAAqB,gBAAgB,iFAAiF,sCAAsC,qBAAqB,6CAA6C,qCAAqC,gBAAgB,4CAA4C,8CAA8C,+GAA+G,QAAQ,SAAS,mBAAmB,uFAAuF,qDAAqD,mDAAmD,sDAAsD,mBAAmB,4CAA4C,iDAAiD,uFAAuF,8BAA8B,+BAA+B,6BAA6B,2CAA2C,qDAAqD,0CAA0C,uFAAuF,qDAAqD,sBAAsB,sDAAsD,gDAAgD,4CAA4C,8CAA8C,uFAAuF,8BAA8B,gCAAgC,+BAA+B,2CAA2C,kDAAkD,6CAA6C,yGAAyG,SAAS,wDAAwD,4CAA4C,2GAA2G,gDAAgD,4CAA4C,2GAA2G,iDAAiD,4CAA4C,yGAAyG,SAAS,wDAAwD,+CAA+C,2GAA2G,gDAAgD,+CAA+C,2GAA2G,iDAAiD,+CAA+C;AAC9jI;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,oGAA+C;AACzF;AACA;AACA,cAAc,QAAS,uCAAuC,oBAAoB,oBAAoB,aAAa,yBAAyB,sBAAsB,mBAAmB,wBAAwB,qBAAqB,uBAAuB,6CAA6C,wBAAwB,qBAAqB,uBAAuB,oCAAoC,8CAA8C,uDAAuD,kCAAkC,sCAAsC,qCAAqC,mCAAmC,sCAAsC,iEAAiE,wCAAwC,oCAAoC,2DAA2D,wBAAwB,gBAAgB;AACz5B;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,oGAA+C;AACzF;AACA;AACA,cAAc,QAAS,sBAAsB,kBAAkB,oCAAoC,uBAAuB,kBAAkB,mCAAmC,UAAU,oCAAoC,UAAU,MAAM,8CAA8C,4CAA4C,uBAAuB,6CAA6C,qCAAqC,gBAAgB,4CAA4C,8CAA8C,sCAAsC,WAAW,YAAY,mCAAmC,2DAA2D,wDAAwD,oCAAoC,mEAAmE,gEAAgE,oCAAoC,mEAAmE,gEAAgE,yIAAyI,6CAA6C;AACjvC;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,oGAA+C;AACzF;AACA;AACA,cAAc,QAAS,wDAAwD,0BAA0B,eAAe,MAAM,kEAAkE,SAAS,kBAAkB,qDAAqD,6CAA6C,qCAAqC,uBAAuB,yBAAyB,0BAA0B;AAC5a;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,oGAA+C;AACzF;AACA;AACA,cAAc,QAAS,kBAAkB,sBAAsB,yBAAyB,qBAAqB,iBAAiB,oBAAoB,oBAAoB,aAAa,8BAA8B,6BAA6B,yBAAyB,qBAAqB,yBAAyB,sBAAsB,mBAAmB,kCAAkC,oBAAoB,oBAAoB,aAAa,8BAA8B,6BAA6B,uBAAuB,mBAAmB,yBAAyB,sBAAsB,mBAAmB,mBAAmB,oBAAoB,YAAY,yCAAyC,qBAAqB,yGAAyG,aAAa,sDAAsD,qBAAqB,iBAAiB,sDAAsD,4BAA4B,6BAA6B,0BAA0B,sBAAsB,sDAAsD,qBAAqB,iBAAiB,yFAAyF,aAAa,eAAe,gBAAgB,qEAAqE,sCAAsC,eAAe,8CAA8C,kCAAkC,gDAAgD,oCAAoC,mCAAmC,sCAAsC,qCAAqC,mCAAmC,UAAU,0DAA0D,WAAW,SAAS,gBAAgB,SAAS,oFAAoF,mCAAmC,sCAAsC,kFAAkF,oCAAoC,yCAAyC,4BAA4B,mBAAmB,UAAU,cAAc,aAAa,gBAAgB,0CAA0C,qCAAqC,SAAS,mHAAmH,qCAAqC,qHAAqH,eAAe,+HAA+H,qCAAqC,mHAAmH,sCAAsC,iGAAiG,oCAAoC,eAAe,qHAAqH,cAAc,+HAA+H,oCAAoC;AAC10G;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,oGAA+C;AACzF;AACA;AACA,cAAc,QAAS,yDAAyD,kBAAkB,oBAAoB,mCAAmC,YAAY,kBAAkB,UAAU,aAAa,0BAA0B,8BAA8B,qBAAqB,oCAAoC,aAAa,QAAQ,SAAS,MAAM,4BAA4B,eAAe,SAAS,MAAM,4BAA4B,6CAA6C,mCAAmC,2BAA2B,oDAAoD,0CAA0C,mCAAmC,2BAA2B,8BAA8B,uDAAuD,+BAA+B,6BAA6B,+CAA+C,iDAAiD,gDAAgD,mBAAmB,4BAA4B,0CAA0C,oCAAoC,4BAA4B,oDAAoD,6CAA6C,mCAAmC,2BAA2B,8BAA8B,gCAAgC,+BAA+B,oDAAoD,+CAA+C,sBAAsB,gDAAgD,8CAA8C,iCAAiC,gBAAgB,yGAAyG,sCAAsC,iCAAiC,eAAe,gBAAgB,mCAAmC,yDAAyD,8CAA8C,kBAAkB,UAAU,uCAAuC,mBAAmB,SAAS,sDAAsD,+CAA+C,uCAAuC;AAClsE;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,iGAA4C;AACtF;AACA;AACA,cAAc,QAAS,cAAc,uBAAuB,iDAAiD,8BAA8B,sBAAsB,WAAW,YAAY,gBAAgB,MAAM,iBAAiB,6CAA6C,mCAAmC,gCAAgC,+BAA+B,+BAA+B,8BAA8B,0BAA0B,+BAA+B,qCAAqC,8BAA8B,gCAAgC,8CAA8C,uDAAuD,kDAAkD,0CAA0C,wCAAwC,8CAA8C,wCAAwC,iDAAiD,mDAAmD,oDAAoD,gDAAgD,0DAA0D,wCAAwC,8CAA8C,+CAA+C,2CAA2C,iDAAiD,gEAAgE,kDAAkD,mDAAmD,+CAA+C,qDAAqD,8DAA8D,+BAA+B,iCAAiC,gDAAgD,sDAAsD,gFAAgF,qDAAqD,0EAA0E,sDAAsD,qEAAqE,6DAA6D,4DAA4D,gCAAgC,yDAAyD,gDAAgD,6CAA6C,yCAAyC,uCAAuC,2DAA2D,wFAAwF,iEAAiE,6EAA6E,+DAA+D,4DAA4D,oDAAoD,8DAA8D,sDAAsD,wDAAwD,wDAAwD,2CAA2C,yCAAyC,gCAAgC,yDAAyD,yBAAyB,2CAA2C,2FAA2F,6GAA6G,uGAAuG,uDAAuD,yBAAyB,8BAA8B,yDAAyD,0BAA0B,4BAA4B,0BAA0B,yBAAyB,2BAA2B,mCAAmC,iDAAiD,SAAS,UAAU,SAAS,uBAAuB,qBAAqB,sBAAsB,wBAAwB,gBAAgB,qBAAqB,oCAAoC,yBAAyB,kGAAkG,2BAA2B,gBAAgB,mBAAmB,YAAY,WAAW,2BAA2B,iBAAiB,wBAAwB,uBAAuB,0BAA0B,qBAAqB,kGAAkG,YAAY,gIAAgI,eAAe,0BAA0B,aAAa,0BAA0B,0CAA0C,UAAU,SAAS,8BAA8B,iBAAiB,MAAM,uBAAuB,iEAAiE,2DAA2D,yEAAyE,wBAAwB,oDAAoD,6CAA6C,qDAAqD,oDAAoD,mDAAmD,0DAA0D;AACtmL;AACA;;;;;;;;;;;;;ACNA;AACA,kCAAkC,mBAAO,CAAC,2GAAsD;AAChG;AACA;AACA,cAAc,QAAS,iHAAiH,mCAAmC,yBAAyB,gCAAgC,GAAG,cAAc,iBAAiB,GAAG,mCAAmC,yCAAyC,GAAG;AACxV;AACA;;;;;;;;;;;;;;ACNA;AAAA;AAAwC;AACV;;AAE9B;AACA,eAAe,qEAAS,CAAC,wDAAI;;AAEd,iEAAQ,EAAC;;;;;;;;;;;;;;ACNxB;AAAA;AAAA;AAAA;AAAA;AAAwC;AACE;AACN;AACA;AACA;;AAEpC;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,6DAAS;AAChC,2BAA2B,8DAAU;AACrC,qBAAqB,2DAAO;AAC5B,qBAAqB,2DAAO;AAC5B,qBAAqB,2DAAO;;AAEb,6DAAI,EAAC;;;;;;;;;;;;;;AC/BpB;AAAA;AAA0C;AACA;;AAE1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,sEAAU,CAAC,8DAAU;AAC7C;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AC3B3B;AAAA;AAAA;AAAA;AAAA;AAAkD;AACE;AACN;AACA;AACA;;AAE9C;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B,kEAAc;AAC1C,gCAAgC,mEAAe;AAC/C,0BAA0B,gEAAY;AACtC,0BAA0B,gEAAY;AACtC,0BAA0B,gEAAY;;AAEvB,kEAAS,EAAC;;;;;;;;;;;;;;AC/BzB;AAAA;AAA0C;AACA;;AAE1C;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0BAA0B,sEAAU,CAAC,8DAAU;AAC/C;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;ACrB7B;AAAA;AAAwC;AACV;;AAE9B;AACA,UAAU,qEAAS,CAAC,wDAAI;;AAET,4DAAG,EAAC;;;;;;;;;;;;;;ACNnB;AAAA;AAAA;AAAA;AAAA;AAAgD;AACE;AACN;AACA;AACA;;AAE5C;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,iEAAa;AACxC,+BAA+B,kEAAc;AAC7C,yBAAyB,+DAAW;AACpC,yBAAyB,+DAAW;AACpC,yBAAyB,+DAAW;;AAErB,iEAAQ,EAAC;;;;;;;;;;;;;;AC/BxB;AAAA;AAAwC;AACV;;AAE9B;AACA,cAAc,qEAAS,CAAC,wDAAI;;AAEb,gEAAO,EAAC;;;;;;;;;;;;;;ACNvB;AAAA;AAAwC;AACV;;AAE9B;AACA,UAAU,qEAAS,CAAC,wDAAI;;AAET,4DAAG,EAAC;;;;;;;;;;;;;;ACNnB;AAAA;AAAA;AAAsC;AACM;AACA;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA,sBAAsB,4DAAQ;AAC9B;AACA;AACA;AACA;;AAEA;AACA,mDAAmD,+DAAW;AAC9D,yBAAyB,+DAAW;;AAErB,iEAAQ,EAAC;;;;;;;;;;;;;;AC1BxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACE;AACE;AACN;AACA;AACA;;AAEtC;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA,iCAAiC,6DAAS;AAC1C;AACA;;AAEA;AACA,wBAAwB,8DAAU;AAClC,4BAA4B,+DAAW;AACvC,sBAAsB,4DAAQ;AAC9B,sBAAsB,4DAAQ;AAC9B,sBAAsB,4DAAQ;;AAEf,8DAAK,EAAC;;;;;;;;;;;;;;AC1BrB;AAA8B;;AAE9B;AACA,aAAa,wDAAI;;AAEF,+DAAM,EAAC;;;;;;;;;;;;;;ACLtB;AAA8B;;AAE9B;AACA,iBAAiB,wDAAI;;AAEN,mEAAU,EAAC;;;;;;;;;;;;;;ACL1B;AAAA;AAAwC;AACV;;AAE9B;AACA,cAAc,qEAAS,CAAC,wDAAI;;AAEb,gEAAO,EAAC;;;;;;;;;;;;;;ACNvB;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,WAAW,MAAM;AACjB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACpBrB;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;ACrB/B;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACrBzB;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;ACpB9B;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACtB1B;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACxB3B;AAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA,qBAAqB,uEAAW;AAChC;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;AChB7B;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,0EAAiB,EAAC;;;;;;;;;;;;;;ACrBjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACG;AACR;AACE;AACD;AACS;;AAE7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACA;AACA,cAAc,mEAAO;AACrB,wBAAwB,uEAAW;AACnC,mCAAmC,oEAAQ;AAC3C,8CAA8C,wEAAY;AAC1D;AACA,6BAA6B,qEAAS;AACtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,mEAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;AChD7B;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACpBxB;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACnBzB;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB;AACA,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACzB3B;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB;AACA,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,yEAAgB,EAAC;;;;;;;;;;;;;;ACvBhC;AAA0C;;AAE1C;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,EAAE;AACf;AACA;AACA;AACA,wBAAwB,sEAAU;AAClC;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACd3B;AAAA;AAAA;AAAwC;AACA;AACI;;AAE5C;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA,SAAS,uEAAW,CAAC,qEAAS,SAAS,qEAAS;AAChD;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;AChB/B;AAAA;AAAwC;AACI;;AAE5C;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA,SAAS,uEAAW,CAAC,qEAAS;AAC9B;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACd5B;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACtBzB;AAA8C;;AAE9C;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA,gBAAgB,wEAAY;;AAEb,kEAAS,EAAC;;;;;;;;;;;;;;ACXzB;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACX5B;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACd1B;AAAA;AAAoD;AAC3B;;AAEzB;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACA;AACA,+BAA+B,8DAAE;AACjC;AACA,IAAI,2EAAe;AACnB;AACA;;AAEe,yEAAgB,EAAC;;;;;;;;;;;;;;ACnBhC;AAAA;AAAoD;AAC3B;;AAEzB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACA;AACA;AACA,4CAA4C,8DAAE;AAC9C;AACA,IAAI,2EAAe;AACnB;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AC3B3B;AAAyB;;AAEzB;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,QAAQ,8DAAE;AACV;AACA;AACA;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACpB5B;AAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA,EAAE,oEAAQ;AACV;AACA,GAAG;AACH;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;ACpB9B;AAAA;AAA0C;AACb;;AAE7B;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA,mBAAmB,sEAAU,SAAS,gEAAI;AAC1C;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;AChB1B;AAAA;AAA0C;AACT;;AAEjC;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA,mBAAmB,sEAAU,SAAS,kEAAM;AAC5C;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;AChB5B;AAAkD;;AAElD;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACA;AACA,4BAA4B,kEAAc;AAC1C,IAAI,0EAAc;AAClB;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;ACxB/B;AAA2B;;AAE3B;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,+DAAG;AAC1C;AACA;AACA;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACtBtB;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACrBzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgC;AACQ;AACI;AACF;AACI;AACF;AACJ;AACI;AACI;AACN;AACI;AACZ;AACgB;AACA;AACE;AACjB;AACE;AACN;AACM;AACN;AACF;AACI;;AAEjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,qEAAQ;AACf;AACA;AACA,cAAc,oEAAO;AACrB;AACA,aAAa,2EAAc;AAC3B;AACA,aAAa,qEAAS;AACtB;AACA,GAAG;AACH,cAAc,mEAAM;AACpB;;AAEA,QAAQ,qEAAQ;AAChB,aAAa,uEAAW;AACxB;AACA;AACA,sCAAsC,GAAG,4EAAe;AACxD;AACA;AACA,YAAY,yEAAa,QAAQ,wEAAY;AAC7C,YAAY,uEAAW,QAAQ,sEAAU;AACzC;AACA,KAAK;AACL;AACA;AACA;AACA,eAAe,2EAAc;AAC7B;AACA;AACA;AACA,wBAAwB,yDAAK;AAC7B;AACA;AACA;AACA;AACA;;AAEA,MAAM,kEAAK;AACX;AACA;AACA,KAAK;AACL,GAAG,UAAU,kEAAK;AAClB;AACA;AACA,KAAK;AACL;;AAEA;AACA,gBAAgB,iEAAY,GAAG,8DAAU;AACzC,gBAAgB,2DAAM,GAAG,yDAAI;;AAE7B;AACA,EAAE,qEAAS;AACX;AACA;AACA;AACA;AACA;AACA,IAAI,uEAAW;AACf,GAAG;AACH;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACrKzB;AAAA;AAAkD;AACrB;;AAE7B;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA,cAAc,gEAAI;AAClB;AACA,WAAW,0EAAc;AACzB;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACjB5B;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;AC1B9B;AAAqC;;AAErC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,SAAS,oEAAQ;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAEc,mEAAU,EAAC;;;;;;;;;;;;;;AC7B1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA,gCAAgC,6BAA6B,EAAE;AAC/D;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACpBzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsC;AACU;AACQ;AAClB;AACE;AACF;;AAEtC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA,iBAAiB,iEAAa;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,oEAAQ,SAAS,qEAAS;AACvC;AACA;AACA,eAAe,qEAAiB;AAChC;AACA;AACA;AACA,eAAe,4DAAQ;AACvB;AACA,iBAAiB,4DAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;AClE9B;AAAA;AAA0C;AACQ;;AAElD;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,aAAa;AAC1B;AACA,eAAe,0EAAc,CAAC,8DAAU;;AAEzB,iEAAQ,EAAC;;;;;;;;;;;;;;ACbxB;AAAA;AAAoD;AACF;;AAElD;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,aAAa;AAC1B;AACA,oBAAoB,0EAAc,CAAC,mEAAe;;AAEnC,sEAAa,EAAC;;;;;;;;;;;;;;ACb7B;AAAsC;;AAEtC;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,EAAE,oEAAQ;AACV;AACA;AACA,GAAG;AACH;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACpBzB;AAAqC;;AAErC;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAqC,oEAAQ;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;AC/B5B;AAAA;AAAuC;AACF;;AAErC;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;;AAEA,UAAU,qEAAS;AACnB;AACA;AACA;AACA,uDAAuD,qEAAS;AAChE;AACA;AACA;AACA,0BAA0B,oEAAQ;AAClC;AACA;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AC/BxB;AAAsC;;AAEtC;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA,EAAE,oEAAQ;AACV;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACpB1B;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;ACvB7B;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACtB3B;AAAA;AAAwC;AACQ;;AAEhD;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA,4BAA4B,iEAAa;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,QAAQ,qEAAS;AACjB;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACrC3B;AAAgD;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA,cAAc,yEAAa;;AAEZ,gEAAO,EAAC;;;;;;;;;;;;;;ACfvB;AAAA;AAAoC;AACP;;AAE7B;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA,mBAAmB,mEAAO,mBAAmB,wDAAI;AACjD;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACf1B;AAAA;AAA8C;AACjB;;AAE7B;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA,mBAAmB,wEAAY,mBAAmB,wDAAI;AACtD;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;ACf/B;AAAgD;;AAEhD;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA,mBAAmB,yEAAa;;AAEjB,qEAAY,EAAC;;;;;;;;;;;;;;ACd5B;AAAA;AAA4C;AACH;;AAEzC;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA,SAAS,uEAAW;AACpB,WAAW,sEAAU;AACrB,GAAG;AACH;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;AClB7B;AAAA;AAAsC;AACN;;AAEhC;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,aAAa,EAAE;AACf;AACA;AACA,SAAS,oEAAQ;;AAEjB;AACA;;AAEA;AACA,oBAAoB,iEAAK;AACzB;AACA;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACvBvB;AAAA;AAAwC;AACL;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA,SAAS,mEAAO,oBAAoB,qEAAS;AAC7C;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;ACnB9B;AAAA;AAAA;AAAkC;AACM;AACU;;AAElD;AACA;AACA;;AAEA;AACA,qBAAqB,0DAAM,GAAG,0DAAM;;AAEpC;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qEAAS;AACf,MAAM,0EAAc;AACpB;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;AC3B1B;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACbtB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;AClBvB;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACZzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACjB3B;AAAA;AAAA;AAAgD;AACR;AACQ;;AAEhD;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA,MAAM,yEAAa;AACnB,MAAM,yEAAa,QAAQ,6DAAS;AACpC;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACnB3B;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;ACtB/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsC;AACU;AACQ;AAClB;AACE;AACF;;AAEtC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA,8BAA8B,qEAAiB,GAAG,iEAAa;AAC/D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,oEAAQ,QAAQ,qEAAS;AACvC;AACA;AACA;AACA,YAAY,4DAAQ;AACpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,oEAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oEAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,yEAAgB,EAAC;;;;;;;;;;;;;;ACzEhC;AAA0C;;AAE1C;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA,EAAE,sEAAU;AACZ;AACA,GAAG;AACH;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACpB5B;AAAA;AAAA;AAAA;AAAA;AAAgC;AACM;AACT;AACK;AACF;;AAEhC;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,MAAM;AACjB,aAAa,EAAE;AACf;AACA;AACA,SAAS,oEAAQ;AACjB,WAAW,kEAAM;AACjB,8CAA8C,iEAAK,CAAC,gEAAI;AACxD,oCAAoC,iEAAK;AACzC;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACvB1B;AAAA;AAA0C;AACG;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,wEAAY,WAAW,sEAAU;AAC1C;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;ACjB/B;AAAA;AAA0C;AACG;;AAE7C;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,wEAAY,WAAW,sEAAU;AAC1C;;AAEe,0EAAiB,EAAC;;;;;;;;;;;;;;AChBjC;AAAA;AAA0C;AACG;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,wEAAY,WAAW,sEAAU;AAC1C;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACjB1B;AAAA;AAAoD;AACP;;AAE7C;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,0CAA0C,wEAAY,YAAY,wEAAY;AAC9E;AACA;AACA,SAAS,2EAAe;AACxB;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AC3B3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgC;AACY;AACF;AACI;AACZ;AACC;AACE;AACQ;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA,iBAAiB,mEAAO;AACxB,iBAAiB,mEAAO;AACxB,qCAAqC,kEAAM;AAC3C,qCAAqC,kEAAM;;AAE3C;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,oEAAQ;AAC3B,SAAS,oEAAQ;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yDAAK;AAC/B,wBAAwB,wEAAY;AACpC,QAAQ,uEAAW;AACnB,QAAQ,sEAAU;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA4B,yDAAK;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yDAAK;AAC7B,SAAS,wEAAY;AACrB;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;AClF/B;AAAA;AAAkC;AACW;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,wEAAY,WAAW,kEAAM;AACtC;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACjBzB;AAAA;AAAgC;AACY;;AAE5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,sBAAsB,yDAAK;AAC3B;AACA;AACA;AACA;AACA,cAAc,uEAAW;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AC7D3B;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACXzB;AAAA;AAAA;AAAA;AAAyC;AACH;AACD;AACC;;AAEtC;AACA;AACA;AACA;AACA,oCAAoC;;AAEpC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA,OAAO,oEAAQ,WAAW,oEAAQ;AAClC;AACA;AACA,gBAAgB,sEAAU;AAC1B,sBAAsB,oEAAQ;AAC9B;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;AC9C5B;AAAA;AAA0C;AACG;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,wEAAY,WAAW,sEAAU;AAC1C;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACjB5B;AAAA;AAAkC;AACW;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,wEAAY,WAAW,kEAAM;AACtC;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACjBzB;AAAA;AAAA;AAA0C;AACL;AACQ;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,wEAAY;AACrB,IAAI,oEAAQ,mCAAmC,sEAAU;AACzD;;AAEe,yEAAgB,EAAC;;;;;;;;;;;;;;AC3DhC;AAAA;AAAA;AAAA;AAAA;AAA4C;AACgB;AACvB;AACF;AACE;;AAErC;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,4DAAQ;AACnB;AACA;AACA,WAAW,mEAAO;AAClB,QAAQ,+EAAmB;AAC3B,QAAQ,uEAAW;AACnB;AACA,SAAS,oEAAQ;AACjB;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;AC9B5B;AAAA;AAA4C;AACF;;AAE1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA,OAAO,uEAAW;AAClB,WAAW,sEAAU;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AC7BxB;AAAA;AAAA;AAAqC;AACO;AACE;;AAE9C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA,OAAO,oEAAQ;AACf,WAAW,wEAAY;AACvB;AACA,gBAAgB,uEAAW;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;AChC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACT1B;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACbtB;AAAA;AAAsC;AACK;;AAE3C;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA,eAAe,uEAAW;;AAE1B,EAAE,oEAAQ;AACV;AACA,GAAG;AACH;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACrBvB;AAAA;AAAA;AAA4C;AACE;AACsB;;AAEpE;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA,kBAAkB,wEAAY;AAC9B;AACA,WAAW,mFAAuB;AAClC;AACA;AACA,gCAAgC,uEAAW;AAC3C;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACrB3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACjB;AACI;AACC;AAC0B;AACU;AACpC;;AAEhC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,SAAS;AACtB;AACA;AACA,MAAM,iEAAK,UAAU,8EAAkB;AACvC,WAAW,mFAAuB,CAAC,iEAAK;AACxC;AACA;AACA,mBAAmB,+DAAG;AACtB;AACA,QAAQ,iEAAK;AACb,QAAQ,uEAAW;AACnB;AACA;;AAEe,4EAAmB,EAAC;;;;;;;;;;;;;;AChCnC;AAAoC;;AAEpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA,mBAAmB,mEAAO;AAC1B;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACnBxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgC;AACsB;AAClB;AACY;AACX;AACJ;AACG;;AAEpC;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mEAAO;AACT,0BAA0B,yDAAK;AAC/B,QAAQ,oEAAQ;AAChB,MAAM,yEAAa;AACnB;AACA;AACA;AACA,qBAAqB,mEAAO;AAC5B;;AAEA;AACA;AACA;AACA,MAAM,4EAAgB;AACtB;AACA,GAAG,EAAE,0DAAM;AACX;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACzCzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsD;AACV;AACQ;AACZ;AACY;AACT;AACR;AACoB;AAClB;AACI;AACJ;AACU;AACF;AACT;AACW;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB;AACA;AACA;AACA,iBAAiB,oEAAO;AACxB,iBAAiB,oEAAO;AACxB;;AAEA;AACA,IAAI,4EAAgB;AACpB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gBAAgB,mEAAO;AACvB,2BAA2B,oEAAQ;AACnC,uCAAuC,yEAAY;;AAEnD;AACA;AACA,UAAU,mEAAO;AACjB;AACA;AACA,eAAe,6EAAiB;AAChC,mBAAmB,qEAAS;AAC5B;AACA;AACA;AACA,mBAAmB,uEAAW;AAC9B;AACA;AACA;AACA,mBAAmB,2EAAe;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa,0EAAa,cAAc,uEAAW;AACnD;AACA,UAAU,uEAAW;AACrB,mBAAmB,0EAAa;AAChC;AACA,gBAAgB,qEAAQ,cAAc,sEAAU;AAChD,mBAAmB,2EAAe;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,4EAAgB;AAClB;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;AC7F7B;AAAoC;;AAEpC;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mEAAO;AAChB;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACnBvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsC;AACF;AACU;AACV;AACM;AACF;AACY;AACf;AACF;;AAEnC;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,6BAA6B;AACxC,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA,gBAAgB,oEAAQ;AACxB,UAAU,mEAAO;AACjB;AACA,iBAAiB,mEAAO;AACxB;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,iBAAiB,4DAAQ;AACzB;;AAEA;AACA,cAAc,oEAAQ,YAAY,qEAAS,CAAC,gEAAY;;AAExD,eAAe,mEAAO;AACtB,mBAAmB,oEAAQ;AAC3B;AACA,KAAK;AACL,YAAY;AACZ,GAAG;;AAEH,SAAS,sEAAU;AACnB,WAAW,2EAAe;AAC1B,GAAG;AACH;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AChD3B;AAAA;AAA0C;AACX;;AAE/B;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA,SAAS,sEAAU;AACnB,WAAW,iEAAK;AAChB,GAAG;AACH;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AClBxB;AAAA;AAAA;AAAoC;AACA;AACE;;AAEtC;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,mEAAO;;AAEvB;AACA,MAAM,mEAAO,SAAS,oEAAQ;AAC9B;AACA;AACA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;AC7B1B;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACb5B;AAAoC;;AAEpC;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,aAAa,SAAS;AACtB;AACA;AACA;AACA,WAAW,mEAAO;AAClB;AACA;;AAEe,yEAAgB,EAAC;;;;;;;;;;;;;;ACfhC;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;ACb9B;AAAA;AAAA;AAAA;AAAA;AAAsC;AACM;AACQ;AACZ;AACA;;AAExC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA,6BAA6B,mEAAe,GAAG,+DAAW;AAC1D;AACA;AACA;;AAEA;AACA,aAAa,qEAAS;AACtB;AACA;AACA,WAAW,oEAAQ,QAAQ,qEAAS;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AClD3B;AAAA;AAAwC;AACJ;;AAEpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU,mEAAO;AACjB;AACA,OAAO;AACP,QAAQ,qEAAS;AACjB;AACA;AACA;AACA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACpC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACjB1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AC3BzB;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB;AACA,WAAW,SAAS;AACpB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACtB1B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;AClC1B;AAAA;AAAA;AAAqC;AACC;AACM;;AAE5C;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA,SAAS,uEAAW,CAAC,oEAAQ,cAAc,4DAAQ;AACnD;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AChBxB;AAAA;AAA4C;AACX;;AAEjC;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,aAAa,EAAE;AACf;AACA;AACA,SAAS,uEAAW,CAAC,kEAAM;AAC3B;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACd1B;AAAA;AAAA;AAAwC;AACI;AACX;;AAEjC;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA,cAAc,kEAAM;AACpB,SAAS,uEAAW,QAAQ,qEAAS;AACrC;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;ACjB9B;AAAA;AAAA;AAAA;AAAA;AAA4C;AACN;AACF;AACC;AACL;;AAEhC;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA,OAAO,oEAAQ;AACf;AACA;AACA,SAAS,oEAAQ;;AAEjB;AACA;AACA;AACA;;AAEA;AACA,cAAc,iEAAK;AACnB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,oEAAQ;AAC3B;AACA,aAAa,mEAAO,2BAA2B;AAC/C;AACA;AACA,IAAI,uEAAW;AACf;AACA;AACA;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;AClDvB;AAAA;AAAqC;AACD;;AAEpC;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,aAAa,SAAS;AACtB;AACA,mBAAmB,2DAAO,GAAG,4DAAQ;AACrC,EAAE,2DAAO;AACT;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AChB3B;AAAA;AAAA;AAAqC;AACa;AACb;;AAErC;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA,uBAAuB,kEAAc,GAAG,4DAAQ;AAChD,SAAS,0EAAc;AACvB;AACA;AACA,aAAa,oEAAQ;AACrB;AACA,GAAG;AACH;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;ACrB/B;AAAA;AAA4C;AACX;;AAEjC;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,aAAa,MAAM;AACnB;AACA;AACA,SAAS,uEAAW,CAAC,kEAAM;AAC3B;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACd3B;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AC9BzB;AAAsC;;AAEtC;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA,EAAE,oEAAQ;AACV;AACA;AACA,GAAG;AACH;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACrBxB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACpB1B;AAAA;AAAA;AAAwD;AACnB;AACA;;AAErC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gCAAgC,oEAAQ;AACxC;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,SAAS,6EAAiB,eAAe,4DAAQ;AACjD;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;ACzC/B;AAAqC;;AAErC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iEAAiE;AACjE;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,oEAAQ;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oEAAQ;;AAE9B;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEe,0EAAiB,EAAC;;;;;;;;;;;;;;AClEjC;AAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,8DAAE;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;AC7B9B;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACvBvB;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACnBzB;AAAqC;;AAErC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,MAAM,oEAAQ;AACd;AACA;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACvB5B;AAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACA,SAAS,oEAAQ;AACjB;AACA,GAAG;AACH;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACjB3B;AAAA;AAAA;AAAA;AAAkC;AACI;AACH;AACE;;AAErC;AACA;;AAEA;AACA,kBAAkB,0DAAM,GAAG,0DAAM;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mEAAO;AACb;AACA,WAAW,oEAAQ;AACnB;AACA,MAAM,oEAAQ;AACd;AACA;AACA;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACpC5B;AAAoD;;AAEpD;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA,sBAAsB,2EAAe;AACrC;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AClBxB;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACbzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsC;AACU;AACQ;AAClB;AACE;AACE;;AAE1C;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA,iBAAiB,iEAAa;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,qEAAiB;AAChC;AACA;AACA,gCAAgC,qEAAS;AACzC;AACA,aAAa,sEAAU;AACvB;AACA;AACA,eAAe,4DAAQ;AACvB,eAAe,4DAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACvExB;AAAA;AAAA;AAAA;AAAsC;AACT;AACK;AACF;;AAEhC;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,oEAAQ;AACjB,WAAW,kEAAM;AACjB,yCAAyC,iEAAK,CAAC,gEAAI;AACnD;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACnBzB;AAAA;AAAoC;AACA;;AAEpC;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA,SAAS,mEAAO,uBAAuB,mEAAO;AAC9C;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACjB1B;AAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACA,SAAS,oEAAQ;AACjB;AACA,GAAG;AACH;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;AClB1B;AAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,MAAM,qEAAS;AACf,MAAM,qEAAS;AACf;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACzBzB;AAAA;AAAA;AAA4C;AACJ;AACI;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,MAAM;AACjB,aAAa,EAAE;AACf;AACA;AACA;AACA,wBAAwB,+DAAW;AACnC;AACA;AACA,SAAS,uEAAW;AACpB,6CAA6C,qEAAS;AACtD,GAAG;AACH;;AAEe,yEAAgB,EAAC;;;;;;;;;;;;;;ACxBhC;AAAA;AAAA;AAAkD;AACN;AACN;;AAEtC;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA,oBAAoB,oEAAQ;AAC5B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,0EAAc;AACtC;AACA;AACA;AACA,SAAS,oEAAQ,CAAC,uEAAW;AAC7B;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACnCvB;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;ACtB7B;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACZxB;AAAuD;;AAEvD;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,aAAa;AAC1B;AACA;AACA,SAAS,6EAAiB;AAC1B;;AAEe,4EAAmB,EAAC;;;;;;;;;;;;;;ACbnC;AAAqC;;AAErC;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,SAAS;AACtB;AACA;AACA,8CAA8C,4DAAQ;AACtD;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACb5B;AAAA;AAAA;AAAA;AAAmC;AACH;AACc;AACT;;AAErC;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA,MAAM,mEAAO;AACb;AACA;AACA,SAAS,iEAAK,4BAA4B,wEAAY,CAAC,oEAAQ;AAC/D;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACpBxB;AAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA,eAAe,4DAAQ;;AAER,iEAAQ,EAAC;;;;;;;;;;;;;;ACbxB;AAAwC;;AAExC;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA,6CAA6C,qEAAS;AACtD;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACjBzB;AAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA,oBAAoB,uEAAW;AAC/B;AACA;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;AClB7B;AAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA,6BAA6B,uEAAW;AACxC;AACA;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;ACnB/B;AAA0C;;AAE1C;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,aAAa,YAAY;AACzB;AACA;AACA;AACA,MAAM,8DAAU,iBAAiB,8DAAU;AAC3C;AACA;;AAEe,yEAAgB,EAAC;;;;;;;;;;;;;;ACfhC;AAA8B;;AAE9B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,6BAA6B,wDAAI;AACjC;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;;AClC3B;AAAsD;;AAEtD;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA,wBAAwB,4EAAgB;AACxC;AACA;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;ACf7B;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AChB3B;AAAkC;;AAElC;AACA,kBAAkB,0DAAM,GAAG,0DAAM;AACjC;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACjB3B;AAAsD;;AAEtD;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA,wBAAwB,4EAAgB;AACxC;AACA;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;ACf/B;AAAqC;;AAErC;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oEAAQ;;AAE9B;AACA;AACA;AACA,sBAAsB,oEAAQ;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,yEAAgB,EAAC;;;;;;;;;;;;;;ACxChC;AAAsD;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,mBAAmB;AAC9B,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,4EAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;AC3C/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,YAAY,QAAQ;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACtC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,YAAY,QAAQ;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,yEAAgB,EAAC;;;;;;;;;;;;;;ACxChC;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACnBzB;AAAA;AAA4C;AACQ;;AAEpD;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,WAAW,OAAO,WAAW;AAC7B,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA,wBAAwB;;AAExB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM,2EAAe;AACrB,KAAK;AACL,MAAM,uEAAW;AACjB;AACA;AACA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACvC1B;AAAA;AAA0C;AACA;;AAE1C;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO,WAAW;AAC7B,aAAa,OAAO;AACpB;AACA;AACA,SAAS,sEAAU,SAAS,sEAAU;AACtC;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACf3B;AAAA;AAA0C;AACI;;AAE9C;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO,WAAW;AAC7B,aAAa,OAAO;AACpB;AACA;AACA,SAAS,sEAAU,SAAS,wEAAY;AACxC;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;ACf7B;AAA8B;;AAE9B;AACA,iBAAiB,wDAAI;;AAEN,mEAAU,EAAC;;;;;;;;;;;;;;ACL1B;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACpB5B;AAAA;AAAA;AAAA;AAAoD;AACF;AACJ;AACX;;AAEnC;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA,eAAe,mEAAO,eAAe,mEAAe,GAAG,kEAAc;AACrE;;AAEA,oCAAoC,wEAAY;AAChD;AACA;;AAEe,yEAAgB,EAAC;;;;;;;;;;;;;;ACtBhC;AAAA;AAAsC;AACY;;AAElD;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA,SAAS,oEAAQ;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,0EAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;ACpC9B;AAA2C;;AAE3C;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uEAAW;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;AC/B9B;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;ACxB7B;AAAA;AAA0C;AACZ;;AAE9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,sEAAU;;AAEvB;AACA,+BAA+B,wDAAI;AACnC;AACA;AACA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;AC3B1B;AAAA;AAAA;AAAA;AAAwC;AACE;AACM;AACX;;AAErC;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,oEAAQ;;AAErB,qBAAqB,sEAAU;AAC/B,QAAQ,yEAAa;AACrB;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ,qEAAS;AACjB;;AAEA;AACA;AACA;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;AChC/B;AAAA;AAAA;AAA4C;AACX;AACF;;AAE/B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA,WAAW,uEAAW,CAAC,iEAAK,CAAC,kEAAM;AACnC;AACA;;AAEe,yEAAgB,EAAC;;;;;;;;;;;;;;ACvBhC;AAAA;AAA0C;AACL;;AAErC;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sEAAU;AAChC;;AAEA;AACA;AACA,WAAW,oEAAQ;AACnB;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACpC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgC;AACU;AACI;AACE;AACR;AACU;AACpB;;AAE9B;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA,aAAa,sEAAU;;AAEvB;AACA;AACA;AACA;AACA,sBAAsB,qEAAS;;AAE/B;AACA;AACA;AACA;AACA;AACA,QAAQ,0EAAc;;AAEtB;AACA;AACA,aAAa,yEAAa;AAC1B,uBAAuB,gEAAY;AACnC;AACA;AACA,+BAA+B,wDAAI;AACnC,WAAW,iEAAK;AAChB;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AC7C3B;AAAA;AAAA;AAA8C;AACH;AACd;;AAE7B;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA,SAAS,uEAAW;AACpB,qBAAqB,wEAAY;AACjC,mBAAmB,gEAAI;AACvB,iCAAiC,+CAA+C;AAChF;AACA;AACA;AACA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACxB1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgD;AACV;AACF;AACQ;AACT;AACO;;AAE1C;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA,SAAS,oEAAQ;AACjB;AACA;AACA,iBAAiB,iEAAa;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,uEAAW;AAC3C,0BAA0B,iEAAa;AACvC;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,uEAAW;AAChC,yCAAyC,mEAAO;;AAEhD,kBAAkB,sEAAU;AAC5B;AACA;AACA;AACA,0BAA0B,uEAAW;AACrC,OAAO;AACP,uCAAuC,sEAAU;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yCAAyC,mEAAO;AAChD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;AC7E1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACU;AACR;AACJ;AACM;AACR;AACJ;AACc;AACpB;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,WAAW,MAAM;AACjB;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,sEAAU;;AAE/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,qEAAS;AACjC,yBAAyB,wEAAY;AACrC;AACA;AACA,aAAa,uEAAW;AACxB;AACA;AACA,aAAa,4EAAgB;AAC7B;AACA;AACA;AACA,uBAAuB,0EAAc;AACrC,aAAa,yEAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,mEAAO;AACpB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,yBAAyB,wDAAI;AAC7B,mBAAmB,sEAAU;AAC7B;AACA;AACA;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;AC3F5B;AAA8C;;AAE9C;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA,WAAW,wEAAY,yCAAyC;AAChE;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;AChB9B;AAAA;AAA8C;AACA;;AAE9C;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wEAAY;AAC5B,gBAAgB,wEAAY;AAC5B,OAAO;AACP,gBAAgB,wEAAY;AAC5B,gBAAgB,wEAAY;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEe,4EAAmB,EAAC;;;;;;;;;;;;;;ACrCnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgC;AACM;AACQ;AACR;AACE;AACF;;AAEtC;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA,SAAS,oEAAQ;AACjB,gBAAgB,oEAAQ,YAAY,qEAAS,CAAC,gEAAY;AAC1D,WAAW,oEAAQ;AACnB;AACA;AACA,eAAe,iEAAK;AACpB,OAAO;AACP,KAAK;AACL,GAAG;AACH;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;AC1B1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0C;AACI;AACN;AACE;AACA;AACM;;AAEhD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA,sCAAsC,wEAAY;;AAElD;AACA;AACA,yBAAyB,sEAAU;AACnC;AACA,eAAe,sEAAU,4BAA4B,sEAAU;AAC/D,SAAS,sEAAU;AACnB,MAAM,qEAAS,CAAC,yEAAa;AAC7B;AACA;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;AChC7B;AAAA;AAAA;AAAgC;AACU;AACZ;;AAE9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,WAAW,MAAM;AACjB;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,sEAAU;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAI;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iEAAK;AAChB;AACA;AACA;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;AC1C7B;AAAA;AAAA;AAAwC;AACU;AACb;;AAErC;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA,2CAA2C,0EAAc;AACzD;AACA;AACA;AACA,YAAY,oEAAQ;AACpB;AACA;AACA;AACA,KAAK;AACL,YAAY,oEAAQ;AACpB;AACA,yDAAyD,oEAAQ;AACjE,WAAW,qEAAS;AACpB;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AC7B3B;AAAA;AAAA;AAA0C;AACN;AACgB;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,MAAM;AACjB;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,sEAAU;AAChB,IAAI,mEAAO;AACX;AACA;AACA,SAAS,2EAAe;AACxB;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;ACvD7B;AAAqC;;AAErC;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA,cAAc,oEAAQ;AACtB,cAAc,oEAAQ;AACtB;AACA;AACA;AACA;;AAEe,kFAAyB,EAAC;;;;;;;;;;;;;;ACnBzC;AAAA;AAAA;AAAA;AAA8B;AACS;AACF;AACA;;AAErC;AACA,qBAAqB,wDAAI;AACzB;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA,aAAa,oEAAQ;AACrB,kDAAkD,qEAAS;AAC3D;AACA;AACA;AACA,kBAAkB,oEAAQ;AAC1B;;AAEA,cAAc,oEAAQ;AACtB;AACA;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AClC3B;AAAA;AAAA;AAA4B;AACC;AACa;;AAE1C;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA,kBAAkB,uDAAG,SAAS,sEAAU,KAAK,uDAAG,4BAA4B,wDAAI;AAChF,aAAa,uDAAG;AAChB;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AClBzB;AAAA;AAAA;AAAA;AAA4C;AACV;AACQ;AACA;;AAE1C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA,cAAc,kEAAM;AACpB;AACA,aAAa,sEAAU;AACvB;AACA;AACA,aAAa,sEAAU;AACvB;AACA,WAAW,uEAAW;AACtB;AACA;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;AC7B7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACF;AACE;AACE;AACE;AACZ;AACI;AACJ;AACgB;AACb;;AAEvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,qEAAS;AACrD,wCAAwC,qEAAS;AACjD;;AAEA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC,mEAAO;;AAE5C;AACA;AACA;AACA;;AAEA;AACA,IAAI,qEAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,sEAAU;AAC3B,GAAG;AACH,aAAa,uEAAW;AACxB,GAAG;AACH,aAAa,yEAAa;AAC1B,GAAG;AACH,aAAa,gEAAY;AACzB;AACA,sBAAsB,+DAAW,GAAG,2DAAO;AAC3C,SAAS,2EAAe;AACxB;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACzG1B;AAAyB;;AAEzB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA,OAAO,8DAAE;AACT;AACA;AACA;AACA;;AAEe,+EAAsB,EAAC;;;;;;;;;;;;;;AC5BtC;AAAA;AAAwC;AACH;;AAErC;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA,aAAa,EAAE;AACf;AACA;AACA,MAAM,oEAAQ,cAAc,oEAAQ;AACpC;AACA;AACA,IAAI,qEAAS;AACb;AACA;AACA;AACA;;AAEe,4EAAmB,EAAC;;;;;;;;;;;;;;AC3BnC;AAA+C;;AAE/C;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA,SAAS,yEAAa;AACtB;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;ACf/B;AAAkD;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA,mBAAmB,0EAAc;;AAElB,qEAAY,EAAC;;;;;;;;;;;;;;ACtE5B;AAAwC;;AAExC;AACA;AACA,eAAe,qEAAS;AACxB,WAAW,QAAQ;AACnB;AACA,GAAG;AACH,CAAC;;AAEc,uEAAc,EAAC;;;;;;;;;;;;;;ACV9B;AAAA;AAAA;AAAsC;AACE;AACF;;AAEtC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,4DAAQ;;AAE9D;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qEAAS;AACpB,iBAAiB,oEAAQ;AACzB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACnF3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AACQ;AACjB;AACmB;AACF;AACA;;AAE1C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,0DAAM,GAAG,0DAAM;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,8DAAU,cAAc,8DAAU;AAC3D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,8DAAE;;AAEf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,8DAAU;;AAE9B;AACA;AACA,4BAA4B,8DAAU;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,uEAAW;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;AC/G1B;AAA0C;;AAE1C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,iBAAiB,sEAAU;AAC3B;AACA,iBAAiB,sEAAU;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACzF5B;AAAkD;;AAElD;AACA;AACA,aAAa;AACb,YAAY;AACZ,YAAY;AACZ,cAAc;AACd,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA,qBAAqB,0EAAc;;AAEpB,uEAAc,EAAC;;;;;;;;;;;;;;ACpB9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEe,yEAAgB,EAAC;;;;;;;;;;;;;;ACrBhC;AAAA;AAAA;AAAmC;AACG;AACM;;AAE5C;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA,SAAS,uEAAW,CAAC,oEAAQ,kBAAkB,2DAAO;AACtD;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACfxB;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;;ACH1B;AAAA;AAAA;AAAkD;AACR;AACb;;AAE7B;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA,SAAS,0EAAc,SAAS,wDAAI,EAAE,8DAAU;AAChD;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACf1B;AAAA;AAAA;AAAkD;AACJ;AACb;;AAEjC;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA,SAAS,0EAAc,SAAS,0DAAM,EAAE,gEAAY;AACpD;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;AChB5B;AAAA;AAAoC;AACP;;AAE7B;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,EAAE;AACf;AACA,eAAe,2DAAO,GAAG,wDAAI;AAC7B,SAAS,2DAAO;AAChB;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACdvB;AAAwC;;AAExC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA,cAAc,6DAAS;AACvB,mCAAmC,6DAAS;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AC9B3B;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACZzB;AAAwC;;AAExC;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA,SAAS,qEAAS;AAClB;AACA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACjB1B;AAAA;AAA0D;AAC7B;;AAE7B;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA,eAAe,gEAAI;AACnB;;AAEA;AACA;AACA;;AAEA,kCAAkC,8EAAkB;AACpD;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACvB5B;AAAA;AAA8C;AACR;;AAEtC;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA,cAAc,oEAAQ;AACtB,SAAS,wEAAY;AACrB;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AChBzB;AAAoC;;AAEpC;AACA,mBAAmB,mEAAO;;AAEX,qEAAY,EAAC;;;;;;;;;;;;;;ACL5B;AAAkC;;AAElC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,0DAAM,GAAG,0DAAM;;AAEpC;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AC7CzB;AAAA;AAA4C;AACL;;AAEvC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA,qCAAqC,6DAAS;AAC9C;AACA;AACA;AACA;AACA,SAAS,uEAAW;AACpB;AACA,GAAG;AACH;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;AC7B1B;AAAA;AAAA;AAAA;AAAwC;AACM;AACJ;AACH;;AAEvC;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA,uCAAuC,6DAAS;AAChD;AACA;AACA,IAAI,qEAAS,SAAS,sEAAU;AAChC,aAAa,wEAAY;AACzB;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACxB5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsC;AACV;AACQ;AACR;AACQ;AACM;AACJ;;AAEtC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,yBAAyB,oEAAQ,CAAC,4DAAQ;AAC1C,oBAAoB,oEAAQ,CAAC,uDAAG;AAChC,wBAAwB,oEAAQ,CAAC,2DAAO;AACxC,oBAAoB,oEAAQ,CAAC,uDAAG;AAChC,wBAAwB,oEAAQ,CAAC,2DAAO;;AAExC;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA,aAAa,8DAAU;;AAEvB;AACA,KAAK,4DAAQ,eAAe,4DAAQ;AACpC,KAAK,uDAAG,eAAe,uDAAG;AAC1B,KAAK,2DAAO,WAAW,2DAAO;AAC9B,KAAK,uDAAG,eAAe,uDAAG;AAC1B,KAAK,2DAAO,eAAe,2DAAO;AAClC;AACA,iBAAiB,sEAAU;AAC3B;AACA,4BAA4B,oEAAQ;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACzDtB;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACZxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC;AACtC,oCAAoC;AACpC,2DAA2D;AAC3D,6DAA6D;AAC7D;AACA;AACA,UAAU;AACV;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;AChCvB;AACA,uBAAuB;AACvB;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;AChB9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsC;AACK;AACR;AACC;AACC;AACL;;AAEhC;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,oEAAQ;;AAEjB;AACA;AACA;;AAEA;AACA,cAAc,iEAAK;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oEAAQ,YAAY,mEAAO;AAChD,KAAK,mEAAO,YAAY,uEAAW;AACnC;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACtCvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACzB1B;AACA,yCAAyC,EAAE;;AAE3C;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;ACd9B;AAA8C;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gEAAY,GAAG,wEAAY;AAC7C;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACdzB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;AChB1B;AAA8C;;AAE9C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA,MAAM,gEAAY;AAClB;AACA;AACA;AACA;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;AC7BvB;AAA8C;;AAE9C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,SAAS,gEAAY;AACrB;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACtBvB;AAA8C;;AAE9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,eAAe,gEAAY;AAC3B;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACtBvB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;ACzB9B;AAAA;AAAA;AAAA;AAAA;AAAsD;AACN;AACJ;AACA;AACQ;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,aAAa,4EAAgB;;AAE7B;AACA;AACA;;AAEA;AACA,aAAa,yEAAa;;AAE1B;AACA;AACA;AACA,aAAa,2EAAe;;AAE5B;AACA;;AAEA;AACA;AACA;;AAEA;AACA,aAAa,uEAAW;;AAExB;AACA;;AAEA;AACA,aAAa,uEAAW;AACxB;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;AC5E9B;AAAA;AAAA;AAA0C;AACI;AACF;;AAE5C;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA,sDAAsD,uEAAW;AACjE,MAAM,sEAAU,CAAC,wEAAY;AAC7B;AACA;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;ACjB/B;AACA,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;;AAEe,0EAAiB,EAAC;;;;;;;;;;;;;;ACtBjC;AAAA;AAAA;AAAkC;AACS;AACR;;AAEnC;AACA,uBAAuB,0DAAM,GAAG,0DAAM;;AAEtC;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,mEAAO,WAAW,uEAAW;AACtC;AACA;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;ACnB7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACxBvB;AAAA;AAAA;AAAA;AAAyB;AACkB;AACP;AACC;;AAErC;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA,OAAO,oEAAQ;AACf;AACA;AACA;AACA;AACA,WAAW,uEAAW,YAAY,mEAAO;AACzC;AACA;AACA,WAAW,8DAAE;AACb;AACA;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;AC7B9B;AAAA;AAAmC;AACE;;AAErC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA,MAAM,mEAAO;AACb;AACA;AACA;AACA;AACA,uBAAuB,oEAAQ;AAC/B;AACA;AACA;AACA;AACA;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;AC5BrB;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACdzB;AAAA;AAAA;AAAA;AAA4C;AACR;AACQ;AACJ;;AAExC;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,iBAAiB,uEAAW;AAC5B,cAAc,iEAAM;;AAEpB,kDAAkD,+DAAW;AAC7D;AACA;AACA;AACA;AACA;AACA,aAAa,mEAAO;AACpB;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;AC3B1B;AAAA;AAAA;AAA0C;AACD;AACF;;AAEvC;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA,iBAAiB,8DAAU,GAAG,8DAAU,GAAG,6DAAS;;AAErC,mEAAU,EAAC;;;;;;;;;;;;;;ACb1B;AAA0C;;AAE1C;AACA;AACA,0BAA0B,8DAAU,IAAI,8DAAU,SAAS,8DAAU;AACrE;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACnBxB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACjB3B;AAAqC;;AAErC;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA,6BAA6B,oEAAQ;AACrC;;AAEe,2EAAkB,EAAC;;;;;;;;;;;;;;ACdlC;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;ACjB/B;AAAA;AAA4C;AACJ;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA,mBAAmB,+DAAW;AAC9B,uBAAuB,qEAAS;AAChC;AACA;AACA,yBAAyB,qEAAS;AAClC;AACA,qBAAqB,qEAAS;AAC9B;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACtBzB;AAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,qBAAqB,+DAAW;AAChC;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACtB3B;AAAA;AAAA;AAAsD;AAClB;AACD;;AAEnC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA,cAAc,mEAAO;AACrB;AACA;AACA,aAAa,mEAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,4EAAgB;AAC3B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACpEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;ACZ9B;AAA8C;;AAE9C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,cAAc,wEAAY;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;AClC/B;AAA8C;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA,cAAc,wEAAY;;AAE1B;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;AClB5B;AAA8C;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,wEAAY;AACrB;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACf5B;AAA8C;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA,cAAc,wEAAY;;AAE1B;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACzB5B;AAAA;AAAA;AAA8B;AACU;AACZ;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wDAAI;AACpB,gBAAgB,uDAAG,IAAI,6DAAS;AAChC,kBAAkB,wDAAI;AACtB;AACA;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;ACpB7B;AAA0C;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA,eAAe,sEAAU;AACzB;AACA;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;ACjB9B;AAA0C;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA,SAAS,sEAAU;AACnB;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACf3B;AAA0C;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,sEAAU;AACnB;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACf3B;AAA0C;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA,aAAa,sEAAU;AACvB;;AAEA;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACrB3B;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACjB1B;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,gFAAuB,EAAC;;;;;;;;;;;;;;ACnBvC;AAAmC;;AAEnC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA,eAAe,mEAAO;AACtB;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;ACzB7B;AAAA;AAAA;AAA4C;AACU;AACJ;;AAElD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAAW;AACpC,yBAAyB,0EAAc;AACvC;AACA;AACA;AACA;AACA;AACA,yBAAyB,4EAAgB;AACzC,yBAAyB,0EAAc;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACzFzB;AAAoC;;AAEpC;AACA,cAAc,2DAAO,QAAQ,2DAAO;;AAErB,gEAAO,EAAC;;;;;;;;;;;;;;ACLvB;AAAwC;;AAExC;AACA,mBAAmB,qEAAS;;AAEb,qEAAY,EAAC;;;;;;;;;;;;;;ACL5B;AAAoC;;AAEpC;AACA,iBAAiB,mEAAO;;AAET,mEAAU,EAAC;;;;;;;;;;;;;;ACL1B;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACnB5B;AAA0C;;AAE1C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,mCAAmC,8DAAU;;AAE7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH,CAAC;;AAEc,iEAAQ,EAAC;;;;;;;;;;;;;;;AC7BxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;ACrB9B;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACdvB;AAAgC;;AAEhC;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iEAAK;AAChB;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACnCxB;AAAA;AAAoC;AACI;;AAExC;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,aAAa,EAAE;AACf;AACA;AACA,oCAAoC,mEAAO,SAAS,qEAAS;AAC7D;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACftB;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACHxB;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACH1B;AACA;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;ACH7B;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACHzB;AAAA;AAAwC;AACJ;;AAEpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA,iBAAiB,qEAAS;;AAE1B;AACA;AACA,oBAAoB,mEAAO;AAC3B;AACA;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;AC5BvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;AC5B9B;AAA0C;;AAE1C;AACA;;AAEA;AACA,WAAW,8DAAU;;AAEN,6DAAI,EAAC;;;;;;;;;;;;;;ACRpB;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACpBvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AClB3B;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACb3B;AAAA;AAA4C;AACN;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,aAAa,SAAS;AACtB;AACA,cAAc,oEAAQ,CAAC,+DAAW;;AAEnB,gEAAO,EAAC;;;;;;;;;;;;;;ACnBvB;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACjB1B;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACjB1B;AAAA;AAAoD;AACd;;AAEtC;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA,kBAAkB,oEAAQ,CAAC,mEAAe;;AAE3B,oEAAW,EAAC;;;;;;;;;;;;;;ACb3B;AAAA;AAAA;AAAA;AAAkD;AACM;AACZ;AACY;;AAExD;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA,SAAS,uEAAW,UAAU,6EAAiB,SAAS,6EAAiB,CAAC,0EAAc;AACxF;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;ACpB/B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACpCxB;AAA0C;;AAE1C;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,sEAAU;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AC3B3B;AAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6DAAS;AAC/B;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACd1B;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACjB3B;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACbxB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACbxB;AAAA;AAAA;AAAwC;AACZ;AACU;;AAEtC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA,sBAAsB,6DAAS;AAC/B;AACA,SAAS,uDAAG;AACZ;AACA;AACA;AACA;AACA,+BAA+B,4DAAQ;AACvC;AACA;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACjCxB;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;ACtB7B;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,0EAAiB,EAAC;;;;;;;;;;;;;;ACpBjC;AAAA;AAAA;AAAwC;AACE;AACE;;AAE5C;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA,SAAS,sEAAU;AACnB,MAAM,uEAAW;AACjB,MAAM,qEAAS;AACf;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACjB1B;AAAA;AAAA;AAA8C;AACJ;AACQ;;AAElD;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA,SAAS,sEAAU;AACnB,MAAM,0EAAc;AACpB,MAAM,wEAAY;AAClB;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;ACjB7B;AAAgD;;AAEhD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA,mBAAmB,yEAAa;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAEc,qEAAY,EAAC;;;;;;;;;;;;;;AC1B5B;AAAqC;;AAErC;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,cAAc;AAC3B;AACA;AACA,kCAAkC,oEAAQ;AAC1C;AACA;AACA;AACA;AACA;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACpBrB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACzBxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;AClB/B;AAAkD;;AAElD;AACA;AACA,QAAQ;AACR,OAAO;AACP,OAAO;AACP,SAAS;AACT,QAAQ;AACR;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA,uBAAuB,0EAAc;;AAEtB,yEAAgB,EAAC;;;;;;;;;;;;;;ACpBhC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,EAAE;AACjD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AC3C3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,EAAE;AACjD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;ACvC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,EAAE;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACpE5B;AAAA;AAAwC;AACQ;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA,EAAE,qEAAS;AACX;AACA,gCAAgC,yEAAa;AAC7C;AACA;AACA,GAAG;AACH;AACA;;AAEe,0EAAiB,EAAC;;;;;;;;;;;;;;AC7CjC;AAAA;AAAA;AAA4C;AACI;AACR;;AAExC;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA,yBAAyB,+DAAW;AACpC;AACA;AACA,mBAAmB,iEAAa;AAChC,uBAAuB,qEAAS;AAChC;AACA;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACtB5B;AAA4D;;AAE5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,UAAU,+EAAmB;AAC7B;AACA,CAAC;;AAEc,4DAAG,EAAC;;;;;;;;;;;;;;ACrBnB;AAAuC;;AAEvC;AACA;;AAEA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,gBAAgB,iCAAiC;AACjD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qEAAS;AACf;AACA;AACA;AACA;AACA;AACA;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACzCrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+B;AACI;AACF;AACQ;AACI;AACI;AACpB;AACU;AACU;AACV;AACV;AACU;AACQ;AAChB;AACI;AACQ;AACE;AACN;AACV;AACM;AACA;AACU;AACI;AACI;AACxB;AACA;AACc;AAChB;AACE;AACM;AACI;AACI;AACV;AACA;AACE;AACJ;AACY;AACI;AACA;AACI;AACI;AACA;AACd;AACI;AAChB;AACA;AACU;AACU;AACV;AACR;AACI;AACI;AACV;AACI;AACI;AACN;AACQ;AACJ;AACR;AACI;AACI;AACR;AACY;AACQ;AACZ;;AAEpB;AACf,EAAE,gEAAK,EAAE,oEAAO,EAAE,kEAAM,EAAE,0EAAU,EAAE,8EAAY;AAClD,EAAE,kFAAc,EAAE,8DAAI,EAAE,wEAAS,EAAE,kFAAc,EAAE,wEAAS;AAC5D,EAAE,+DAAI,EAAE,yEAAS,EAAE,iFAAa,EAAE,iEAAK,EAAE,qEAAO;AAChD,EAAE,6EAAW,EAAE,+EAAY,EAAE,yEAAS,EAAE,+DAAI,EAAE,qEAAO;AACrD,EAAE,qEAAO,EAAE,+EAAY,EAAE,mFAAc,EAAE,uFAAgB,EAAE,+DAAI;AAC/D,EAAE,+DAAI,EAAE,6EAAW,EAAE,6DAAG,EAAE,+DAAI,EAAE,qEAAO;AACvC,EAAE,yEAAS,EAAE,6EAAW,EAAE,mEAAM,EAAE,mEAAM,EAAE,qEAAO;AACjD,EAAE,iEAAK,EAAE,6EAAW,EAAE,iFAAa,EAAE,iFAAa,EAAE,qFAAe;AACnE,EAAE,yFAAiB,EAAE,yFAAiB,EAAE,2EAAU,EAAE,+EAAY,EAAE,+DAAI;AACtE,EAAE,+DAAI,EAAE,yEAAS,EAAE,mFAAc,EAAE,yEAAS,EAAE,iEAAK;AACnD,EAAE,qEAAO,EAAE,yEAAS,EAAE,+DAAI,EAAE,mEAAM,EAAE,uEAAQ;AAC5C,EAAE,iEAAK,EAAE,yEAAS,EAAE,qEAAO,EAAE,6DAAG,EAAE,iEAAK;AACvC,EAAE,qEAAO,EAAE,6DAAG,EAAE,yEAAS,EAAE,iFAAa,EAAE,qEAAO;AACjD,CAAC,EAAC;;;;;;;;;;;;;;AChFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACI;AACF;AACQ;AACI;AACI;AACpB;AACU;AACU;AACV;AACV;AACU;AACQ;AAChB;AACI;AACQ;AACE;AACN;AACV;AACM;AACA;AACU;AACI;AACI;AACxB;AACA;AACc;AAChB;AACE;AACM;AACI;AACI;AACV;AACA;AACE;AACJ;AACY;AACI;AACA;AACI;AACI;AACA;AACd;AACI;AAChB;AACA;AACU;AACU;AACV;AACR;AACI;AACI;AACV;AACI;AACI;AACN;AACQ;AACJ;AACR;AACI;AACI;AACR;AACY;AACQ;AACZ;AACL;;;;;;;;;;;;;;ACjE7C;AAA0C;;AAE1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,sEAAU;AACnB;;AAEe,4DAAG,EAAC;;;;;;;;;;;;;;AC5BnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACF;AACQ;AACP;AACC;AACf;;AAE7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,UAAU;AACV;AACA,aAAa,0EAAc;AAC3B,MAAM,uEAAW,YAAY,uEAAW;AACxC,IAAI,sEAAU,SAAS,gEAAI;AAC3B;AACA;AACA;AACA;AACA,MAAM,uEAAW;AACjB;AACA;AACA,CAAC;;AAEc,+DAAM,EAAC;;;;;;;;;;;;;;ACzDtB;AAAA;AAAA;AAA0C;AACQ;AACjB;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,UAAU;AACV;AACA,eAAe,0EAAc;AAC7B,EAAE,sEAAU,SAAS,kEAAM;AAC3B,CAAC;;AAEc,iEAAQ,EAAC;;;;;;;;;;;;;;ACvCxB;AAAA;AAAA;AAA0C;AACQ;AACjB;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,UAAU;AACrB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS,GAAG,SAAS,GAAG,SAAS;AAC9C,UAAU;AACV;AACA,mBAAmB,0EAAc;AACjC,EAAE,sEAAU,SAAS,kEAAM;AAC3B,CAAC;;AAEc,qEAAY,EAAC;;;;;;;;;;;;;;ACrC5B;AAAA;AAAA;AAA0C;AACQ;AACrB;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,UAAU;AACrB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS,GAAG,SAAS,GAAG,SAAS;AAC9C,UAAU;AACV;AACA,iBAAiB,0EAAc;AAC/B,EAAE,sEAAU,SAAS,gEAAI;AACzB,CAAC;;AAEc,mEAAU,EAAC;;;;;;;;;;;;;;ACpC1B;AAAA;AAAkC;AACI;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,qBAAqB;AAChC,aAAa,MAAM;AACnB;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA,SAAS,oEAAQ,CAAC,0DAAM;;AAET,2DAAE,EAAC;;;;;;;;;;;;;;ACtBlB;AAAA;AAAA;AAAgC;AACM;AACH;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,KAAK;AAChB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,cAAc,oEAAQ;AACtB;AACA,WAAW,iEAAK;AAChB,GAAG;AACH,WAAW,mEAAO;AAClB;AACA,CAAC;;AAEc,gEAAO,EAAC;;;;;;;;;;;;;;AClCvB;AAAuC;;AAEvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qEAAS;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACvCtB;AAAA;AAAA;AAAA;AAAsC;AACI;AACF;AACU;;AAElD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,WAAW,KAAK;AAChB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oEAAQ;AACnB;AACA;AACA,kBAAkB,0EAAc,WAAW,qEAAS;AACpD;AACA;AACA,SAAS,sEAAU;AACnB,CAAC;;AAED;AACA;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;ACxDpB;AAAA;AAAA;AAAA;AAAA;AAAwC;AACY;AACvB;AACS;AACN;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,oEAAQ;AACtB,EAAE,qEAAS;AACX,UAAU,iEAAK;AACf,IAAI,2EAAe,cAAc,gEAAI;AACrC,GAAG;AACH;AACA,CAAC;;AAEc,gEAAO,EAAC;;;;;;;;;;;;;;ACxCvB;AAAA;AAAA;AAAA;AAAsC;AACI;AACF;AACU;;AAElD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,oEAAQ;AACtB;AACA;AACA,kBAAkB,0EAAc,WAAW,qEAAS;AACpD;AACA;AACA,SAAS,sEAAU;AACnB,CAAC;;AAED;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACnEvB;AAAA;AAAyC;AACa;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4EAAgB;AAChC;AACA,2BAA2B,sEAAU;AACrC,CAAC;;AAEc,kEAAS,EAAC;;;;;;;;;;;;;;AC5BzB;AAAA;AAAqC;AACI;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,sEAAU,CAAC,oEAAQ;AAC5B;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACtB1B;AAAmC;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mEAAO;AAChB;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AC3CzB;AAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,uEAAW;;AAEP,6DAAI,EAAC;;;;;;;;;;;;;;ACzBpB;AAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA,MAAM,+BAA+B;AACrC,MAAM,+BAA+B;AACrC,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,eAAe,yEAAM;AACrB;AACA;AACA;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACrCrB;AAAA;AAAA;AAAwC;AACU;AACX;;AAEvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0EAAc;AAC7B;AACA,GAAG;AACH,qBAAqB,qEAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,qEAAS;AAClC;AACA;AACA;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACjDrB;AAAA;AAAwC;AACH;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,oEAAQ;AACpB;AACA;AACA;AACA,YAAY,oEAAQ;AACpB;AACA;AACA,SAAS,qEAAS,CAAC,oEAAQ;AAC3B;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACtCrB;AAAwC;;AAExC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,EAAE;AACf;AACA;AACA;AACA,mBAAmB,SAAS,GAAG,SAAS;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,qEAAS;AAClB;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACnCrB;AAAwC;;AAExC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,EAAE;AACf;AACA;AACA;AACA,mBAAmB,SAAS,GAAG,SAAS;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,qEAAS;AAClB;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AC5BzB;AAAwC;;AAExC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,SAAS;AACpB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,qEAAS;AAClB;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;ACvC7B;AAAwC;;AAExC;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,SAAS;AACpB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,qEAAS;AAClB;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACzCzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmC;AACN;AACU;AACR;AACE;AACJ;AACQ;AACF;AACQ;AACE;AACV;AACU;AACV;AACE;AACE;AACR;AACJ;AACQ;AACI;AACN;AACU;AACV;AACA;AACQ;AACN;AACN;AACA;AACI;;AAElB;AACf,EAAE,oEAAO,EAAE,8DAAI,EAAE,wEAAS,EAAE,gEAAK,EAAE,kEAAM;AACzC,EAAE,8DAAI,EAAE,sEAAQ,EAAE,oEAAO,EAAE,4EAAW,EAAE,8EAAY;AACpD,EAAE,qEAAO,EAAE,+EAAY,EAAE,qEAAO,EAAE,uEAAQ,EAAE,yEAAS;AACrD,EAAE,iEAAK,EAAE,6DAAG,EAAE,qEAAO,EAAE,yEAAS,EAAE,mEAAM;AACxC,EAAE,6EAAW,EAAE,mEAAM,EAAE,mEAAM,EAAE,2EAAU,EAAE,qEAAO;AAClD,EAAE,+DAAI,EAAE,+DAAI,EAAE,mEAAM;AACpB,CAAC,EAAC;;;;;;;;;;;;;;ACpCF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkD;AACN;AACU;AACR;AACE;AACJ;AACQ;AACF;AACQ;AACE;AACV;AACU;AACV;AACE;AACE;AACR;AACJ;AACQ;AACI;AACN;AACU;AACV;AACA;AACQ;AACN;AACN;AACA;AACI;AACE;;;;;;;;;;;;;;AC5BlD;AAAgD;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iEAAa;AAC1B;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;AChC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;AC9BvB;AAAA;AAAA;AAAA;AAAwC;AACI;AACJ;AACL;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS,qEAAS,CAAC,mEAAO,UAAU,qEAAS,mBAAmB,uEAAW;AAC3E;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;AC1CtB;AAAA;AAAA;AAAA;AAAgC;AACM;AACQ;AACR;;AAEtC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,SAAS;AACtB;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA,SAAS,iBAAiB;AAC1B;AACA;AACA,SAAS,iBAAiB;AAC1B;AACA;AACA,SAAS,qBAAqB;AAC9B;AACA;AACA;AACA;AACA,mBAAmB,gEAAY;;AAE/B,yBAAyB,oEAAQ;AACjC;AACA;AACA;AACA;AACA,GAAG;;AAEH,SAAS,oEAAQ;AACjB;AACA;AACA;AACA,UAAU,iEAAK;AACf,eAAe,iEAAK;AACpB;AACA;AACA,GAAG;AACH;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;AC3DpB;AAAA;AAAwC;AACM;;AAE9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA,MAAM,iBAAiB;AACvB,MAAM;AACN;AACA;AACA,iCAAiC,mBAAmB,cAAc,EAAE,EAAE;AACtE,WAAW,iBAAiB;AAC5B;AACA;AACA,SAAS,wEAAY,CAAC,qEAAS;AAC/B;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AClCxB;AAAA;AAAkD;AACrB;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA,iBAAiB;AACjB;AACA,yBAAyB,mBAAmB,cAAc,EAAE,EAAE;AAC9D;AACA;AACA,yBAAyB,mBAAmB,cAAc,EAAE,EAAE;AAC9D;AACA;AACA;AACA,2BAA2B,0EAAc,iBAAiB,gEAAI;AAC9D;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;AC/B1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,SAAS;AACtB;AACA;AACA,wCAAwC,SAAS;AACjD;AACA;AACA,WAAW,SAAS,GAAG,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACzBxB;AAAA;AAAoD;AACE;;AAEtD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,UAAU;AACV;AACA,cAAc,4EAAgB;AAC9B;AACA;AACA,GAAG;AACH,IAAI,2EAAe;AACnB;AACA,CAAC;;AAEc,gEAAO,EAAC;;;;;;;;;;;;;;ACvCvB;AAAA;AAA0C;AACA;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sEAAU;AACzB,uCAAuC,sEAAU;AACjD;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;AC1CtB;AAA0C;;AAE1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sEAAU;AACzB;AACA;AACA;;AAEA;AACA;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACxDrB;AAA0C;;AAE1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sEAAU;AACzB;AACA;AACA;;AAEA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACrD1B;AAA2B;;AAEZ;AACf,EAAE,4DAAG;AACL,CAAC,EAAC;;;;;;;;;;;;;;ACJF;AAAA;AAAA;AAAA;AAA0C;AACE;;;;;;;;;;;;;;ACD5C;AAAA;AAAA;AAAqC;AACV;AACU;;AAErC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,OAAO,YAAY;AAC9B,WAAW,QAAQ;AACnB;AACA,WAAW,OAAO;AAClB;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,8CAA8C,kBAAkB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS,oEAAQ;AACjB,MAAM,oEAAQ;AACd;AACA;AACA,iCAAiC,oEAAQ;AACzC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,+DAAG;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yDAAyD,+DAAG;AAC5D;;AAEA;AACA,eAAe,+DAAG;AAClB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AC9LxB;AAAA;AAA8C;AACT;;AAErC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oEAAQ;AACnB,2CAA2C,gEAAY;AACvD;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;AC5CtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACxBzB;AAAA;AAAA;AAAA;AAAsC;AACb;AACyB;AACjB;;AAEjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA,eAAe,SAAS,GAAG,SAAS,GAAG,SAAS;AAChD,UAAU;AACV;AACA,eAAe,oEAAQ;AACvB;;AAEA;AACA;AACA;;AAEA,eAAe,0EAAc;AAC7B;AACA;;AAEA;AACA;AACA,gBAAgB,kEAAM;AACtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA,WAAW,8DAAE;AACb;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAEc,iEAAQ,EAAC;;;;;;;;;;;;;;AC/DxB;AAAA;AAAA;AAAA;AAAgC;AACM;AACsB;AACrB;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA,mBAAmB,OAAO,SAAS,EAAE,GAAG,OAAO,iBAAiB,EAAE;AAClE,UAAU,OAAO,iBAAiB;AAClC;AACA,mBAAmB,oEAAQ;AAC3B,uBAAuB,uEAAmB;AAC1C,SAAS,iEAAK,CAAC,6DAAS;AACxB,CAAC;;AAEc,qEAAY,EAAC;;;;;;;;;;;;;;AC7B5B;AAAA;AAAwC;AACF;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,YAAY,oEAAQ;AACpB,SAAS,qEAAS;AAClB,CAAC;;AAEc,8DAAK,EAAC;;;;;;;;;;;;;;ACzBrB;AAAA;AAAA;AAAwC;AACF;AACD;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,YAAY,oEAAQ;AACpB,SAAS,qEAAS,OAAO,oEAAQ;AACjC,CAAC;;AAEc,8DAAK,EAAC;;;;;;;;;;;;;;AC3BrB;AAAA;AAAA;AAAA;AAAkD;AACN;AACN;AACiB;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,oEAAQ;AACzB,SAAS,6EAAiB;AAC1B,MAAM,0EAAc,QAAQ,uEAAW,YAAY,qEAAiB;AACpE;AACA,CAAC;;AAEc,mEAAU,EAAC;;;;;;;;;;;;;;AChC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkD;AACN;AACE;AACR;AACiB;AAC1B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS,GAAG,SAAS,KAAK,SAAS;AACvD,WAAW,SAAS;AACpB;AACA,mBAAmB,oEAAQ;AAC3B,iBAAiB,gEAAI;AACrB,MAAM,6EAAiB;AACvB;AACA;AACA,SAAS,6EAAiB;AAC1B,MAAM,0EAAc,QAAQ,uEAAW,YAAY,qEAAiB,SAAS,wEAAY;AACzF;AACA,CAAC;;AAEc,qEAAY,EAAC;;;;;;;;;;;;;;AC3C5B;AAAA;AAAA;AAAA;AAAA;AAAkD;AACN;AACN;AACiB;AAC1B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA,mBAAmB,iBAAiB,GAAG,iBAAiB;AACxD;AACA,+BAA+B,iBAAiB;AAChD,WAAW,iBAAiB;AAC5B;AACA,qBAAqB,oEAAQ;AAC7B,mBAAmB,gEAAI;AACvB,MAAM,6EAAiB;AACvB;AACA;AACA,SAAS,6EAAiB;AAC1B,MAAM,0EAAc,QAAQ,uEAAW,YAAY,qEAAiB;AACpE;AACA,CAAC;;AAEc,uEAAc,EAAC;;;;;;;;;;;;;;ACvC9B;AAA4D;;AAE5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,aAAa,+EAAmB;AAChC;AACA,CAAC;;AAEc,+DAAM,EAAC;;;;;;;;;;;;;;ACrBtB;AAAA;AAAwC;AACD;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,qEAAS;AAChD,SAAS,qEAAS;AAClB;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;ACrCpB;AAAA;AAAwC;AACD;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,qEAAS;AAChD;AACA,SAAS,qEAAS;AAClB;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACtCzB;AAAA;AAA8C;AACN;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA,MAAM,oCAAoC;AAC1C,MAAM,qCAAqC;AAC3C,MAAM;AACN;AACA;AACA,wCAAwC,kBAAkB,EAAE;AAC5D;AACA;AACA;AACA,4BAA4B,qCAAqC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qEAAS,QAAQ,wEAAY;AACnC;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;AC5C9B;AAAA;AAA8C;AACN;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA,MAAM,qCAAqC;AAC3C,MAAM,qCAAqC;AAC3C,MAAM;AACN;AACA;AACA,mCAAmC,kBAAkB,EAAE;AACvD;AACA;AACA;AACA,uBAAuB,oCAAoC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qEAAS,QAAQ,wEAAY;AACnC;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AC5CzB;AAAA;AAAA;AAAsC;;;;;;;;;;;;;;ACAtC;AAAA;AAAA;AAA2C;;;;;;;;;;;;;;ACA3C;AAAA;AAAA;AAAA;AAAwC;AACM;AACP;AACF;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oEAAQ;AACnB,WAAW,wEAAY;;AAEvB;AACA;AACA;AACA,MAAM,qEAAS,CAAC,qEAAS;;AAEzB;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AC1CxB;AAAA;AAAA;AAAsC;;;;;;;;;;;;;;ACAtC;AAAA;AAAA;AAAwC;;;;;;;;;;;;;;ACAxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,2DAAE,EAAC;;;;;;;;;;;;;;ACpClB;AAAA;AAAkD;AACb;;AAErC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,WAAW,oEAAQ;AACnB;AACA,sCAAsC,kEAAc;AACpD;AACA;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;AC1CtB;AAAqC;;AAErC;AACA;AACA;AACA;AACA,oCAAoC;AACpC;;AAEA;AACA;AACA,8BAA8B,KAAK;AACnC;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oEAAQ;AACnB;AACA;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;AC/B5B;AAAA;AAAA;AAAA;AAAA;AAA0C;AACF;AACM;AACX;AACe;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,YAAY,OAAO;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,+CAA+C;AACrD,MAAM;AACN;AACA;AACA;AACA,mBAAmB,oCAAoC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mEAAO,eAAe,8DAAU,GAAG,6DAAS;AACzD,eAAe,0EAAc;AAC7B;AACA;AACA,0BAA0B,wEAAY;AACtC;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACvDrB;AAAA;AAAA;AAAuC;;;;;;;;;;;;;;ACAvC;AAAA;AAAA;AAA2C;;;;;;;;;;;;;;ACA3C;AAAA;AAAsC;AACY;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,0EAAc;AACzD;AACA;AACA;AACA,SAAS,oEAAQ;AACjB;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;AC5CpB;AAAA;AAAA;AAAA;AAA4C;AACF;AACI;AACX;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA,MAAM,8CAA8C;AACpD,MAAM;AACN;AACA;AACA,gCAAgC,kBAAkB,EAAE;AACpD;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,YAAY;AAC5C;AACA;AACA;AACA,aAAa,mEAAO,eAAe,+DAAW,GAAG,8DAAU;AAC3D,0BAA0B,wEAAY;AACtC;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACnDtB;AAAA;AAA0C;AACH;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA,MAAM,+CAA+C;AACrD,MAAM,gDAAgD;AACtD,MAAM;AACN;AACA;AACA,8BAA8B,mBAAmB,EAAE;AACnD;AACA;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sEAAU,CAAC,6DAAS;;AAEhB,6DAAI,EAAC;;;;;;;;;;;;;;ACzCpB;AAAA;AAAA;AAAgD;AACF;AACP;;AAEvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA,MAAM,qCAAqC;AAC3C,MAAM,qCAAqC;AAC3C,MAAM;AACN;AACA;AACA,mCAAmC,2BAA2B,EAAE;AAChE;AACA;AACA;AACA,uBAAuB,kCAAkC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qEAAS;AAC/C;AACA;AACA;AACA,SAAS,yEAAa,QAAQ,wEAAY;AAC1C;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACtDzB;AAAA;AAAA;AAA4C;AACF;AACI;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA,iBAAiB,4BAA4B;AAC7C,iBAAiB,6BAA6B;AAC9C,iBAAiB;AACjB;AACA;AACA,iCAAiC,mBAAmB,EAAE;AACtD;AACA;AACA;AACA,qBAAqB,2BAA2B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uEAAW,SAAS,wEAAY,gBAAgB,8DAAU;AACnE;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;AC3CvB;AAAA;AAA0C;AACK;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,eAAe,sEAAU,CAAC,iEAAa;;AAExB,iEAAQ,EAAC;;;;;;;;;;;;;;ACxBxB;AAAA;AAAA;AAAgD;AACF;AACP;;AAEvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA,MAAM,oCAAoC;AAC1C,MAAM,qCAAqC;AAC3C,MAAM;AACN;AACA;AACA,uCAAuC,4BAA4B,EAAE;AACrE;AACA;AACA;AACA,2BAA2B,mCAAmC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qEAAS;AACrB;AACA;AACA;AACA;AACA,SAAS,yEAAa,QAAQ,wEAAY;AAC1C;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;AC1D7B;AAAA;AAAA;AAA4C;AACQ;AACN;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA,iBAAiB,4BAA4B;AAC7C,iBAAiB,6BAA6B;AAC9C,iBAAiB;AACjB;AACA;AACA,qCAAqC,mBAAmB,EAAE;AAC1D;AACA;AACA;AACA,yBAAyB,4BAA4B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uEAAW,SAAS,wEAAY,gBAAgB,mEAAe;AACxE;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AC3C3B;AAAA;AAAA;AAAmC;;;;;;;;;;;;;;ACAnC;AAAA;AAA4C;AACjB;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uEAAW,CAAC,+DAAG;AACxB;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;AC5BvB;AAAA;AAA4C;AACjB;;AAE3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uEAAW,CAAC,+DAAG;AACxB;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AC9B3B;AAAA;AAAA;AAA4C;AACjB;AACY;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qEAAS;AAC7C,SAAS,uEAAW,CAAC,+DAAG;AACxB;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;AC9B5B;AAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uEAAW;AAC7B;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACrBvB;AAA4C;;AAE5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uEAAW;AAC7B;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACxB3B;AAAA;AAA4C;AACL;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qEAAS;AAC7C,SAAS,uEAAW;AACpB;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;AChC5B;AAA0C;;AAE1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,SAAS,sEAAU;AACnB;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;AC3BpB;AAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uEAAW;;AAER,8DAAK,EAAC;;;;;;;;;;;;;;ACzBrB;AAA0C;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sEAAU;;AAEN,6DAAI,EAAC;;;;;;;;;;;;;;AC1BpB;AAA0C;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sEAAU;;AAEX,kEAAS,EAAC;;;;;;;;;;;;;;ACzBzB;AAAA;AAAA;AAAA;AAAwC;AACF;AACQ;AACX;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA,IAAI;AACJ;AACA;AACA;AACA,aAAa,mEAAO,eAAe,6DAAS,GAAG,4DAAQ;AACvD,0BAA0B,wEAAY;AACtC;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACxCvB;AAAA;AAAA;AAAA;AAAkD;AACF;AACF;AACX;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,aAAa,mEAAO,eAAe,kEAAc,GAAG,iEAAa;AACjE,0BAA0B,wEAAY;AACtC;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;AC9B5B;AAAA;AAAA;AAAoC;AACU;AACb;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM,mEAAO,SAAS,wEAAY,YAAY,0DAAM;AACpD;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACtCrB;AAAA;AAAA;AAA8C;AACA;AACb;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM,wEAAY,SAAS,wEAAY,YAAY,0DAAM;AACzD;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACpC1B;AAAA;AAA0C;AACI;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,mBAAmB,sEAAU,SAAS,wEAAY;AAClD;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACnCtB;AAAA;AAAoD;AACN;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,mBAAmB,2EAAe,SAAS,wEAAY;AACvD;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACjC3B;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AC3BzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+B;AACJ;AACM;AACJ;AACM;AACJ;AACU;AACJ;AACN;AACA;AACF;AACM;AACF;AACJ;AACQ;AACF;AACU;AACd;AACF;AACI;AACI;AACN;AACF;;AAEd;AACf,EAAE,gEAAK,EAAE,4DAAG,EAAE,kEAAM,EAAE,8DAAI,EAAE,oEAAO;AACnC,EAAE,gEAAK,EAAE,0EAAU,EAAE,sEAAQ,EAAE,gEAAK,EAAE,gEAAK;AAC3C,EAAE,+DAAI,EAAE,qEAAO,EAAE,mEAAM,EAAE,+DAAI,EAAE,uEAAQ;AACvC,EAAE,qEAAO,EAAE,+EAAY,EAAE,iEAAK,EAAE,+DAAI,EAAE,mEAAM;AAC5C,EAAE,uEAAQ,EAAE,iEAAK,EAAE,+DAAI;AACvB,CAAC,EAAC;;;;;;;;;;;;;;AC9BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACJ;AACM;AACJ;AACM;AACJ;AACU;AACJ;AACN;AACA;AACF;AACM;AACF;AACJ;AACQ;AACF;AACU;AACd;AACF;AACI;AACI;AACN;AACF;AACI;;;;;;;;;;;;;;ACvBhD;AAAA;AAAgD;AACnB;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,yEAAa,SAAS,gEAAI;AACzD;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AC9BzB;AAAA;AAAgD;AACf;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,yEAAa,SAAS,kEAAM;AAC3D;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AC9B3B;AAAoC;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,aAAa,EAAE;AACf;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,mEAAO;AACnD;AACA;;AAEe,4DAAG,EAAC;;;;;;;;;;;;;;AChCnB;AAAA;AAAoD;AACE;;AAEtD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,UAAU;AACV;AACA,cAAc,4EAAgB;AAC9B;AACA;AACA,GAAG;AACH,IAAI,2EAAe;AACnB;AACA,CAAC;;AAEc,gEAAO,EAAC;;;;;;;;;;;;;;ACxCvB;AAAA;AAAkC;AACsC;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,qFAAyB,CAAC,0DAAM;;AAE1B,2DAAE,EAAC;;;;;;;;;;;;;;AC5BlB;AAAwE;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,qFAAyB;AACnC;AACA,CAAC;;AAEc,4DAAG,EAAC;;;;;;;;;;;;;;AC7BnB;AAAA;AAAoC;AACA;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,aAAa,QAAQ;AACrB;AACA;AACA,iBAAiB,OAAO,SAAS;AACjC,yBAAyB,gBAAgB,SAAS,GAAG;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,mEAAO,eAAe,2DAAO;AACxD;;AAEe,4DAAG,EAAC;;;;;;;;;;;;;;AClCnB;AAAA;AAAwC;AACJ;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,aAAa,QAAQ;AACrB;AACA;AACA,0BAA0B,gBAAgB,SAAS,GAAG;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,mEAAO,eAAe,6DAAS;AAC1D;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACjCrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;ACtBpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,EAAE;AACf;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACpBxB;AAAA;AAAA;AAA4C;AACP;AACA;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,oEAAQ;AAClB;AACA;AACA;AACA,GAAG;AACH,UAAU,oEAAQ;AAClB;AACA,WAAW,oEAAQ;AACnB,SAAS,uEAAW;AACpB;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACtDvB;AAAA;AAAA;AAAA;AAAA;AAA4C;AACD;AACN;AACE;AACN;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uEAAW,4BAA4B,kEAAM;AAC5D,sCAAsC,qEAAS;;AAE/C;AACA;AACA;AACA;AACA,SAAS,oEAAQ;AACjB;AACA,mBAAmB,uEAAW;AAC9B;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACpDxB;AAAA;AAA4C;AACL;;AAEvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qEAAS;AAC/C;AACA;AACA;AACA,SAAS,uEAAW;AACpB;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACzCvB;AAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,qEAAS;AAC3B;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACrBvB;AAAA;AAAA;AAAA;AAAsC;AACgB;AAChB;AACsB;;AAE5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA,mBAAmB,oEAAQ;AAC3B,eAAe,oEAAQ,SAAS,uEAAmB;AACnD;AACA,MAAM,4EAAgB;AACtB;AACA,CAAC;;AAEc,qEAAY,EAAC;;;;;;;;;;;;;;AC7B5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsC;AACgB;AACR;AACR;AACsB;AAC/B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,SAAS,KAAK,SAAS,GAAG,SAAS;AACzD,WAAW,SAAS;AACpB;AACA,qBAAqB,oEAAQ;AAC7B,iBAAiB,gEAAI;AACrB,eAAe,oEAAQ,SAAS,uEAAmB;;AAEnD,mBAAmB,gEAAI;AACvB;AACA,GAAG;AACH;AACA;AACA;AACA,MAAM,4EAAgB,SAAS,wEAAY;AAC3C;AACA,CAAC;;AAEc,uEAAc,EAAC;;;;;;;;;;;;;;AC5C9B;AAAA;AAAA;AAAA;AAAA;AAAsC;AACgB;AAChB;AACsB;AAC/B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA,mBAAmB,iBAAiB,GAAG,iBAAiB;AACxD,kBAAkB,iBAAiB,GAAG,iBAAiB;AACvD;AACA;AACA,WAAW,iBAAiB;AAC5B;AACA,uBAAuB,oEAAQ;AAC/B,mBAAmB,gEAAI;AACvB,eAAe,oEAAQ,SAAS,uEAAmB;;AAEnD;AACA;AACA;AACA;AACA;AACA,MAAM,4EAAgB;AACtB;AACA,CAAC;;AAEc,yEAAgB,EAAC;;;;;;;;;;;;;;ACxChC;AAAA;AAAA;AAAqC;AACa;AACb;;AAErC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,UAAU;AACV;AACA,aAAa,0EAAc;AAC3B;AACA;AACA;AACA;;AAEA;AACA,CAAC,EAAE,oEAAQ,CAAC,4DAAQ;;AAEL,+DAAM,EAAC;;;;;;;;;;;;;;ACzCtB;AAAA;AAA8C;AACI;;AAElD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,IAAI;AACJ,UAAU;AACV;AACA,eAAe,0EAAc;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,CAAC,EAAE,gEAAY;;AAEA,iEAAQ,EAAC;;;;;;;;;;;;;;ACvDxB;AAAA;AAA0C;AACJ;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,KAAK;AAChB,aAAa,EAAE;AACf;AACA;AACA,iBAAiB,QAAQ,OAAO,oBAAoB,EAAE;AACtD;AACA;AACA;AACA;AACA,aAAa,oEAAQ,CAAC,8DAAU;;AAEjB,+DAAM,EAAC;;;;;;;;;;;;;;ACvBtB;AAAA;AAAA;AAAA;AAAA;AAAgC;AACM;AACI;AACJ;AACK;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,sBAAsB;AACjC;AACA,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oEAAQ;AACxB;AACA;AACA,eAAe,uEAAW;;AAE1B,EAAE,oEAAQ;AACV,+BAA+B,iEAAK,sBAAsB,sEAAU;AACpE,GAAG;AACH;AACA,CAAC;;AAEc,kEAAS,EAAC;;;;;;;;;;;;;;ACxCzB;AAAA;AAAoD;AACP;;AAE7C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA,6BAA6B,kBAAkB,EAAE;AACjD;AACA;AACA;AACA;AACA;AACA,kBAAkB,2EAAe,aAAa,kBAAkB,EAAE,MAAM,mEAAe;AACvF,SAAS,wEAAY;AACrB;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACnC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACzBvB;AAAA;AAAA;AAAwD;AAChB;AACF;;AAEtC;AACA,wBAAwB,4DAAQ,IAAI,4DAAQ;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,qEAAS,sBAAsB,qEAAiB;;AAEzE,sEAAa,EAAC;;;;;;;;;;;;;;AC1B7B;AAAA;AAAyC;AACJ;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,oEAAQ,mBAAmB,sEAAU;AAC/D;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AChC3B;AAAA;AAA2C;AACE;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,wEAAY,WAAW,uEAAW;AAC3C;;AAEe,0EAAiB,EAAC;;;;;;;;;;;;;;AChCjC;AAAA;AAA0C;AACG;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,wEAAY,WAAW,sEAAU;AACtC;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AC5BzB;AAAA;AAA8B;AACS;;AAEvC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,6BAA6B,wDAAI;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6DAAS;;AAE3B,iEAAQ,EAAC;;;;;;;;;;;;;;;ACrCxB;AAAA;AAAA;AAA0C;AACF;AACF;;AAEtC;AACA,iBAAiB,4DAAQ,IAAI,4DAAQ;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,qEAAS,eAAe,8DAAU;;AAE7C,+DAAM,EAAC;;;;;;;;;;;;;;AC1BtB;AAAA;AAA6C;AACE;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,wEAAY,oCAAoC,yEAAa;AACtE;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACxBzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsC;AACJ;AACS;AACR;AACQ;AACN;AACO;AACC;;AAE7C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,uEAAW;AACjB,OAAO,mEAAO;AACd,QAAQ,oEAAQ,WAAW,wEAAY,WAAW,uEAAW;AAC7D;AACA;AACA,YAAY,kEAAM;AAClB;AACA;AACA;AACA,MAAM,uEAAW;AACjB,YAAY,oEAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;AC5EvB;AAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uEAAW;AACpB;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;AClCvB;AAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,uEAAW;AAC3C;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACxC3B;AAAA;AAAA;AAA0C;AACG;AACE;;AAE/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,wEAAY;AACnB;AACA;AACA,YAAY,sEAAU;AACtB;AACA,2EAA2E,yEAAa;AACxF;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACnCvB;AAA8B;;AAE9B;AACA,qBAAqB,wDAAI;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACnCxB;AAAA;AAA0C;AACL;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,oEAAQ;AACf;AACA;AACA;AACA;AACA,YAAY,sEAAU;AACtB;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACpC1B;AAAuC;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,qEAAS;AACvD;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AChCzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AClCxB;AAAA;AAAA;AAAwC;AACA;AACF;;AAEtC;AACA,gBAAgB,4DAAQ,IAAI,4DAAQ;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qEAAS,cAAc,6DAAS;;AAEzC,8DAAK,EAAC;;;;;;;;;;;;;;AC1BrB;AAAA;AAA4C;AACE;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA,iBAAiB;AACjB;AACA,sBAAsB,SAAS;AAC/B;AACA;AACA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA,8BAA8B,uEAAW,iBAAiB,wEAAY;AACtE;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACnCvB;AAAA;AAA4C;AACE;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uEAAW,iBAAiB,wEAAY;AACjD;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACxC3B;AAAqC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oEAAQ;AACjB;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACrCrB;AAAA;AAA8C;AACJ;;AAE1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,sEAAU;AAChB;AACA;AACA,SAAS,wEAAY;AACrB;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACvCxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACxBrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACrBtB;AAAA;AAA0C;AACG;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,wEAAY,WAAW,sEAAU;AACtC;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACrCxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AC9BxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;AC5B5B;AAAA;AAAA;AAA0C;AACI;AACD;;AAE7C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,wEAAY,WAAW,sEAAU;AACxC;AACA;AACA,cAAc,wEAAY;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;AC7D7B;AAAA;AAAA;AAA8C;AACN;AACF;;AAEtC;AACA,mBAAmB,4DAAQ,IAAI,4DAAQ;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qEAAS,iBAAiB,gEAAY;;AAErD,iEAAQ,EAAC;;;;;;;;;;;;;;AC1BxB;AAAuC;;AAEvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,qEAAS;AAClB;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;ACpC7B;AAAA;AAAA;AAAwC;AACA;AACF;;AAEtC;AACA,gBAAgB,4DAAQ,IAAI,4DAAQ;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qEAAS,cAAc,6DAAS;;AAEzC,8DAAK,EAAC;;;;;;;;;;;;;;AC1BrB;AAAA;AAAA;AAA0C;AACP;AACU;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mEAAO,WAAW,wEAAY,WAAW,sEAAU;AACzD;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AC7BxB;AAAA;AAA0C;AACG;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,wEAAY,WAAW,sEAAU;AACtC;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AC5BxB;AAAA;AAAA;AAAsD;AACd;AACF;;AAEtC;AACA,uBAAuB,4DAAQ,IAAI,4DAAQ;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qEAAS,qBAAqB,oEAAgB;;AAErE,qEAAY,EAAC;;;;;;;;;;;;;;AC1B5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACrB3B;AAAA;AAAkC;AACW;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,wEAAY,WAAW,kEAAM;AACtC;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AC3BzB;AAAA;AAA0C;AACG;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,wEAAY,WAAW,sEAAU;AAC1C;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AC3BzB;AAAA;AAAwC;AACM;;AAE9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,SAAS;AACtB;AACA;AACA;AACA,MAAM,8CAA8C;AACpD,MAAM;AACN;AACA;AACA;AACA,+BAA+B,mCAAmC;AAClE,WAAW,8CAA8C;AACzD;AACA;AACA;AACA,WAAW,4BAA4B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,SAAS,wEAAY,oCAAoC,qEAAS;AAClE;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACpDxB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;ACzBpB;AAAsD;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4EAAgB;AAChC;AACA,CAAC;;AAEc,kEAAS,EAAC;;;;;;;;;;;;;;AC3BzB;AAAA;AAAoD;AACE;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA,MAAM,4BAA4B;AAClC,MAAM;AACN;AACA;AACA;AACA;AACA,IAAI;AACJ,UAAU,OAAO,4BAA4B,QAAQ,8BAA8B;AACnF;AACA;AACA,UAAU,UAAU,4BAA4B,YAAY,8BAA8B;AAC1F;AACA,YAAY,4EAAgB;AAC5B,EAAE,2EAAe;AACjB,CAAC;;AAEc,8DAAK,EAAC;;;;;;;;;;;;;;ACnCrB;AAAA;AAAA;AAAgD;AACV;AACK;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uEAAW,WAAW,yEAAa,WAAW,oEAAQ;AAC/D;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;ACpCpB;AAAA;AAAA;AAAgD;AACN;AACC;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uEAAW,WAAW,yEAAa,iBAAiB,sEAAU;AACvE;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;AC/BtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAuC;AACR;AACQ;AACQ;AACR;AACE;AAChB;AACA;AACE;AACgB;AACR;AACY;AACJ;AACY;AAChB;AACF;AACJ;AACM;AACJ;AACA;AACQ;AACR;AACE;AACI;AACF;AACF;AACN;AACI;AACQ;AACZ;AACM;AACN;AACE;AACI;AACA;AACQ;AACE;AACV;AACU;AAChB;AACM;AACA;AACQ;AACF;AACJ;AACA;AACd;AACE;AACQ;AACE;AACE;AACF;AACA;AACU;AACA;AACV;;AAEtB;AACf,EAAE,wEAAS,EAAE,gEAAK,EAAE,wEAAS,EAAE,gFAAa,EAAE,wEAAS;AACvD,EAAE,0EAAU,EAAE,0DAAE,EAAE,0DAAE,EAAE,4DAAG,EAAE,4EAAW;AACtC,EAAE,qEAAO,EAAE,iFAAa,EAAE,6EAAW,EAAE,yFAAiB,EAAE,yEAAS;AACnE,EAAE,uEAAQ,EAAE,mEAAM,EAAE,yEAAS,EAAE,qEAAO,EAAE,qEAAO;AAC/C,EAAE,6EAAW,EAAE,qEAAO,EAAE,uEAAQ,EAAE,2EAAU,EAAE,yEAAS;AACvD,EAAE,uEAAQ,EAAE,iEAAK,EAAE,qEAAO,EAAE,6EAAW,EAAE,iEAAK;AAC9C,EAAE,uEAAQ,EAAE,iEAAK,EAAE,mEAAM,EAAE,uEAAQ,EAAE,uEAAQ;AAC7C,EAAE,+EAAY,EAAE,iFAAa,EAAE,uEAAQ,EAAE,iFAAa,EAAE,iEAAK;AAC7D,EAAE,uEAAQ,EAAE,uEAAQ,EAAE,+EAAY,EAAE,6EAAW,EAAE,yEAAS;AAC1D,EAAE,yEAAS,EAAE,2DAAE,EAAE,6DAAG,EAAE,qEAAO,EAAE,uEAAQ;AACvC,EAAE,yEAAS,EAAE,uEAAQ,EAAE,uEAAQ,EAAE,iFAAa,EAAE,iFAAa;AAC7D,EAAE,uEAAQ;AACV,CAAC,EAAC;;;;;;;;;;;;;;ACtEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsD;AACR;AACQ;AACQ;AACR;AACE;AAChB;AACA;AACE;AACgB;AACR;AACY;AACJ;AACY;AAChB;AACF;AACJ;AACM;AACJ;AACA;AACQ;AACR;AACE;AACI;AACF;AACF;AACN;AACI;AACQ;AACZ;AACM;AACN;AACE;AACI;AACA;AACQ;AACE;AACV;AACU;AAChB;AACM;AACA;AACQ;AACF;AACJ;AACA;AACd;AACE;AACQ;AACE;AACE;AACF;AACA;AACU;AACA;AACV;AACR;;;;;;;;;;;;;;ACxD5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;ACnBpB;AAAA;AAAA;AAAA;AAAgD;AACR;AACgB;AACjB;;AAEvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qEAAS;AACrB;AACA;AACA;AACA,MAAM,6EAAiB;AACvB,MAAM,yEAAa,QAAQ,6DAAS;AACpC;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;AC7C3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC+B;AACU;AACZ;AACI;AACJ;AACA;AACI;AACA;AACN;AACM;AACJ;AACe;AACI;AACd;AACM;AACA;AACE;AACM;AACN;AACI;AACR;AACQ;AACT;AACF;AACE;AACR;AACA;AACW;AACI;AACJ;AACR;AACC;AACO;AACX;AACU;AACC;;AAExC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,2DAAM,GAAG,2DAAM;;AAEjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,qEAAQ;AAC1B,2BAA2B,iEAAI;AAC/B,iDAAiD,0EAAa;;AAE9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,0DAAM;;AAER;AACA,kEAAM,SAAS,4DAAI;AACnB,kEAAM,OAAO,4DAAI;AACjB,kEAAM,UAAU,0DAAM;AACtB,kEAAM,YAAY,0DAAM;AACxB,kEAAM,gBAAgB,0DAAM;AAC5B,kEAAM,cAAc,0DAAM;AAC1B,kEAAM,MAAM,0DAAM;AAClB,kEAAM,UAAU,4DAAI;AACpB,kEAAM,QAAQ,4DAAI;AAClB,kEAAM,WAAW,yDAAI;AACrB,kEAAM,WAAW,4DAAI;AACrB,kEAAM,aAAa,wDAAI;AACvB,kEAAM,SAAS,uDAAG;AAClB,kEAAM,SAAS,yDAAK;AACpB,kEAAM,WAAW,yDAAK;AACtB,kEAAM,UAAU,yDAAK;AACrB,kEAAM,QAAQ,yDAAI;AAClB,kEAAM,YAAY,yDAAI;AACtB,kEAAM,YAAY,yDAAI;AACtB,kEAAM,WAAW,8DAAU;AAC3B,kEAAM,UAAU,0DAAM;AACtB,kEAAM,SAAS,4DAAI;AACnB,kEAAM,cAAc,4DAAI;AACxB,kEAAM,YAAY,4DAAI;AACtB,kEAAM,YAAY,0DAAM;AACxB,kEAAM,gBAAgB,0DAAM;AAC5B,kEAAM,SAAS,4DAAI;AACnB,kEAAM,SAAS,4DAAI;AACnB,kEAAM,cAAc,yDAAK;AACzB,kEAAM,gBAAgB,yDAAK;AAC3B,kEAAM,kBAAkB,yDAAK;AAC7B,kEAAM,QAAQ,yDAAK;AACnB,kEAAM,aAAa,yDAAK;AACxB,kEAAM,kBAAkB,yDAAK;AAC7B,kEAAM,aAAa,yDAAK;AACxB,kEAAM,QAAQ,yDAAK;AACnB,kEAAM,UAAU,8DAAU;AAC1B,kEAAM,WAAW,8DAAU;AAC3B,kEAAM,eAAe,8DAAU;AAC/B,kEAAM,gBAAgB,8DAAU;AAChC,kEAAM,WAAW,yDAAK;AACtB,kEAAM,eAAe,yDAAK;AAC1B,kEAAM,gBAAgB,yDAAK;AAC3B,kEAAM,QAAQ,4DAAI;AAClB,kEAAM,QAAQ,yDAAI;AAClB,kEAAM,aAAa,yDAAI;AACvB,kEAAM,aAAa,yDAAK;AACxB,kEAAM,aAAa,0DAAM;AACzB,kEAAM,eAAe,0DAAM;AAC3B,kEAAM,WAAW,8DAAU;AAC3B,kEAAM,WAAW,yDAAK;AACtB,kEAAM,gBAAgB,yDAAK;AAC3B,kEAAM,kBAAkB,yDAAK;AAC7B,kEAAM,oBAAoB,yDAAK;AAC/B,kEAAM,UAAU,0DAAM;AACtB,kEAAM,YAAY,0DAAM;AACxB,kEAAM,aAAa,8DAAU;AAC7B,kEAAM,YAAY,yDAAI;AACtB,kEAAM,SAAS,8DAAU;AACzB,kEAAM,QAAQ,yDAAI;AAClB,kEAAM,UAAU,0DAAM;AACtB,kEAAM,OAAO,8DAAU;AACvB,kEAAM,WAAW,0DAAM;AACvB,kEAAM,aAAa,0DAAM;AACzB,kEAAM,WAAW,yDAAI;AACrB,kEAAM,mBAAmB,yDAAI;AAC7B,kEAAM,WAAW,4DAAI;AACrB,kEAAM,SAAS,0DAAM;AACrB,kEAAM,aAAa,0DAAM;AACzB,kEAAM,UAAU,yDAAI;AACpB,kEAAM,YAAY,yDAAI;AACtB,kEAAM;AACN,kEAAM,UAAU,2DAAM;AACtB,kEAAM,UAAU,yDAAI;AACpB,kEAAM,QAAQ,0DAAM;AACpB,kEAAM,UAAU,0DAAM;AACtB,kEAAM,QAAQ,4DAAI;AAClB,kEAAM,WAAW,8DAAU;AAC3B,kEAAM,QAAQ,yDAAI;AAClB,kEAAM,YAAY,4DAAI;AACtB,kEAAM,aAAa,yDAAI;AACvB,kEAAM,YAAY,yDAAI;AACtB,kEAAM,WAAW,4DAAI;AACrB,kEAAM,gBAAgB,4DAAI;AAC1B,kEAAM,aAAa,8DAAU;AAC7B,kEAAM,QAAQ,0DAAM;AACpB,kEAAM,UAAU,0DAAM;AACtB,kEAAM,YAAY,yDAAI;AACtB,kEAAM,cAAc,yDAAI;AACxB,kEAAM,QAAQ,yDAAK;AACnB,kEAAM,WAAW,yDAAK;AACtB,kEAAM,aAAa,yDAAK;AACxB,kEAAM,eAAe,yDAAK;AAC1B,kEAAM,UAAU,yDAAK;AACrB,kEAAM,SAAS,yDAAI;AACnB,kEAAM,cAAc,yDAAI;AACxB,kEAAM,SAAS,4DAAI;AACnB,kEAAM,UAAU,8DAAU;AAC1B,kEAAM,UAAU,yDAAK;AACrB,kEAAM,QAAQ,4DAAI;AAClB,kEAAM,WAAW,yDAAK;AACtB,kEAAM,cAAc,8DAAU;AAC9B,kEAAM,OAAO,0DAAM;AACnB,kEAAM,WAAW,0DAAM;AACvB,kEAAM,WAAW,8DAAU;AAC3B,kEAAM,SAAS,yDAAK;AACpB,kEAAM,UAAU,8DAAU;AAC1B,kEAAM,cAAc,yDAAK;AACzB,kEAAM,gBAAgB,yDAAK;AAC3B,kEAAM,SAAS,0DAAM;AACrB,kEAAM,UAAU,4DAAI;AACpB,kEAAM,QAAQ,yDAAK;AACnB,kEAAM,QAAQ,yDAAK;AACnB,kEAAM,aAAa,yDAAK;AACxB,kEAAM,kBAAkB,yDAAK;AAC7B,kEAAM,aAAa,yDAAK;AACxB,kEAAM,OAAO,uDAAG;AAChB,kEAAM,YAAY,4DAAI;AACtB,kEAAM,QAAQ,yDAAI;AAClB,kEAAM,WAAW,wDAAI;AACrB,kEAAM,WAAW,0DAAM;AACvB,kEAAM,aAAa,0DAAM;AACzB,kEAAM,UAAU,yDAAI;AACpB,kEAAM,iBAAiB,wDAAI;AAC3B,kEAAM,aAAa,0DAAM;AACzB,kEAAM,SAAS,4DAAI;AACnB,kEAAM,SAAS,yDAAK;AACpB,kEAAM,WAAW,yDAAK;AACtB,kEAAM,aAAa,yDAAK;AACxB,kEAAM,QAAQ,yDAAK;AACnB,kEAAM,UAAU,yDAAK;AACrB,kEAAM,YAAY,yDAAK;AACvB,kEAAM,SAAS,0DAAM;AACrB,kEAAM,SAAS,yDAAK;AACpB,kEAAM,aAAa,yDAAK;AACxB,kEAAM,UAAU,0DAAM;AACtB,kEAAM,cAAc,0DAAM;AAC1B,kEAAM,UAAU,0DAAM;AACtB,kEAAM,YAAY,0DAAM;AACxB,kEAAM,WAAW,yDAAK;AACtB,kEAAM,SAAS,0DAAM;AACrB,kEAAM,QAAQ,4DAAI;AAClB,kEAAM,OAAO,yDAAK;AAClB,kEAAM,SAAS,yDAAK;AACpB,kEAAM,WAAW,yDAAK;AACtB,kEAAM,OAAO,yDAAK;AAClB,kEAAM,aAAa,yDAAK;AACxB,kEAAM,iBAAiB,yDAAK;AAC5B,kEAAM,WAAW,yDAAK;;AAEtB;AACA,kEAAM,WAAW,0DAAM;AACvB,kEAAM,aAAa,0DAAM;AACzB,kEAAM,UAAU,0DAAM;AACtB,kEAAM,cAAc,0DAAM;;AAE1B;AACA,MAAM,kEAAM,EAAE,kEAAM;;AAEpB;AACA,kEAAM,OAAO,wDAAI;AACjB,kEAAM,WAAW,yDAAI;AACrB,kEAAM,aAAa,0DAAM;AACzB,kEAAM,cAAc,0DAAM;AAC1B,kEAAM,QAAQ,wDAAI;AAClB,kEAAM,SAAS,0DAAM;AACrB,kEAAM,SAAS,wDAAI;AACnB,kEAAM,aAAa,wDAAI;AACvB,kEAAM,iBAAiB,wDAAI;AAC3B,kEAAM,aAAa,wDAAI;AACvB,kEAAM,cAAc,wDAAI;AACxB,kEAAM,UAAU,0DAAM;AACtB,kEAAM,aAAa,yDAAI;AACvB,kEAAM,UAAU,wDAAI;AACpB,kEAAM,YAAY,0DAAM;AACxB,kEAAM,MAAM,wDAAI;AAChB,kEAAM,UAAU,0DAAM;AACtB,kEAAM,gBAAgB,0DAAM;AAC5B,kEAAM,SAAS,8DAAU;AACzB,kEAAM,QAAQ,8DAAU;AACxB,kEAAM,aAAa,yDAAK;AACxB,kEAAM,WAAW,0DAAM;AACvB,kEAAM,YAAY,8DAAU;AAC5B,kEAAM,iBAAiB,yDAAK;AAC5B,kEAAM,eAAe,0DAAM;AAC3B,kEAAM,SAAS,wDAAI;AACnB,kEAAM,WAAW,8DAAU;AAC3B,kEAAM,gBAAgB,8DAAU;AAChC,kEAAM,SAAS,0DAAM;AACrB,kEAAM,cAAc,0DAAM;AAC1B,kEAAM,UAAU,0DAAM;AACtB,kEAAM,eAAe,0DAAM;AAC3B,kEAAM,OAAO,0DAAM;AACnB,kEAAM,MAAM,wDAAI;AAChB,kEAAM,OAAO,wDAAI;AACjB,kEAAM,OAAO,0DAAM;AACnB,kEAAM,SAAS,0DAAM;AACrB,kEAAM,QAAQ,yDAAK;AACnB,kEAAM,YAAY,6DAAQ;AAC1B,kEAAM,YAAY,8DAAU;AAC5B,kEAAM,WAAW,yDAAK;AACtB,kEAAM,WAAW,0DAAM;AACvB,kEAAM,UAAU,0DAAM;AACtB,kEAAM,eAAe,wDAAI;AACzB,kEAAM,WAAW,4DAAO;AACxB,kEAAM,iBAAiB,wDAAI;AAC3B,kEAAM,eAAe,wDAAI;AACzB,kEAAM,qBAAqB,wDAAI;AAC/B,kEAAM,aAAa,wDAAI;AACvB,kEAAM,YAAY,wDAAI;AACtB,kEAAM,UAAU,wDAAI;AACpB,kEAAM,aAAa,wDAAI;AACvB,kEAAM,WAAW,wDAAI;AACrB,kEAAM,WAAW,wDAAI;AACrB,kEAAM,eAAe,wDAAI;AACzB,kEAAM,WAAW,wDAAI;AACrB,kEAAM,YAAY,wDAAI;AACtB,kEAAM,cAAc,wDAAI;AACxB,kEAAM,aAAa,wDAAI;AACvB,kEAAM,YAAY,wDAAI;AACtB,kEAAM,SAAS,wDAAI;AACnB,kEAAM,WAAW,wDAAI;AACrB,kEAAM,eAAe,wDAAI;AACzB,kEAAM,SAAS,wDAAI;AACnB,kEAAM,YAAY,wDAAI;AACtB,kEAAM,SAAS,wDAAI;AACnB,kEAAM,UAAU,wDAAI;AACpB,kEAAM,YAAY,wDAAI;AACtB,kEAAM,YAAY,6DAAQ;AAC1B,kEAAM,gBAAgB,wDAAI;AAC1B,kEAAM,iBAAiB,wDAAI;AAC3B,kEAAM,YAAY,wDAAI;AACtB,kEAAM,iBAAiB,wDAAI;AAC3B,kEAAM,SAAS,wDAAI;AACnB,kEAAM,YAAY,wDAAI;AACtB,kEAAM,YAAY,wDAAI;AACtB,kEAAM,gBAAgB,wDAAI;AAC1B,kEAAM,eAAe,wDAAI;AACzB,kEAAM,aAAa,wDAAI;AACvB,kEAAM,aAAa,wDAAI;AACvB,kEAAM,QAAQ,yDAAK;AACnB,kEAAM,aAAa,0DAAM;AACzB,kEAAM,QAAQ,yDAAI;AAClB,kEAAM,eAAe,yDAAK;AAC1B,kEAAM,aAAa,0DAAM;AACzB,kEAAM,cAAc,0DAAM;AAC1B,kEAAM,MAAM,wDAAI;AAChB,kEAAM,OAAO,wDAAI;AACjB,kEAAM,OAAO,wDAAI;AACjB,kEAAM,SAAS,wDAAI;AACnB,kEAAM,QAAQ,wDAAI;AAClB,kEAAM,UAAU,wDAAI;AACpB,kEAAM,OAAO,wDAAI;AACjB,kEAAM,SAAS,wDAAI;AACnB,kEAAM,aAAa,yDAAI;AACvB,kEAAM,aAAa,yDAAI;AACvB,kEAAM,cAAc,yDAAI;AACxB,kEAAM,cAAc,yDAAI;AACxB,kEAAM,YAAY,yDAAI;AACtB,kEAAM,YAAY,wDAAI;AACtB,kEAAM,OAAO,yDAAK;AAClB,kEAAM,QAAQ,yDAAI;AAClB,kEAAM,OAAO,wDAAI;AACjB,kEAAM,OAAO,0DAAM;AACnB,kEAAM,UAAU,0DAAM;AACtB,kEAAM,YAAY,0DAAM;AACxB,kEAAM,YAAY,0DAAM;AACxB,kEAAM,UAAU,0DAAM;AACtB,kEAAM,UAAU,8DAAU;AAC1B,kEAAM,eAAe,8DAAU;AAC/B,kEAAM,UAAU,0DAAM;AACtB,kEAAM,WAAW,0DAAM;AACvB,kEAAM,UAAU,0DAAM;AACtB,kEAAM,SAAS,wDAAI;AACnB,kEAAM,UAAU,8DAAU;AAC1B,kEAAM,QAAQ,8DAAU;AACxB,kEAAM,aAAa,0DAAM;AACzB,kEAAM,QAAQ,8DAAU;AACxB,kEAAM,eAAe,yDAAK;AAC1B,kEAAM,iBAAiB,yDAAK;AAC5B,kEAAM,iBAAiB,yDAAK;AAC5B,kEAAM,mBAAmB,yDAAK;AAC9B,kEAAM,qBAAqB,yDAAK;AAChC,kEAAM,qBAAqB,yDAAK;AAChC,kEAAM,aAAa,0DAAM;AACzB,kEAAM,cAAc,0DAAM;AAC1B,kEAAM,YAAY,wDAAI;AACtB,kEAAM,OAAO,wDAAI;AACjB,kEAAM,SAAS,wDAAI;AACnB,kEAAM,YAAY,0DAAM;AACxB,kEAAM,SAAS,yDAAI;AACnB,kEAAM,YAAY,wDAAI;AACtB,kEAAM,aAAa,8DAAS;AAC5B,kEAAM,YAAY,wDAAI;AACtB,kEAAM,WAAW,0DAAM;AACvB,kEAAM,YAAY,wDAAI;AACtB,kEAAM,iBAAiB,wDAAI;AAC3B,kEAAM,YAAY,wDAAI;AACtB,kEAAM,WAAW,0DAAM;AACvB,kEAAM,QAAQ,0DAAM;AACpB,kEAAM,WAAW,0DAAM;AACvB,kEAAM,aAAa,0DAAM;AACzB,kEAAM,YAAY,0DAAM;AACxB,kEAAM,YAAY,0DAAM;AACxB,kEAAM,YAAY,yDAAI;AACtB,kEAAM,aAAa,0DAAM;AACzB,kEAAM,cAAc,0DAAM;;AAE1B;AACA,kEAAM,QAAQ,8DAAU;AACxB,kEAAM,aAAa,8DAAU;AAC7B,kEAAM,SAAS,yDAAK;;AAEpB,MAAM,kEAAM;AACZ;AACA,EAAE,uEAAU,CAAC,kEAAM;AACnB,6BAA6B,kEAAM;AACnC;AACA;AACA,GAAG;AACH;AACA,CAAC,MAAM,iBAAiB;;AAExB;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,kEAAM;AACN,CAAC,kEAAM,oBAAoB,0DAAM,+BAA+B,kEAAM;;AAEtE;AACA,sEAAS;AACT,EAAE,kEAAM,2BAA2B,kEAAM;AACzC,CAAC;;AAED;AACA,sEAAS;AACT,EAAE,gEAAW;AACb,wCAAwC,sEAAS;;AAEjD;AACA,YAAY,gEAAW;AACvB;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA,EAAE,gEAAW;AACb;AACA;AACA,CAAC;;AAED;AACA,sEAAS;AACT;AACA;;AAEA,EAAE,gEAAW;AACb;AACA;AACA,kBAAkB,yEAAY;AAC9B;AACA,KAAK;AACL;AACA;AACA;AACA,CAAC;;AAED;AACA,sEAAS;AACT;;AAEA,EAAE,gEAAW;AACb;AACA;AACA,CAAC;;AAED;AACA,sEAAS;AACT;;AAEA,EAAE,gEAAW;AACb,mCAAmC,gEAAW;AAC9C;AACA,CAAC;;AAED,gEAAW;AACX,qBAAqB,6DAAQ;AAC7B;;AAEA,gEAAW;AACX;AACA;;AAEA,gEAAW;AACX;AACA;;AAEA,gEAAW,uBAAuB,qEAAQ;AAC1C;AACA,eAAe,gEAAW;AAC1B;AACA;AACA,WAAW,uEAAU;AACrB,GAAG;AACH,CAAC;;AAED,gEAAW;AACX,qBAAqB,mEAAM,CAAC,yEAAY;AACxC;;AAEA,gEAAW;AACX,UAAU,sEAAS;;AAEnB;AACA;AACA,eAAe,gEAAW;AAC1B;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,UAAU,sEAAS;AACnB;AACA;AACA;AACA;;AAEA,gEAAW;AACX;AACA;;AAEA,gEAAW;AACX;AACA;;AAEA;AACA,uEAAU,CAAC,gEAAW;AACtB;AACA;AACA,mBAAmB,kEAAM;AACzB;;AAEA;AACA;AACA;AACA,EAAE,kEAAM;AACR;AACA;AACA,kCAAkC,gEAAW;AAC7C;AACA,4BAA4B,oEAAO;;AAEnC;AACA,oCAAoC,kEAAM,EAAE,sEAAS;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,gEAAW;AAChD;AACA,+BAA+B,SAAS,yDAAI,+CAA+C;AAC3F,iBAAiB,kEAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,sEAAS;AACT;AACA;AACA;;AAEA,EAAE,kEAAM;AACR;AACA;AACA;AACA,wBAAwB,oEAAO;AAC/B;AACA;AACA,wBAAwB,oEAAO;AAC/B,KAAK;AACL;AACA,CAAC;;AAED;AACA,uEAAU,CAAC,gEAAW;AACtB,mBAAmB,kEAAM;AACzB;AACA;AACA,6BAA6B,8DAAS;AACtC,MAAM,8DAAS;AACf;AACA,IAAI,8DAAS,YAAY,yCAAyC;AAClE;AACA,CAAC;;AAED,8DAAS,CAAC,yEAAY;AACtB;AACA;AACA,CAAC;;AAED;AACA,gEAAW,mBAAmB,8DAAS;AACvC,gEAAW,qBAAqB,gEAAW;AAC3C,gEAAW,mBAAmB,8DAAS;;AAEvC;AACA,kEAAM,gBAAgB,uDAAG;AACzB,kEAAM,mBAAmB,uDAAG;AAC5B,kEAAM,oBAAoB,uDAAG;AAC7B,kEAAM,kBAAkB,uDAAG;AAC3B,kEAAM,mBAAmB,uDAAG;AAC5B,kEAAM,qBAAqB,uDAAG;AAC9B,kEAAM,oBAAoB,kEAAM,qBAAqB,kEAAM,mBAAmB,uDAAG;;AAEjF;AACA,kEAAM,mBAAmB,kEAAM;;AAE/B;AACA,EAAE,kEAAM,0BAA0B,uDAAG;AACrC;;AAEe,4IAAM,EAAC;;;;;;;;;;;;;;ACloBtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC0C;AACI;AACJ;AACM;AACI;AACQ;AACJ;AAChB;AACU;AACF;AACJ;AACM;AACA;AACI;AACE;AACF;AACV;AACE;AACA;AACA;AACA;AACQ;AACQ;AACR;AACN;AACE;AACF;AACJ;AACQ;AACI;AACJ;AACF;AACF;AACF;AACU;AACJ;AACJ;AACM;AACF;AACQ;AACd;AACA;AACU;AACI;AACI;AAChB;AACJ;AACU;AACU;AACV;AACV;AACU;AACF;AACF;AACI;AACd;AACQ;AACY;AACd;AACE;AACQ;AACZ;AACI;AACJ;AACU;AACJ;AACE;AACU;AACJ;AACZ;AACI;AACQ;AACE;AACV;AACQ;AACE;AAChB;AACE;AACF;AACU;AACJ;AACU;AACd;AACU;AACR;AACU;AACJ;AACA;AACI;AAChB;AACQ;AACV;AACE;AACA;AACI;AACF;AACQ;AACF;AACE;AACF;AACA;AACU;AACI;AACI;AACpB;AACI;AACJ;AACM;AACI;AACR;AACY;AACJ;AACY;AAChB;AACF;AACJ;AACM;AACJ;AACA;AACQ;AACR;AACE;AACI;AACF;AACF;AACN;AACI;AACQ;AACZ;AACM;AACN;AACE;AACI;AACA;AACQ;AACE;AACV;AACU;AAChB;AACM;AACA;AACQ;AACF;AACJ;AACA;AACF;AACR;AACU;AACR;AACF;AACI;AACJ;AACc;AACH;AACD;AACE;AAChB;AACE;AACA;AACQ;AACI;AACJ;AACgB;AACxB;AACI;AACF;AACI;AACE;AACJ;AACQ;AACN;AACI;AACV;AACI;AACA;AACM;AACJ;AACJ;AACA;AACF;AACA;AACM;AACJ;AACI;AACJ;AACM;AACN;AACQ;AACE;AACF;AACV;AACM;AACI;AACA;AACF;AACU;AACN;AACV;AACI;AACF;AACM;AACI;AACZ;AACM;AACI;AACI;AACV;AACA;AACF;AACU;AACV;AACE;AACU;AACV;AACA;AACA;AACE;AACN;AACI;AACE;AACJ;AACE;AACQ;AACd;AACQ;AACA;AACN;AACE;AACQ;AACV;AACI;AACU;AACI;AACA;AACI;AACI;AACA;AACd;AACI;AACd;AACE;AACM;AACE;AACF;AACA;AACE;AACA;AACJ;AACA;AACV;AACI;AACF;AACA;AACU;AACU;AACV;AACZ;AACU;AACgB;AAChB;AACR;AACE;AACI;AACE;AACE;AACE;AACR;AACI;AACF;AACE;AACF;AACI;AACN;AACc;AACA;AACV;AACF;AACI;AACV;AACM;AACI;AACF;AACN;AACM;AACN;AACI;AACI;AACV;AACI;AACI;AACA;AACN;AACA;AACQ;AACN;AACQ;AACF;AACE;AACV;AACI;AACF;AACI;AACF;AACJ;AACF;AACU;AACM;AACL;AACO;AACX;AACE;AACW;AACD;AACH;AAClB;AACI;AACI;AACR;AACY;AACQ;AACZ;AACJ;;;;;;;;;;;;;;AC1U9C;AAAsD;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4EAAgB;AAChC;AACA,CAAC;;AAEc,kEAAS,EAAC;;;;;;;;;;;;;;AC1BzB;AAAoD;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2EAAe;;AAEjB,mEAAU,EAAC;;;;;;;;;;;;;;ACrB1B;AAAA;AAAkC;AACsC;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,qFAAyB,CAAC,0DAAM;;AAE1B,2DAAE,EAAC;;;;;;;;;;;;;;AC5BlB;AAAwE;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,qFAAyB;AACnC;AACA,CAAC;;AAEc,4DAAG,EAAC;;;;;;;;;;;;;;AC7BnB;AAAA;AAAA;AAAA;AAAsC;AACQ;AACV;AACD;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,iBAAiB;AAC3B;AACA;AACA;AACA,MAAM,mBAAmB;AACzB,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mEAAO,eAAe,4DAAQ,GAAG,2DAAO;AACrD,0BAA0B,wEAAY;AACtC;;AAEe,4DAAG,EAAC;;;;;;;;;;;;;;ACpDnB;AAAA;AAAA;AAAoD;AACV;AACI;;AAE9C;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA,IAAI;AACJ,UAAU;AACV;AACA;AACA;AACA,aAAa,wEAAY;;AAEzB,EAAE,sEAAU;AACZ,IAAI,2EAAe;AACnB,GAAG;AACH;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACnCvB;AAAA;AAAA;AAAoD;AACV;AACI;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,iBAAiB,+BAA+B;AAChD,iBAAiB;AACjB;AACA;AACA,mCAAmC,cAAc,EAAE;AACnD,UAAU,2BAA2B;AACrC;AACA;AACA;AACA,UAAU,2BAA2B;AACrC;AACA;AACA;AACA,aAAa,wEAAY;;AAEzB,EAAE,sEAAU;AACZ,IAAI,2EAAe;AACnB,GAAG;AACH;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AC1CzB;AAAA;AAAwC;AACI;;AAE5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA,MAAM,yBAAyB;AAC/B,MAAM;AACN;AACA;AACA,gCAAgC,iBAAiB;AACjD,WAAW,yBAAyB;AACpC;AACA;AACA,4CAA4C,SAAS,cAAc,SAAS;AAC5E,WAAW,yBAAyB,GAAG,yBAAyB;AAChE;AACA;AACA,SAAS,uEAAW,CAAC,qEAAS;AAC9B;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;AC7CvB;AAAA;AAAwC;AACoB;;AAE5D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,aAAa,SAAS;AACtB;AACA;AACA;AACA,MAAM,yBAAyB;AAC/B,MAAM;AACN;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,WAAW,yBAAyB,GAAG,yBAAyB;AAChE;AACA;AACA,SAAS,+EAAmB,OAAO,qEAAS;AAC5C;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;AC3C/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2B;AACE;AACI;AACF;AACJ;AACI;AACF;AACI;AACN;AACI;AACM;AACN;AACM;AACV;AACI;;AAEhB;AACf,EAAE,4DAAG,EAAE,8DAAI,EAAE,kEAAM,EAAE,gEAAK,EAAE,4DAAG;AAC/B,EAAE,gEAAK,EAAE,8DAAI,EAAE,kEAAM,EAAE,4DAAG,EAAE,gEAAK;AACjC,EAAE,uEAAQ,EAAE,iEAAK,EAAE,uEAAQ,EAAE,6DAAG,EAAE,iEAAK;AACvC,CAAC,EAAC;;;;;;;;;;;;;;ACpBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0C;AACE;AACI;AACF;AACJ;AACI;AACF;AACI;AACN;AACI;AACM;AACN;AACM;AACV;AACI;AACF;;;;;;;;;;;;;;ACf5C;AAAA;AAAA;AAA8C;AACZ;AACG;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,wEAAY,QAAQ,4DAAQ,EAAE,0DAAM;AAC1C;AACA;;AAEe,4DAAG,EAAC;;;;;;;;;;;;;;AC5BnB;AAAA;AAAA;AAA8C;AACZ;AACY;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,EAAE;AACf;AACA;AACA,mBAAmB,SAAS,GAAG,SAAS;AACxC;AACA,iCAAiC,YAAY,EAAE;AAC/C,UAAU;AACV;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM,wEAAY,QAAQ,wEAAY,eAAe,0DAAM;AAC3D;AACA;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACjCrB;AAAA;AAAsC;AACD;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oEAAQ,QAAQ,4DAAQ;AACjC;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;ACrBpB;AAAA;AAA8C;AACR;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA,mBAAmB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;AAChE;AACA,kCAAkC,YAAY,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oEAAQ,QAAQ,wEAAY;AACrC;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;AC9BtB;AAAsC;;AAEtC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,4DAAQ;AACjD;AACA;;AAEA;AACA,gBAAgB,4DAAQ;;AAET,gEAAO,EAAC;;;;;;;;;;;;;;ACxEvB;AAAA;AAAwC;AACU;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA,YAAY,SAAS,GAAG,SAAS;AACjC;AACA;AACA;AACA,YAAY,SAAS,GAAG,SAAS;AACjC;AACA;AACA;AACA,UAAU,QAAQ,iBAAiB,GAAG,iBAAiB;AACvD;AACA,YAAY,0EAAc;AAC1B,EAAE,qEAAS;AACX,CAAC;;AAEc,8DAAK,EAAC;;;;;;;;;;;;;;ACtCrB;AAAA;AAAwC;AACU;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,UAAU;AACrB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA,UAAU;AACV;AACA,gBAAgB,0EAAc;AAC9B,EAAE,qEAAS;AACX,CAAC;;AAEc,kEAAS,EAAC;;;;;;;;;;;;;;ACtCzB;AAAA;AAA0C;AACJ;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,KAAK;AAChB,aAAa,SAAS;AACtB;AACA;AACA;AACA,MAAM,OAAO,qBAAqB,EAAE;AACpC,MAAM,OAAO,qBAAqB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,oEAAQ;AACrB;AACA,WAAW,sEAAU;AACrB;AACA,CAAC;;AAEc,+DAAM,EAAC;;;;;;;;;;;;;;ACjCtB;AAAA;AAA0C;AACJ;;AAEtC;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,aAAa,SAAS;AACtB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oEAAQ;AACvB;AACA,WAAW,sEAAU;AACrB;AACA,CAAC;;AAEc,iEAAQ,EAAC;;;;;;;;;;;;;;AChCxB;AAAA;AAAA;AAA8C;AACZ;AACG;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,wEAAY,QAAQ,4DAAQ,EAAE,0DAAM;AAC1C;AACA;;AAEe,4DAAG,EAAC;;;;;;;;;;;;;;AC5BnB;AAAA;AAAA;AAA8C;AACA;AACZ;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,EAAE;AACf;AACA;AACA,mBAAmB,SAAS,GAAG,SAAS;AACxC;AACA,iCAAiC,YAAY,EAAE;AAC/C,UAAU;AACV;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM,wEAAY,QAAQ,wEAAY,eAAe,0DAAM;AAC3D;AACA;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACjCrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACA;AACQ;AACR;AACC;AACJ;AACR;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,OAAO;AAClB,WAAW,OAAO,YAAY;AAC9B,WAAW,QAAQ;AACnB,aAAa,gBAAgB;AAC7B;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,YAAY,mBAAmB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,mBAAmB,GAAG,iBAAiB;AACnD;AACA;AACA;AACA;AACA,cAAc,gEAAI;AAClB,oBAAoB,yEAAa;;AAEjC,gBAAgB,oEAAQ;AACxB,eAAe,sEAAU;;AAEzB,EAAE,qEAAS;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,qEAAS;;AAEtD,wBAAwB,qDAAqD;AAC7E;AACA;AACA;AACA,kCAAkC,qEAAS;AAC3C;AACA;AACA,GAAG;;AAEH;AACA;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACzErB;AAA4D;;AAE5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,eAAe,+EAAmB;AAClC;AACA,CAAC;;AAEc,iEAAQ,EAAC;;;;;;;;;;;;;;ACrBxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACvCtB;AAAmC;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,sBAAsB,mEAAO;AAC7B;AACA;AACA;;AAEA,UAAU;AACV;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AClC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;AChBpB;AAA8B;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,SAAS,wDAAI;AACb;;AAEe,4DAAG,EAAC;;;;;;;;;;;;;;ACtBnB;AAAA;AAAoC;AACG;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,mEAAO,QAAQ,qEAAS;AAC3D;;AAEe,4DAAG,EAAC;;;;;;;;;;;;;;AC5BnB;AAAA;AAAA;AAAoC;AACE;AACC;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qEAAS;AACf,SAAS,oEAAQ;AACjB,WAAW,mEAAO;AAClB,GAAG;AACH;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;AC/BtB;AAAA;AAAA;AAA+B;AACI;AACF;;AAElB;AACf,EAAE,gEAAK,EAAE,oEAAO,EAAE,kEAAM;AACxB,CAAC,EAAC;;;;;;;;;;;;;;ACNF;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACI;AACF;AACF;;;;;;;;;;;;;;ACH9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACI;AACQ;AACJ;AAChB;AACQ;AACI;AACQ;AACV;AACI;AACN;AACQ;AACN;AACQ;AACZ;AACU;AACR;AACU;AACJ;AACI;AAChB;AACA;AACI;AACE;AACI;AACJ;AACJ;AACI;AACE;AACI;AACR;AACQ;AACV;AACI;AACJ;AACI;AACA;AACN;AACQ;AACA;AACI;AACA;AACR;AACE;AACQ;AACR;AACI;;AAEtB;AACf,EAAE,kEAAM,EAAE,sEAAQ,EAAE,8EAAY,EAAE,0EAAU,EAAE,0DAAE;AAChD,EAAE,kEAAM,EAAE,sEAAQ,EAAE,8EAAY,EAAE,oEAAO,EAAE,wEAAS;AACpD,EAAE,mEAAM,EAAE,2EAAU,EAAE,qEAAO,EAAE,6EAAW,EAAE,iEAAK;AACjD,EAAE,2EAAU,EAAE,mEAAM,EAAE,6EAAW,EAAE,yEAAS,EAAE,6EAAW;AACzD,EAAE,6DAAG,EAAE,6DAAG,EAAE,iEAAK,EAAE,mEAAM,EAAE,uEAAQ;AACnC,EAAE,mEAAM,EAAE,+DAAI,EAAE,mEAAM,EAAE,qEAAO,EAAE,yEAAS;AAC1C,EAAE,iEAAK,EAAE,yEAAS,EAAE,+DAAI,EAAE,mEAAM,EAAE,+DAAI;AACtC,EAAE,mEAAM,EAAE,mEAAM,EAAE,6DAAG,EAAE,qEAAO,EAAE,qEAAO;AACvC,EAAE,yEAAS,EAAE,yEAAS,EAAE,iEAAK,EAAE,mEAAM,EAAE,2EAAU;AACjD,EAAE,mEAAM,EAAE,uEAAQ;AAClB,CAAC,EAAC;;;;;;;;;;;;;;AC3DF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgD;AACI;AACQ;AACJ;AAChB;AACQ;AACI;AACQ;AACV;AACI;AACN;AACQ;AACN;AACQ;AACZ;AACU;AACR;AACU;AACJ;AACI;AAChB;AACA;AACI;AACE;AACI;AACJ;AACJ;AACI;AACE;AACI;AACR;AACQ;AACV;AACI;AACJ;AACI;AACA;AACN;AACQ;AACA;AACI;AACA;AACR;AACE;AACQ;AACR;AACI;AACN;;;;;;;;;;;;;;AC/C9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsC;AACE;AACA;AACF;AACI;AACU;AACd;AACQ;;AAE9C;AACA;AACA;AACA;;AAEA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,UAAU;AACV;AACA,WAAW,oEAAQ;AACnB;AACA;AACA;AACA;AACA;AACA,UAAU,oEAAQ;AAClB,WAAW,oEAAQ;AACnB;AACA;AACA,GAAG;AACH,EAAE,sEAAU,SAAS,wEAAY;AACjC;AACA,aAAa,qEAAS,iEAAiE,mEAAe;AACtG;AACA;AACA;AACA,IAAI,qEAAS;AACb;AACA;AACA,CAAC;;AAEc,6DAAI,EAAC;;;;;;;;;;;;;;ACxDpB;AAAA;AAAA;AAA8C;AACb;AACA;;AAEjC;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,UAAU;AACV;AACA;AACA,SAAS,kEAAM,SAAS,kEAAM,CAAC,wEAAY;AAC3C;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;AC5BtB;AAAiC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kEAAM;AACf;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;ACxBpB;AAAA;AAA4C;AACT;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,qCAAqC;AAChD;AACA,WAAW,SAAS;AACpB,YAAY,OAAO;AACnB,aAAa,MAAM;AACnB;AACA;AACA;AACA,MAAM,8BAA8B;AACpC,MAAM,8BAA8B;AACpC,MAAM,8BAA8B;AACpC,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,mEAAO;AACd;AACA;AACA;AACA,OAAO,mEAAO;AACd;AACA;AACA,SAAS,uEAAW;AACpB;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;AC9CvB;AAAA;AAAsC;AACI;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sEAAU,CAAC,4DAAQ;;AAEf,6DAAI,EAAC;;;;;;;;;;;;;;ACvBpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgC;AACM;AACM;AACE;AACR;AACE;AACF;AACH;;AAEnC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,yBAAyB;AACpC;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oEAAQ;AACvB,0CAA0C,mEAAO;AACjD,MAAM,oEAAQ,gBAAgB,qEAAS,CAAC,gEAAY;AACpD,MAAM,oEAAQ,CAAC,uEAAW,iBAAiB,qEAAS,CAAC,gEAAY;;AAEjE;AACA,SAAS,oEAAQ;AACjB;AACA;;AAEA;AACA;AACA;AACA,WAAW,iEAAK;AAChB,GAAG;AACH,CAAC;;AAEc,iEAAQ,EAAC;;;;;;;;;;;;;;AC5DxB;AAAA;AAA0C;AACA;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sEAAU,CAAC,8DAAU;;AAEtB,kEAAS,EAAC;;;;;;;;;;;;;;ACjCzB;AAAA;AAAwC;AACE;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,SAAS,GAAG,SAAS;AACvD;AACA;AACA,eAAe,sEAAU,CAAC,6DAAS;;AAEpB,iEAAQ,EAAC;;;;;;;;;;;;;;ACpCxB;AAAA;AAAA;AAAA;AAAgD;AACN;AACH;AACF;;AAErC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oEAAQ;AACnB,WAAW,qEAAS;;AAEpB,2BAA2B,sEAAU;AACrC;AACA;AACA;AACA;AACA;AACA,IAAI,yEAAa;AACjB;AACA,IAAI,yEAAa;AACjB;AACA;;AAEe,4DAAG,EAAC;;;;;;;;;;;;;;AChDnB;AAAA;AAAA;AAAA;AAAgD;AACN;AACH;AACF;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oEAAQ;AACnB,WAAW,qEAAS;;AAEpB,2BAA2B,sEAAU;AACrC;AACA,gBAAgB,yEAAa;AAC7B;AACA;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACtCtB;AAAA;AAAA;AAAA;AAAgD;AACN;AACH;AACF;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oEAAQ;AACnB,WAAW,qEAAS;;AAEpB,2BAA2B,sEAAU;AACrC;AACA,OAAO,yEAAa;AACpB;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACtCxB;AAAA;AAA8B;AACO;;AAErC;AACA;;AAEA;AACA,qBAAqB,wDAAI;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,wBAAwB,oEAAQ;AAChC;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AC1CxB;AAAA;AAAA;AAAA;AAAsC;AACI;AACF;AACU;;AAElD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,KAAK;AAChB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,oEAAQ;AACtB,gBAAgB,0EAAc,WAAW,qEAAS;AAClD,SAAS,sEAAU;AACnB,CAAC;;AAED;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACjDvB;AAAA;AAAA;AAAA;AAAsC;AACI;AACF;AACU;;AAElD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,KAAK;AAChB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oEAAQ;AAC3B,gBAAgB,0EAAc,WAAW,qEAAS;AAClD,SAAS,sEAAU;AACnB,CAAC;;AAED;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;AChD5B;AAAsD;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA,MAAM,gDAAgD;AACtD,MAAM,+CAA+C;AACrD,MAAM;AACN;AACA;AACA,mCAAmC,iBAAiB,EAAE;AACtD;AACA;AACA;AACA,uBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4EAAgB;AAChC;AACA,CAAC,cAAc,iBAAiB,EAAE;;AAEnB,kEAAS,EAAC;;;;;;;;;;;;;;AC1CzB;AAAA;AAAsC;AACA;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,UAAU;AACV;AACA,WAAW,oEAAQ;AACnB,4BAA4B,GAAG,oEAAQ;AACvC,CAAC;;AAEc,6DAAI,EAAC;;;;;;;;;;;;;;ACxBpB;AAAA;AAAA;AAAA;AAAsC;AACQ;AACJ;AACI;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,cAAc,oEAAQ,CAAC,wEAAY;AACnC;AACA,GAAG;AACH,cAAc,wEAAY;AAC1B,SAAS,sEAAU;AACnB;AACA,GAAG;AACH;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACpCtB;AAAA;AAA0C;AACI;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,8DAAU;AACrC,gBAAgB,wEAAY;AAC5B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;AC/C5B;AAAA;AAAA;AAAA;AAA8C;AACQ;AACtB;AACA;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,aAAa,SAAS;AACtB;AACA;AACA;AACA,MAAM,OAAO,SAAS,EAAE;AACxB,MAAM,OAAO,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iEAAK,SAAS,wEAAY,CAAC,iEAAK,UAAU,4EAAgB;AACnE;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AC/BxB;AAAoC;;AAEpC;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mEAAO;AAC/C;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;AC7B1B;AAAA;AAAsC;AACH;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oEAAQ,CAAC,2DAAO;;AAEZ,6DAAI,EAAC;;;;;;;;;;;;;;AC5BpB;AAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,uEAAW;AACjB;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;AC5BvB;AAAA;AAA8C;AACF;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA,iBAAiB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;AAC9D;AACA,wBAAwB,SAAS,GAAG,SAAS;AAC7C;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA,MAAM,uEAAW,gBAAgB,wEAAY;AAC7C;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AChCzB;AAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA,iBAAiB,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB;AAC1E;AACA,0BAA0B,iBAAiB;AAC3C;AACA,WAAW,iBAAiB,GAAG,iBAAiB;AAChD;AACA;AACA;AACA,MAAM,uEAAW;AACjB;AACA;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;AC/B3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsC;AACJ;AACQ;AACY;AAChB;AACF;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,qBAAqB;AAChC,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,oEAAQ;AACrB;AACA,eAAe,kEAAM;;AAErB,EAAE,sEAAU,QAAQ,oEAAQ;AAC5B,WAAW,mEAAO;AAClB,GAAG,OAAO,oEAAgB;;AAE1B;AACA,CAAC;;AAEc,+DAAM,EAAC;;;;;;;;;;;;;;AC1CtB;AAAA;AAAA;AAA0C;AACQ;AACb;;AAErC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,0EAAc;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,oEAAQ;AACpB;AACA;AACA;AACA,KAAK;AACL,cAAc,oEAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,sEAAU;AACnB;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACjFtB;AAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uEAAW;;AAER,8DAAK,EAAC;;;;;;;;;;;;;;AC7CrB;AAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uEAAW;;AAEb,mEAAU,EAAC;;;;;;;;;;;;;;ACxC1B;AAAA;AAA0C;AACJ;;AAEtC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,qBAAqB;AAChC,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,YAAY,oEAAQ;AACpB,SAAS,sEAAU;AACnB,CAAC;;AAEc,8DAAK,EAAC;;;;;;;;;;;;;;AChCrB;AAAA;AAAA;AAAA;AAAA;AAA4C;AACN;AACQ;AACJ;AACP;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,aAAa,yBAAyB;AACtC;AACA;AACA,IAAI,IAAI;AACR,UAAU,8BAA8B;AACxC;AACA;AACA,aAAa,mEAAO,eAAe,+DAAW,GAAG,8DAAU;AAC3D;;AAEA,0BAA0B,wEAAY,uCAAuC,4DAAQ;AACrF;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;AClDtB;AAAA;AAAA;AAAA;AAAA;AAAsD;AACN;AACF;AACJ;AACP;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,aAAa,mEAAO,eAAe,oEAAgB,GAAG,8DAAU;AAChE;;AAEA,0BAA0B,wEAAY,uCAAuC,iEAAa;AAC1F;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACnC3B;AAAA;AAAA;AAAA;AAAA;AAA4C;AACF;AACI;AACX;AACF;;AAEjC;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA,MAAM,+CAA+C;AACrD,MAAM;AACN;AACA;AACA,gCAAgC,kBAAkB,EAAE;AACpD;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mEAAO,eAAe,+DAAW,GAAG,8DAAU;AAC3D,0BAA0B,kEAAM,CAAC,wEAAY;AAC7C;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;AC7CtB;AAAA;AAA8C;AACJ;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc,wEAAY;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,sEAAU;AACZ;AACA;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACpDtB;AAAA;AAAA;AAAA;AAA0C;AACQ;AACX;AACF;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0EAAc;AAC7B;AACA,GAAG;AACH,QAAQ,qEAAS;AACjB;AACA,SAAS,sEAAU,CAAC,oEAAQ;AAC5B;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACpCtB;AAAqC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,cAAc;AACzB,WAAW,gBAAgB;AAC3B,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oEAAQ;;AAEvB;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;AC5BvB;AAAA;AAAsC;AACC;;AAEvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,qEAAS;AACjD,SAAS,oEAAQ;AACjB;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;ACvCpB;AAAA;AAAA;AAAsC;AACG;AACT;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,aAAa,EAAE;AACf;AACA;AACA,iBAAiB,QAAQ,OAAO,+BAA+B,EAAE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oEAAQ;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,iEAAK;AACzD;AACA;AACA;AACA;AACA,aAAa,sEAAU;AACvB;AACA;AACA;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACvDtB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACjCvB;AAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uEAAW;;AAER,8DAAK,EAAC;;;;;;;;;;;;;;ACzBrB;AAAA;AAAA;AAA4C;AACF;AACP;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mEAAO,eAAe,+DAAW,GAAG,8DAAU;AAC3D;AACA;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACvBtB;AAAA;AAAA;AAAA;AAAA;AAAoD;AACF;AACf;AACe;AACX;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0EAAc;AAC7B;AACA,GAAG;AACH,QAAQ,qEAAS;AACjB;AACA,aAAa,mEAAO,eAAe,mEAAe,GAAG,kEAAc;AACnE;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACpC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgC;AACD;AACE;AACO;AACX;AACE;AACW;AACf;AACE;AACY;AACR;AACK;AACH;AACU;;AAE9B;AACf,EAAE,iEAAE,EAAE,gEAAK,EAAE,kEAAM,EAAE,yEAAM,EAAE,8DAAI;AACjC,EAAE,gEAAK,EAAE,2EAAO,EAAE,4DAAG,EAAE,8DAAI,EAAE,0EAAU;AACvC,EAAE,mEAAM,EAAE,wEAAK,EAAE,qEAAO,EAAE,+EAAY;AACtC,CAAC,EAAC;;;;;;;;;;;;;;ACnBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+C;AACD;AACE;AACO;AACX;AACE;AACW;AACf;AACE;AACY;AACR;AACK;AACH;AACU;AACjB;;;;;;;;;;;;;;ACd3C;AAAoC;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,mEAAO;AAC1C;;AAEe,4DAAG,EAAC;;;;;;;;;;;;;;AClCnB;AAAoC;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,UAAU,OAAO,WAAW;AAC5B;AACA;AACA;AACA,mCAAmC,mEAAO;AAC1C;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;AC/BvB;AAAA;AAAA;AAA8C;AACF;AACT;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mEAAO,eAAe,gEAAY,GAAG,+DAAW;AAC7D;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACxBvB;AAAA;AAAA;AAAA;AAAA;AAAsC;AACJ;AACS;AACN;AACK;;AAE1C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,uEAAW;AACjB,WAAW,oEAAQ,eAAe,sEAAU;AAC5C;AACA,YAAY,kEAAM;AAClB;AACA;AACA;AACA,SAAS,oEAAQ;AACjB;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;AC7CpB;AAAA;AAAA;AAAwC;AACU;AACX;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,0EAAc;AACrD;AACA;AACA;AACA;AACA,gCAAgC,qEAAS;AACzC,uCAAuC,qEAAS;AAChD;AACA,SAAS,qEAAS;AAClB;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACpCrB;AAAsD;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4EAAgB;AAChC;AACA,CAAC;;AAEc,kEAAS,EAAC;;;;;;;;;;;;;;AC3BzB;AAAA;AAAA;AAAA;AAAA;AAAwC;AACM;AACR;AACH;AACe;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,YAAY,OAAO;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mCAAmC;AACzC,MAAM;AACN;AACA;AACA;AACA,kBAAkB,oCAAoC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mEAAO,eAAe,6DAAS,GAAG,4DAAQ;AACvD,eAAe,0EAAc;AAC7B;AACA;AACA,0BAA0B,wEAAY;AACtC;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;AClDpB;AAAA;AAAA;AAAA;AAA4C;AACA;AACN;AACY;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,yBAAyB;AACpC;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA,MAAM,8BAA8B;AACpC,MAAM,8BAA8B;AACpC,MAAM,8BAA8B;AACpC,MAAM;AACN;AACA;AACA,iCAAiC,eAAe,EAAE;AAClD;AACA;AACA;AACA;AACA;AACA,aAAa,oEAAQ;AACrB;AACA;AACA;AACA;AACA,oBAAoB,0EAAc;AAClC;AACA,GAAG,wBAAwB,0EAAc;AACzC;AACA;AACA,SAAS,uEAAW,aAAa,uEAAW;AAC5C,CAAC;;AAEc,+DAAM,EAAC;;;;;;;;;;;;;;AC/CtB;AAAoD;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,2EAAe;AACxB;;AAEe,oEAAW,EAAC;;;;;;;;;;;;;;ACvB3B;AAAA;AAA8C;AACU;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA,mBAAmB,SAAS,GAAG,SAAS;AACxC;AACA,6BAA6B,SAAS,eAAe,YAAY,EAAE;AACnE;AACA;AACA;AACA,6BAA6B,SAAS;AACtC;AACA;AACA;AACA,SAAS,6EAAiB,eAAe,wEAAY;AACrD;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;AChC7B;AAAA;AAAoD;AAC3B;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2EAAe;AAC/B,0BAA0B,8DAAE;AAC5B;AACA;AACA;AACA;AACA;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;AC9B7B;AAAoD;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,2EAAe;AACxB;;AAEe,wEAAe,EAAC;;;;;;;;;;;;;;ACxB/B;AAAA;AAA8C;AACU;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA,mBAAmB,SAAS,GAAG,SAAS;AACxC;AACA,iCAAiC,SAAS,eAAe,YAAY,EAAE;AACvE;AACA;AACA;AACA,iCAAiC,SAAS;AAC1C;AACA;AACA;AACA,SAAS,6EAAiB,eAAe,wEAAY;AACrD;;AAEe,0EAAiB,EAAC;;;;;;;;;;;;;;AChCjC;AAAA;AAAoD;AAC3B;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2EAAe;AAC/B,QAAQ,8DAAE;AACV;AACA;AACA;AACA;AACA;;AAEe,0EAAiB,EAAC;;;;;;;;;;;;;;AC9BjC;AAAkD;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,0EAAc;AACpB;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACvB1B;AAAA;AAA8C;AACI;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,0EAAc,QAAQ,wEAAY;AACxC;AACA;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACzB5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACN;AACE;AACQ;AACb;AACW;AACX;;AAErC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,cAAc;AACzB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,0EAAc;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oEAAQ;AACnB;AACA;AACA,+BAA+B,oEAAQ;AACvC;AACA,gBAAgB,wEAAY;AAC5B,sBAAsB,sEAAU;AAChC,aAAa,qEAAS,CAAC,yEAAa;AACpC;AACA;AACA;AACA;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACnDrB;AAAA;AAAA;AAAA;AAAA;AAAgC;AACQ;AACF;AACE;AACD;;AAEvC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,qEAAS;AACjD,SAAS,oEAAQ;AACjB;AACA,oBAAoB,qEAAS;;AAE7B;AACA,MAAM,qEAAS;AACf;AACA,WAAW,iEAAK;AAChB,GAAG;AACH;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;AC9DtB;AAAA;AAAsD;AACb;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4EAAgB;AAChC,uCAAuC,sEAAU;AACjD,CAAC;;AAEc,kEAAS,EAAC;;;;;;;;;;;;;;AC5BzB;AAAA;AAAA;AAAA;AAAwC;AACM;AACP;AACF;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oEAAQ;AACnB;AACA;AACA,MAAM,qEAAS,CAAC,qEAAS;;AAEzB,WAAW,wEAAY;AACvB;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACtC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAuC;AACE;AACR;AACI;AACJ;AACY;AACN;AACA;AACE;AACd;AACM;AACI;AACA;AACJ;AACE;AACI;AACR;AACQ;AACE;AACJ;AACgB;AAClB;AACA;AACN;AACM;AACI;AACF;AACA;AACE;AACE;AACV;;AAEhB;AACf,EAAE,wEAAS,EAAE,0EAAU,EAAE,kEAAM,EAAE,sEAAQ,EAAE,kEAAM;AACjD,EAAE,8EAAY,EAAE,wEAAS,EAAE,wEAAS,EAAE,0EAAU,EAAE,4DAAG;AACrD,EAAE,mEAAM,EAAE,uEAAQ,EAAE,uEAAQ,EAAE,mEAAM,EAAE,qEAAO;AAC7C,EAAE,yEAAS,EAAE,iEAAK,EAAE,yEAAS,EAAE,2EAAU,EAAE,uEAAQ;AACnD,EAAE,uFAAgB,EAAE,qEAAO,EAAE,qEAAO,EAAE,+DAAI,EAAE,qEAAO;AACnD,EAAE,yEAAS,EAAE,uEAAQ,EAAE,uEAAQ,EAAE,yEAAS,EAAE,2EAAU;AACtD,EAAE,iEAAK;AACP,CAAC,EAAC;;;;;;;;;;;;;;ACxCF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsD;AACE;AACR;AACI;AACJ;AACY;AACN;AACA;AACE;AACd;AACM;AACI;AACA;AACJ;AACE;AACI;AACR;AACQ;AACE;AACJ;AACgB;AAClB;AACA;AACN;AACM;AACI;AACF;AACA;AACE;AACE;AACV;AACA;;;;;;;;;;;;;;AC/B9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACtBzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACjBzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,YAAY,IAAI;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACtB1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;ACjB1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACjBxB;AAA4D;;AAE5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,eAAe,+EAAmB;AAClC;AACA,CAAC;;AAEc,iEAAQ,EAAC;;;;;;;;;;;;;;ACrBxB;AAAA;AAAoC;AACC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mEAAO,QAAQ,4DAAQ;AAC7B;AACA;;AAEe,4DAAG,EAAC;;;;;;;;;;;;;;ACvBnB;AAAA;AAA8C;AACV;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA,mBAAmB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;AAChE;AACA,iCAAiC,YAAY,EAAE;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mEAAO,QAAQ,wEAAY;AACjC;AACA;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;AChCrB;AAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,qEAAS;AAC3B;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;ACrBpB;AAAA;AAAwC;AACD;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,qEAAS;AAChD,SAAS,qEAAS;AAClB;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;ACpCpB;AAAA;AAAwC;AACD;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,qEAAS;AAChD;AACA,SAAS,qEAAS;AAClB;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACtCzB;AAAA;AAA8C;AACN;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA,MAAM,oCAAoC;AAC1C,MAAM,qCAAqC;AAC3C,MAAM;AACN;AACA;AACA,wCAAwC,kBAAkB,EAAE;AAC5D;AACA;AACA;AACA,4BAA4B,qCAAqC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qEAAS,QAAQ,wEAAY;AACnC;AACA;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;AC5C9B;AAAA;AAA8C;AACN;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA,MAAM,qCAAqC;AAC3C,MAAM,qCAAqC;AAC3C,MAAM;AACN;AACA;AACA,mCAAmC,kBAAkB,EAAE;AACvD;AACA;AACA;AACA,uBAAuB,oCAAoC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qEAAS,QAAQ,wEAAY;AACnC;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AC5CzB;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,SAAS;AACpB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,4DAAG,EAAC;;;;;;;;;;;;;;AC5BnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA6C;AACV;AACO;AACwB;AACZ;AACnB;AACe;AACrB;AACmB;AACK;AAChB;;AAErC;AACA;;AAEA;AACA,yCAAyC;AACzC;AACA,yDAAyD;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,yCAAyC;;AAEzC;AACA;AACA;AACA;AACA,wBAAwB,MAAM,aAAa,OAAO;;AAElD;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO,YAAY;AAC9B,WAAW,OAAO;AAClB;AACA,WAAW,OAAO;AAClB;AACA,WAAW,OAAO;AAClB;AACA,WAAW,OAAO;AAClB;AACA,WAAW,OAAO;AAClB;AACA,WAAW,OAAO;AAClB;AACA,YAAY,OAAO;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA,aAAa,sBAAsB;AACnC,iBAAiB,UAAU;AAC3B;AACA;AACA,kEAAkE,2BAA2B,EAAE;AAC/F,aAAa,8BAA8B;AAC3C;AACA;AACA;AACA,wDAAwD;AACxD,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C,aAAa,oBAAoB;AACjC;AACA;AACA;AACA;AACA,aAAa,qBAAqB;AAClC;AACA;AACA;AACA,iDAAiD,2BAA2B,EAAE;AAC9E,oCAAoC,aAAa,eAAe,EAAE;AAClE,aAAa,8BAA8B;AAC3C;AACA;AACA;AACA,oDAAoD,qCAAqC;AACzF;AACA;AACA;AACA;AACA,sDAAsD,qBAAqB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,YAAY;AACnD,sCAAsC,QAAQ;AAC9C,aAAa,qBAAqB;AAClC;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,oEAAgB,+BAA+B,oEAAgB;;AAEhF,eAAe,0EAAc;AAC7B;AACA;AACA,WAAW,qEAAQ;AACnB,YAAY,wEAAY,GAAG,qBAAqB,0EAAsB;;AAEtE,gBAAgB,wEAAY,GAAG,qCAAqC,0EAAsB;AAC1F,oBAAoB,gEAAI;AACxB,sBAAsB,sEAAU;;AAEhC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,iEAAa;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qEAAqE,oEAAgB;;AAErF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wBAAwB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH,eAAe;;AAEf;AACA;AACA;AACA;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC;;AAExC;AACA,mDAAmD;AACnD;AACA;AACA,yBAAyB,EAAE;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC,2BAA2B,iCAAiC;AAC5D,UAAU;AACV;AACA;AACA,kBAAkB;;AAElB,eAAe,mEAAO;AACtB;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,MAAM,mEAAO;AACb;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AC/QxB;AAAA;AAAA;AAAA;AAAiC;AACK;AACI;AACM;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,YAAY,4DAAQ;;AAEpB;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,cAAc,8DAAU;;AAExB;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,iBAAiB,iEAAa;;AAE9B;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,UAAU,WAAW,0DAAM;AAC3B;AACA;;AAEe,yEAAgB,EAAC;;;;;;;;;;;;;;AClEhC;AAAA;AAAqC;AACA;;AAErC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,OAAO,YAAY;AAC9B,WAAW,QAAQ;AACnB;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,oBAAoB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM,oEAAQ;AACd;AACA;AACA;AACA,SAAS,oEAAQ;AACjB;AACA;AACA;AACA,GAAG;AACH;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACpExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,SAAS;AACpB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;AC3BpB;AAAA;AAAA;AAAwC;AACM;AACP;;AAEvC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,8DAA8D;AAC9D;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qEAAS;AACf;AACA;AACA;AACA;AACA;;AAEA,aAAa,wEAAY;AACzB;;AAEA,eAAe,qEAAS;AACxB;AACA;AACA;AACA;AACA;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;AClDrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AACM;AACN;AACS;AACN;AACe;AACV;AACA;AACM;AACf;;AAEjC;AACA;AACA;;AAEA;AACA,kBAAkB,0DAAM,GAAG,0DAAM;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,MAAM;AACnB;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,uEAAW;AACjB,WAAW,oEAAQ,UAAU,yEAAa,UAAU,qEAAS;AAC7D;AACA;AACA,WAAW,2EAAe;AAC1B;AACA,YAAY,kEAAM;AAClB,6BAA6B,8DAAU,oBAAoB,8DAAU,GAAG,0DAAM;;AAE9E;AACA;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACzDvB;AAAqC;;AAErC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,oEAAQ;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACzCxB;AAAqC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oEAAQ;AACvB;;AAEA;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACnCzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,0EAAiB,EAAC;;;;;;;;;;;;;;ACtBjC;AAAA;AAAA;AAA2C;;;;;;;;;;;;;;ACA3C;AAAA;AAAwC;AACD;;AAEvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,qEAAS,CAAC,qEAAS;AACpC;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACrCxB;AAAqC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oEAAQ;AACjB;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;AC3BvB;AAAA;AAAA;AAAsC;AACD;AACA;;AAErC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,oEAAQ;AACd;AACA;AACA,MAAM,oEAAQ;AACd;AACA,YAAY,oEAAQ;AACpB;AACA;AACA;AACA;AACA,UAAU,oEAAQ;AAClB;AACA;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AC/DxB;AAAA;AAAgD;AACnB;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,yEAAa,CAAC,wDAAI;;AAEjB,gEAAO,EAAC;;;;;;;;;;;;;;AC7BvB;AAAA;AAAgD;AACf;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yEAAa,CAAC,0DAAM;;AAErB,kEAAS,EAAC;;;;;;;;;;;;;;AC7BzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsC;AACE;AACL;AACE;AACS;AACd;AACK;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mEAAO;AACb,WAAW,oEAAQ,QAAQ,yDAAK;AAChC;AACA,SAAS,oEAAQ,oBAAoB,qEAAS,CAAC,wEAAY,CAAC,oEAAQ;AACpE;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;AChCtB;AAAA;AAA0C;AACT;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,UAAU;AACV;AACA,aAAa,SAAS;AACtB,UAAU;AACV;AACA;AACA,SAAS,sEAAU,QAAQ,kEAAM;AACjC;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;AC/B7B;AAAA;AAAwC;AACD;;AAEvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qEAAS,CAAC,qEAAS;AACzB;AACA;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;ACpC7B;AAA8C;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,wEAAY;AAC1C;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AC3BxB;AAAqC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oEAAQ;AACjB;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;AC3BvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACE;AACA;AACI;AACA;AACX;AACE;AACI;AACJ;AACQ;;AAE7C;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,gBAAgB,yBAAyB;AACzC;AACA,IAAI,IAAI;AACR,UAAU;AACV;AACA;AACA,cAAc,mEAAO;AACrB,2BAA2B,oEAAQ,YAAY,wEAAY;;AAE3D,aAAa,wEAAY;AACzB;AACA;AACA;AACA;AACA;AACA,aAAa,oEAAQ;AACrB,oBAAoB,sEAAU,SAAS,sEAAU,CAAC,wEAAY;AAC9D;AACA;AACA;AACA;AACA;AACA,eAAe,6DAAS,GAAG,8DAAU;AACrC;AACA,GAAG;AACH;AACA;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AChEzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACR;AACE;AACQ;AACI;AACJ;AACX;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oEAAQ;AACnB;AACA,WAAW,oEAAQ;AACnB;AACA,2BAA2B,wEAAY;AACvC;AACA;AACA,mBAAmB,yEAAa;AAChC,mBAAmB,yEAAa;AAChC,cAAc,2EAAe;AAC7B,YAAY,yEAAa;;AAEzB,SAAS,qEAAS;AAClB;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;AC9CpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACN;AACQ;AACA;AACX;AACe;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oEAAQ;AACnB;AACA,2BAA2B,2EAAe;AAC1C;AACA,2BAA2B,wEAAY;AACvC;AACA;AACA,mBAAmB,yEAAa;AAChC,YAAY,yEAAa,aAAa,yEAAa;;AAEnD,SAAS,qEAAS;AAClB;;AAEe,gEAAO,EAAC;;;;;;;;;;;;;;ACxCvB;AAAA;AAAA;AAAA;AAAA;AAA8C;AACN;AACY;AACJ;AACX;;AAErC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oEAAQ;AACnB;AACA;AACA;AACA,2BAA2B,wEAAY;AACvC;AACA;AACA,mBAAmB,yEAAa;AAChC,cAAc,2EAAe,aAAa,yEAAa;;AAEvD,SAAS,qEAAS;AAClB;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;AC1CzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACN;AACE;AACL;AACA;AACK;AACM;AACT;AACF;;AAErC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO,YAAY;AAC9B,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA,MAAM,oEAAQ;AACd;AACA,mCAAmC,qEAAS;AAC5C,uCAAuC,wEAAY;AACnD;AACA,WAAW,oEAAQ;;AAEnB;AACA,MAAM,sEAAU;AAChB,qBAAqB,yEAAa;AAClC;AACA;AACA;AACA;AACA;AACA,qBAAqB,sEAAU;AAC/B;AACA;AACA;AACA;AACA,MAAM,qEAAS;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,oEAAQ;AACd;AACA;AACA;;AAEA;AACA,6CAA6C,oEAAQ;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,yBAAyB,wEAAY;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AC9GxB;AAA2B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,+DAAG;AACZ;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACrBrB;AAAA;AAAqC;AACiB;;AAEtD;AACA,6CAA6C;AAC7C;;AAEA;AACA,6BAA6B;AAC7B,SAAS,QAAQ,QAAQ,UAAU,aAAa;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA,WAAW,oEAAQ;AACnB;AACA,oCAAoC,oEAAgB;AACpD;AACA;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;ACjCxB;AAAA;AAAA;AAAA;AAA4C;AACN;AACA;AACiB;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA,YAAY,oEAAQ;AACpB,SAAS,oEAAQ,CAAC,uEAAW,YAAY,qEAAiB;AAC1D,CAAC;;AAEc,8DAAK,EAAC;;;;;;;;;;;;;;ACzBrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACE;AACR;AACA;AACiB;AAC1B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS,KAAK,SAAS,GAAG,SAAS;AAClD,WAAW,SAAS,GAAG,SAAS;AAChC;AACA,cAAc,oEAAQ;AACtB,iBAAiB,gEAAI;AACrB,MAAM,6EAAiB;AACvB;AACA;AACA,SAAS,oEAAQ,CAAC,uEAAW,YAAY,qEAAiB,SAAS,wEAAY;AAC/E,CAAC;;AAEc,gEAAO,EAAC;;;;;;;;;;;;;;ACtCvB;AAAA;AAAA;AAAA;AAAA;AAA4C;AACN;AACA;AACiB;AAC1B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA,mBAAmB,iBAAiB,GAAG,iBAAiB;AACxD,kBAAkB,iBAAiB,GAAG,iBAAiB;AACvD;AACA;AACA,WAAW,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB;AACpE;AACA,gBAAgB,oEAAQ;AACxB,mBAAmB,gEAAI;AACvB;AACA,SAAS,oEAAQ,CAAC,uEAAW,YAAY,qEAAiB;AAC1D,CAAC;;AAEc,kEAAS,EAAC;;;;;;;;;;;;;;ACjCzB;AAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,oEAAQ;AAC3C;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;ACxBpB;AAAA;AAA8C;AACR;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS,GAAG,SAAS,GAAG,SAAS;AAC/C,WAAW,SAAS,GAAG,SAAS;AAChC;AACA;AACA,mCAAmC,oEAAQ,QAAQ,wEAAY;AAC/D;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;AC9BtB;AAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA,mBAAmB,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB;AAC5E;AACA;AACA,WAAW,iBAAiB,GAAG,iBAAiB;AAChD;AACA;AACA;AACA,mCAAmC,oEAAQ;AAC3C;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AC3BxB;AAAqC;;AAErC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oEAAQ;AACjB;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AC3BxB;AAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,aAAa,QAAQ;AACrB;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA,UAAU,QAAQ,QAAQ,EAAE;AAC5B;AACA;AACA;AACA;AACA;AACA,UAAU,QAAQ,QAAQ,EAAE;AAC5B;AACA;AACA,iCAAiC,qEAAS;AAC1C;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;ACjCrB;AAAA;AAAA;AAAA;AAAA;AAA4C;AACN;AACQ;AACN;AACe;;AAEvD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,uEAAW;AACrB,QAAQ,6EAAiB;AACzB;AACA;AACA;AACA,GAAG;AACH,SAAS,qEAAS;AAClB,WAAW,oEAAQ,QAAQ,wEAAY;AACvC,GAAG;AACH;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;AC5CrB;AAAA;AAAA;AAAgC;AACM;AACP;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iEAAK;AACpB;AACA;AACA;AACA,SAAS,oEAAQ;AACjB,WAAW,iEAAK;AAChB,GAAG;AACH;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACtCzB;AAAA;AAA0C;AACI;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA,6CAA6C,cAAc,EAAE;AAC7D;AACA;AACA;AACA,6CAA6C,sBAAsB,EAAE;AACrE;AACA;AACA;AACA;AACA,mCAAmC,sEAAU,eAAe,wEAAY;AACxE;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;AClCtB;AAAA;AAA0C;AACI;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,UAAU,OAAO,WAAW;AAC5B;AACA;AACA;AACA,mCAAmC,sEAAU,eAAe,wEAAY;AACxE;;AAEe,mEAAU,EAAC;;;;;;;;;;;;;;AChC1B;AAAsD;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4EAAgB;AAChC;AACA,CAAC;;AAEc,kEAAS,EAAC;;;;;;;;;;;;;;AC1BzB;AAAoD;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2EAAe;;AAEjB,mEAAU,EAAC;;;;;;;;;;;;;;ACrB1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmC;AACA;AACN;AACQ;AACA;AACE;AACV;AACU;AACF;AACA;AACF;AACgB;AAClB;AACI;AACN;AACF;AACI;AACJ;AACU;AACF;AACA;AACI;AACV;AACU;AACF;AACA;AACE;AACA;AACJ;AACN;AACE;AACI;;AAEtB;AACf,EAAE,oEAAO,EAAE,oEAAO,EAAE,8DAAI,EAAE,sEAAQ,EAAE,sEAAQ;AAC5C,EAAE,wEAAS,EAAE,8DAAI,EAAE,wEAAS,EAAE,sEAAQ,EAAE,sEAAQ;AAChD,EAAE,qEAAO,EAAE,qFAAe,EAAE,mEAAM,EAAE,uEAAQ,EAAE,iEAAK;AACnD,EAAE,+DAAI,EAAE,mEAAM,EAAE,+DAAI,EAAE,yEAAS,EAAE,uEAAQ;AACzC,EAAE,uEAAQ,EAAE,2EAAU,EAAE,iEAAK,EAAE,2EAAU,EAAE,yEAAS;AACpD,EAAE,yEAAS,EAAE,2EAAU,EAAE,2EAAU,EAAE,uEAAQ,EAAE,iEAAK;AACpD,EAAE,mEAAM,EAAE,uEAAQ;AAClB,CAAC,EAAC;;;;;;;;;;;;;;ACzCF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkD;AACA;AACN;AACQ;AACA;AACE;AACV;AACU;AACF;AACA;AACF;AACgB;AAClB;AACI;AACN;AACF;AACI;AACJ;AACU;AACF;AACA;AACI;AACV;AACU;AACF;AACA;AACE;AACA;AACJ;AACN;AACE;AACI;AACR;;;;;;;;;;;;;AChC5C;AAA2C;;;;;;;;;;;;;;ACA3C;AAAA;AAAA;AAA2C;;;;;;;;;;;;;;ACA3C;AAAA;AAA0C;AACb;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sEAAU,SAAS,gEAAI;AACtD;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;ACjCtB;AAAA;AAA0C;AACT;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sEAAU,SAAS,kEAAM;AACxD;;AAEe,iEAAQ,EAAC;;;;;;;;;;;;;;AC/BxB;AAAA;AAAA;AAAkD;AACZ;AACiB;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,oEAAQ;AACtB,SAAS,6EAAiB;AAC1B,MAAM,0EAAc;AACpB;AACA,CAAC;;AAEc,gEAAO,EAAC;;;;;;;;;;;;;;AC9BvB;AAAA;AAAA;AAAA;AAA0C;AACQ;AACb;AACS;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,cAAc;AACzB,YAAY,OAAO;AACnB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oEAAQ;AACnB;;AAEA;AACA,WAAW,0EAAc,WAAW,wEAAY,WAAW,sEAAU;AACrE;AACA;AACA;;AAEe,8DAAK,EAAC;;;;;;;;;;;;;;AClCrB;AAAA;AAA8C;AACX;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,gCAAgC;AAChC;AACA;AACA,SAAS,mEAAO,CAAC,wEAAY;AAC7B;;AAEe,6DAAI,EAAC;;;;;;;;;;;;;;AC7BpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACI;AACd;AACI;AACF;AACP;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA,gBAAgB,oEAAQ;AACxB;AACA;AACA;AACA,sCAAsC,QAAQ,kEAAM,gBAAgB;;AAEpE;AACA,yBAAyB,+DAAW,MAAM,mEAAO;AACjD;AACA;AACA;AACA;AACA,YAAY,wDAAI;AAChB;AACA;AACA,GAAG;AACH,aAAa,iEAAa;AAC1B;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAEc,kEAAS,EAAC;;;;;;;;;;;;;;AC/CzB;AAA+B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,MAAM,8BAA8B;AACpC,MAAM;AACN;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,SAAS,iEAAK;AACd;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACjC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACI;AACN;AACP;AACU;AACC;;AAE9C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,wEAAY,YAAY,mEAAO,8BAA8B,+DAAW;AAC9E,yBAAyB,iEAAa;AACtC;AACA;AACA;AACA,aAAa,wEAAY;AACzB;AACA;AACA,aAAa,iEAAa;AAC1B;;AAEA;AACA,mBAAmB,8DAAU;AAC7B;;AAEe,+DAAM,EAAC;;;;;;;;;;;;;;AClJtB;AAAA;AAAA;AAAA;AAA4C;AACI;AACb;AACN;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+DAAW;AAClC;AACA;AACA,oBAAoB,+DAAW;AAC/B;AACA;AACA;AACA,cAAc,wDAAI;AAClB,eAAe,2DAAO;AACtB;AACA,KAAK;AACL,eAAe,iEAAa;AAC5B;AACA,mBAAmB,2DAAO;AAC1B;;AAEe,uEAAc,EAAC;;;;;;;;;;;;;;AC3C9B;AAAsD;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,4EAAgB;AACzB;;AAEe,qEAAY,EAAC;;;;;;;;;;;;;;ACpB5B;AAAA;AAAA;AAAA;AAA4C;AACN;AACF;AACmB;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,oEAAQ;AAClB,SAAS,mEAAO,CAAC,uEAAW,SAAS,qEAAiB;AACtD,CAAC;;AAEc,4DAAG,EAAC;;;;;;;;;;;;;;AC3BnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACE;AACR;AACF;AACmB;AAC1B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS,KAAK,SAAS,GAAG,SAAS;AAChD,WAAW,SAAS;AACpB;AACA,YAAY,oEAAQ;AACpB,iBAAiB,gEAAI;AACrB,MAAM,6EAAiB;AACvB;AACA;AACA,SAAS,mEAAO,CAAC,uEAAW,SAAS,qEAAiB,GAAG,wEAAY;AACrE,CAAC;;AAEc,8DAAK,EAAC;;;;;;;;;;;;;;ACtCrB;AAAA;AAAA;AAAA;AAAA;AAA4C;AACN;AACF;AACmB;AAC1B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA,mBAAmB,iBAAiB,GAAG,iBAAiB;AACxD,kBAAkB,iBAAiB,GAAG,iBAAiB;AACvD;AACA;AACA,WAAW,iBAAiB,GAAG,iBAAiB;AAChD;AACA,cAAc,oEAAQ;AACtB,mBAAmB,gEAAI;AACvB;AACA,SAAS,mEAAO,CAAC,uEAAW,SAAS,qEAAiB;AACtD,CAAC;;AAEc,gEAAO,EAAC;;;;;;;;;;;;;;ACjCvB;AAAA;AAAsC;AACP;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA,UAAU,oEAAQ,CAAC,yDAAK;;AAET,4DAAG,EAAC;;;;;;;;;;;;;;ACrBnB;AAAA;AAA4C;AACI;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,SAAS,yEAAa,4BAA4B,+DAAW;AAC7D;;AAEe,kEAAS,EAAC;;;;;;;;;;;;;;ACvBzB;AAAA;AAAoC;AACY;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACA;AACA,UAAU,OAAO,QAAQ,SAAS,GAAG,SAAS,GAAG;AACjD;AACA;AACA,SAAS,yEAAa,4BAA4B,2DAAO;AACzD;;AAEe,sEAAa,EAAC;;;;;;;;;;;;;;ACtB7B;AAAA;AAAsC;AACC;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,cAAc,oEAAQ;AACtB;AACA;;AAEA;AACA,SAAS,qEAAS;AAClB,CAAC;;AAEc,gEAAO,EAAC;;;;;;;;;;;;AC/BvB;;AAEA;AACA,cAAc,mBAAO,CAAC,wwBAA+b;AACrd;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,6HAAgE;AAClF,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;;ACXf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;;;;;;;;;;;;;ACvBA;AAAA;AAAA;AAAA;AAAA;AAAwF;AAC3B;AACL;AAC0B;;;AAGlF;AAC6F;AAC7F,gBAAgB,mHAAU;AAC1B,EAAE,uFAAM;AACR,EAAE,4FAAM;AACR,EAAE,qGAAe;AACjB;AACA;AACA;AACA;;AAEA;;AAEA;AACA,IAAI,KAAU,EAAE,YAiBf;AACD;AACe,gF;;;;;;;;;;;;;ACvCf;AAAkS,CAAgB,4UAAG,EAAC,C;;;;;;;;;;;;ACAtT;AAAA;AAAA;;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA","file":"js/66.js?id=bc86294a8cbb15a7bd20","sourcesContent":["import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nfunction _callSuper(t, o, e) {\n  return o = getPrototypeOf(o), possibleConstructorReturn(t, isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf(t).constructor) : o.apply(t, e));\n}\nexport { _callSuper as default };","import isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _construct(t, e, r) {\n  if (isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);\n  var o = [null];\n  o.push.apply(o, e);\n  var p = new (t.bind.apply(t, o))();\n  return r && setPrototypeOf(p, r.prototype), p;\n}\nexport { _construct as default };","import superPropBase from \"./superPropBase.js\";\nfunction _get() {\n  return _get = \"undefined\" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) {\n    var p = superPropBase(e, t);\n    if (p) {\n      var n = Object.getOwnPropertyDescriptor(p, t);\n      return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value;\n    }\n  }, _get.apply(null, arguments);\n}\nexport { _get as default };","function _isNativeFunction(t) {\n  try {\n    return -1 !== Function.toString.call(t).indexOf(\"[native code]\");\n  } catch (n) {\n    return \"function\" == typeof t;\n  }\n}\nexport { _isNativeFunction as default };","function _readOnlyError(r) {\n  throw new TypeError('\"' + r + '\" is read-only');\n}\nexport { _readOnlyError as default };","import getPrototypeOf from \"./getPrototypeOf.js\";\nfunction _superPropBase(t, o) {\n  for (; !{}.hasOwnProperty.call(t, o) && null !== (t = getPrototypeOf(t)););\n  return t;\n}\nexport { _superPropBase as default };","import get from \"./get.js\";\nimport getPrototypeOf from \"./getPrototypeOf.js\";\nfunction _superPropGet(t, o, e, r) {\n  var p = get(getPrototypeOf(1 & r ? t.prototype : t), o, e);\n  return 2 & r && \"function\" == typeof p ? function (t) {\n    return p.apply(e, t);\n  } : p;\n}\nexport { _superPropGet as default };","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nfunction _wrapNativeSuper(t) {\n  var r = \"function\" == typeof Map ? new Map() : void 0;\n  return _wrapNativeSuper = function _wrapNativeSuper(t) {\n    if (null === t || !isNativeFunction(t)) return t;\n    if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\");\n    if (void 0 !== r) {\n      if (r.has(t)) return r.get(t);\n      r.set(t, Wrapper);\n    }\n    function Wrapper() {\n      return construct(t, arguments, getPrototypeOf(this).constructor);\n    }\n    return Wrapper.prototype = Object.create(t.prototype, {\n      constructor: {\n        value: Wrapper,\n        enumerable: !1,\n        writable: !0,\n        configurable: !0\n      }\n    }), setPrototypeOf(Wrapper, t);\n  }, _wrapNativeSuper(t);\n}\nexport { _wrapNativeSuper as default };","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module basic-styles/attributecommand\n */\n\nimport Command from '@ckeditor/ckeditor5-core/src/command';\n\n/**\n * An extension of the base {@link module:core/command~Command} class, which provides utilities for a command\n * that toggles a single attribute on a text or an element.\n *\n * `AttributeCommand` uses {@link module:engine/model/document~Document#selection}\n * to decide which nodes (if any) should be changed, and applies or removes the attribute from them.\n *\n * The command checks the {@link module:engine/model/model~Model#schema} to decide if it can be enabled\n * for the current selection and to which nodes the attribute can be applied.\n *\n * @extends module:core/command~Command\n */\nvar AttributeCommand = /*#__PURE__*/function (_Command) {\n  /**\n   * @param {module:core/editor/editor~Editor} editor\n   * @param {String} attributeKey Attribute that will be set by the command.\n   */\n  function AttributeCommand(editor, attributeKey) {\n    var _this;\n    _classCallCheck(this, AttributeCommand);\n    _this = _callSuper(this, AttributeCommand, [editor]);\n\n    /**\n     * The attribute that will be set by the command.\n     *\n     * @readonly\n     * @member {String}\n     */\n    _this.attributeKey = attributeKey;\n\n    /**\n     * Flag indicating whether the command is active. The command is active when the\n     * {@link module:engine/model/selection~Selection#hasAttribute selection has the attribute} which means that:\n     *\n     * * If the selection is not empty &ndash; That the attribute is set on the first node in the selection that allows this attribute.\n     * * If the selection is empty &ndash; That the selection has the attribute itself (which means that newly typed\n     * text will have this attribute, too).\n     *\n     * @observable\n     * @readonly\n     * @member {Boolean} #value\n     */\n    return _this;\n  }\n\n  /**\n   * Updates the command's {@link #value} and {@link #isEnabled} based on the current selection.\n   */\n  _inherits(AttributeCommand, _Command);\n  return _createClass(AttributeCommand, [{\n    key: \"refresh\",\n    value: function refresh() {\n      var model = this.editor.model;\n      var doc = model.document;\n      this.value = this._getValueFromFirstAllowedNode();\n      this.isEnabled = model.schema.checkAttributeInSelection(doc.selection, this.attributeKey);\n    }\n\n    /**\n     * Executes the command &mdash; applies the attribute to the selection or removes it from the selection.\n     *\n     * If the command is active (`value == true`), it will remove attributes. Otherwise, it will set attributes.\n     *\n     * The execution result differs, depending on the {@link module:engine/model/document~Document#selection}:\n     *\n     * * If the selection is on a range, the command applies the attribute to all nodes in that range\n     * (if they are allowed to have this attribute by the {@link module:engine/model/schema~Schema schema}).\n     * * If the selection is collapsed in a non-empty node, the command applies the attribute to the\n     * {@link module:engine/model/document~Document#selection} itself (note that typed characters copy attributes from the selection).\n     * * If the selection is collapsed in an empty node, the command applies the attribute to the parent node of the selection (note\n     * that the selection inherits all attributes from a node if it is in an empty node).\n     *\n     * @fires execute\n     * @param {Object} [options] Command options.\n     * @param {Boolean} [options.forceValue] If set, it will force the command behavior. If `true`, the command will apply the attribute,\n     * otherwise the command will remove the attribute.\n     * If not set, the command will look for its current value to decide what it should do.\n     */\n  }, {\n    key: \"execute\",\n    value: function execute() {\n      var _this2 = this;\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var model = this.editor.model;\n      var doc = model.document;\n      var selection = doc.selection;\n      var value = options.forceValue === undefined ? !this.value : options.forceValue;\n      model.change(function (writer) {\n        if (selection.isCollapsed) {\n          if (value) {\n            writer.setSelectionAttribute(_this2.attributeKey, true);\n          } else {\n            writer.removeSelectionAttribute(_this2.attributeKey);\n          }\n        } else {\n          var ranges = model.schema.getValidRanges(selection.getRanges(), _this2.attributeKey);\n          var _iterator = _createForOfIteratorHelper(ranges),\n            _step;\n          try {\n            for (_iterator.s(); !(_step = _iterator.n()).done;) {\n              var range = _step.value;\n              if (value) {\n                writer.setAttribute(_this2.attributeKey, value, range);\n              } else {\n                writer.removeAttribute(_this2.attributeKey, range);\n              }\n            }\n          } catch (err) {\n            _iterator.e(err);\n          } finally {\n            _iterator.f();\n          }\n        }\n      });\n    }\n\n    /**\n     * Checks the attribute value of the first node in the selection that allows the attribute.\n     * For the collapsed selection returns the selection attribute.\n     *\n     * @private\n     * @returns {Boolean} The attribute value.\n     */\n  }, {\n    key: \"_getValueFromFirstAllowedNode\",\n    value: function _getValueFromFirstAllowedNode() {\n      var model = this.editor.model;\n      var schema = model.schema;\n      var selection = model.document.selection;\n      if (selection.isCollapsed) {\n        return selection.hasAttribute(this.attributeKey);\n      }\n      var _iterator2 = _createForOfIteratorHelper(selection.getRanges()),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var range = _step2.value;\n          var _iterator3 = _createForOfIteratorHelper(range.getItems()),\n            _step3;\n          try {\n            for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n              var item = _step3.value;\n              if (schema.checkAttribute(item, this.attributeKey)) {\n                return item.hasAttribute(this.attributeKey);\n              }\n            }\n          } catch (err) {\n            _iterator3.e(err);\n          } finally {\n            _iterator3.f();\n          }\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      return false;\n    }\n  }]);\n}(Command);\nexport { AttributeCommand as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module basic-styles/bold\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport BoldEditing from './bold/boldediting';\nimport BoldUI from './bold/boldui';\n\n/**\n * The bold feature.\n *\n * For a detailed overview check the {@glink features/basic-styles Basic styles feature documentation}\n * and the {@glink api/basic-styles package page}.\n *\n * This is a \"glue\" plugin which loads the {@link module:basic-styles/bold/boldediting~BoldEditing bold editing feature}\n * and {@link module:basic-styles/bold/boldui~BoldUI bold UI feature}.\n *\n * @extends module:core/plugin~Plugin\n */\nvar Bold = /*#__PURE__*/function (_Plugin) {\n  function Bold() {\n    _classCallCheck(this, Bold);\n    return _callSuper(this, Bold, arguments);\n  }\n  _inherits(Bold, _Plugin);\n  return _createClass(Bold, null, [{\n    key: \"requires\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return [BoldEditing, BoldUI];\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"pluginName\",\n    get: function get() {\n      return 'Bold';\n    }\n  }]);\n}(Plugin);\nexport { Bold as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.number.constructor.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module basic-styles/bold/boldediting\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport AttributeCommand from '../attributecommand';\nvar BOLD = 'bold';\n\n/**\n * The bold editing feature.\n *\n * It registers the `'bold'` command and introduces the `bold` attribute in the model which renders to the view\n * as a `<strong>` element.\n *\n * @extends module:core/plugin~Plugin\n */\nvar BoldEditing = /*#__PURE__*/function (_Plugin) {\n  function BoldEditing() {\n    _classCallCheck(this, BoldEditing);\n    return _callSuper(this, BoldEditing, arguments);\n  }\n  _inherits(BoldEditing, _Plugin);\n  return _createClass(BoldEditing, [{\n    key: \"init\",\n    value:\n    /**\n     * @inheritDoc\n     */\n    function init() {\n      var editor = this.editor;\n      // Allow bold attribute on text nodes.\n      editor.model.schema.extend('$text', {\n        allowAttributes: BOLD\n      });\n      editor.model.schema.setAttributeProperties(BOLD, {\n        isFormatting: true,\n        copyOnEnter: true\n      });\n\n      // Build converter from model to view for data and editing pipelines.\n      editor.conversion.attributeToElement({\n        model: BOLD,\n        view: 'strong',\n        upcastAlso: ['b', function (viewElement) {\n          var fontWeight = viewElement.getStyle('font-weight');\n          if (!fontWeight) {\n            return null;\n          }\n\n          // Value of the `font-weight` attribute can be defined as a string or a number.\n          if (fontWeight == 'bold' || Number(fontWeight) >= 600) {\n            return {\n              name: true,\n              styles: ['font-weight']\n            };\n          }\n        }]\n      });\n\n      // Create bold command.\n      editor.commands.add(BOLD, new AttributeCommand(editor, BOLD));\n\n      // Set the Ctrl+B keystroke.\n      editor.keystrokes.set('CTRL+B', BOLD);\n    }\n  }], [{\n    key: \"pluginName\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return 'BoldEditing';\n    }\n  }]);\n}(Plugin);\nexport { BoldEditing as default };","import _classCallCheck from '/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js';\nimport _createClass from '/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js';\nimport _callSuper from '/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js';\nimport _inherits from '/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js';\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module basic-styles/bold/boldui\n */\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview';\nimport boldIcon from '../../theme/icons/bold.svg';\nvar BOLD = 'bold';\n/**\n * The bold UI feature. It introduces the Bold button.\n *\n * @extends module:core/plugin~Plugin\n */\nvar BoldUI = /*#__PURE__*/\nfunction (_Plugin) {\n    function BoldUI() {\n        _classCallCheck(this, BoldUI);\n        return _callSuper(this, BoldUI, arguments);\n    }\n    _inherits(BoldUI, _Plugin);\n    return _createClass(BoldUI, [{\n            key: 'init',\n            value: /**\n     * @inheritDoc\n     */\n            function init() {\n                var _this = this;\n                var editor = this.editor;\n                var t = editor.t;\n                // Add bold button to feature components.\n                editor.ui.componentFactory.add(BOLD, function (locale) {\n                    var command = editor.commands.get(BOLD);\n                    var view = new ButtonView(locale);\n                    view.set({\n                        label: t('Bold'),\n                        icon: boldIcon,\n                        keystroke: 'CTRL+B',\n                        tooltip: true,\n                        isToggleable: true\n                    });\n                    view.bind('isOn', 'isEnabled').to(command, 'value', 'isEnabled');\n                    // Execute command.\n                    _this.listenTo(view, 'execute', function () {\n                        return editor.execute(BOLD);\n                    });\n                    return view;\n                });\n            }\n        }]);\n}(Plugin);\nexport {\n    BoldUI as default\n};","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module basic-styles/italic\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport ItalicEditing from './italic/italicediting';\nimport ItalicUI from './italic/italicui';\n\n/**\n * The italic feature.\n *\n * For a detailed overview check the {@glink features/basic-styles Basic styles feature documentation}\n * and the {@glink api/basic-styles package page}.\n *\n * This is a \"glue\" plugin which loads the {@link module:basic-styles/italic/italicediting~ItalicEditing} and\n * {@link module:basic-styles/italic/italicui~ItalicUI} plugins.\n *\n * @extends module:core/plugin~Plugin\n */\nvar Italic = /*#__PURE__*/function (_Plugin) {\n  function Italic() {\n    _classCallCheck(this, Italic);\n    return _callSuper(this, Italic, arguments);\n  }\n  _inherits(Italic, _Plugin);\n  return _createClass(Italic, null, [{\n    key: \"requires\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return [ItalicEditing, ItalicUI];\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"pluginName\",\n    get: function get() {\n      return 'Italic';\n    }\n  }]);\n}(Plugin);\nexport { Italic as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module basic-styles/italic/italicediting\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport AttributeCommand from '../attributecommand';\nvar ITALIC = 'italic';\n\n/**\n * The italic editing feature.\n *\n * It registers the `'italic'` command, the <kbd>Ctrl+I</kbd> keystroke and introduces the `italic` attribute in the model\n * which renders to the view as an `<i>` element.\n *\n * @extends module:core/plugin~Plugin\n */\nvar ItalicEditing = /*#__PURE__*/function (_Plugin) {\n  function ItalicEditing() {\n    _classCallCheck(this, ItalicEditing);\n    return _callSuper(this, ItalicEditing, arguments);\n  }\n  _inherits(ItalicEditing, _Plugin);\n  return _createClass(ItalicEditing, [{\n    key: \"init\",\n    value:\n    /**\n     * @inheritDoc\n     */\n    function init() {\n      var editor = this.editor;\n\n      // Allow italic attribute on text nodes.\n      editor.model.schema.extend('$text', {\n        allowAttributes: ITALIC\n      });\n      editor.model.schema.setAttributeProperties(ITALIC, {\n        isFormatting: true,\n        copyOnEnter: true\n      });\n      editor.conversion.attributeToElement({\n        model: ITALIC,\n        view: 'i',\n        upcastAlso: ['em', {\n          styles: {\n            'font-style': 'italic'\n          }\n        }]\n      });\n\n      // Create italic command.\n      editor.commands.add(ITALIC, new AttributeCommand(editor, ITALIC));\n\n      // Set the Ctrl+I keystroke.\n      editor.keystrokes.set('CTRL+I', ITALIC);\n    }\n  }], [{\n    key: \"pluginName\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return 'ItalicEditing';\n    }\n  }]);\n}(Plugin);\nexport { ItalicEditing as default };","import _classCallCheck from '/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js';\nimport _createClass from '/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js';\nimport _callSuper from '/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js';\nimport _inherits from '/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js';\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module basic-styles/italic/italicui\n */\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview';\nimport italicIcon from '../../theme/icons/italic.svg';\nvar ITALIC = 'italic';\n/**\n * The italic UI feature. It introduces the Italic button.\n *\n * @extends module:core/plugin~Plugin\n */\nvar ItalicUI = /*#__PURE__*/\nfunction (_Plugin) {\n    function ItalicUI() {\n        _classCallCheck(this, ItalicUI);\n        return _callSuper(this, ItalicUI, arguments);\n    }\n    _inherits(ItalicUI, _Plugin);\n    return _createClass(ItalicUI, [{\n            key: 'init',\n            value: /**\n     * @inheritDoc\n     */\n            function init() {\n                var _this = this;\n                var editor = this.editor;\n                var t = editor.t;\n                // Add bold button to feature components.\n                editor.ui.componentFactory.add(ITALIC, function (locale) {\n                    var command = editor.commands.get(ITALIC);\n                    var view = new ButtonView(locale);\n                    view.set({\n                        label: t('Italic'),\n                        icon: italicIcon,\n                        keystroke: 'CTRL+I',\n                        tooltip: true,\n                        isToggleable: true\n                    });\n                    view.bind('isOn', 'isEnabled').to(command, 'value', 'isEnabled');\n                    // Execute command.\n                    _this.listenTo(view, 'execute', function () {\n                        return editor.execute(ITALIC);\n                    });\n                    return view;\n                });\n            }\n        }]);\n}(Plugin);\nexport {\n    ItalicUI as default\n};","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module basic-styles/underline\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport UnderlineEditing from './underline/underlineediting';\nimport UnderlineUI from './underline/underlineui';\n\n/**\n * The underline feature.\n *\n * For a detailed overview check the {@glink features/basic-styles Basic styles feature documentation}\n * and the {@glink api/basic-styles package page}.\n *\n * This is a \"glue\" plugin which loads the {@link module:basic-styles/underline/underlineediting~UnderlineEditing} and\n * {@link module:basic-styles/underline/underlineui~UnderlineUI} plugins.\n *\n * @extends module:core/plugin~Plugin\n */\nvar Underline = /*#__PURE__*/function (_Plugin) {\n  function Underline() {\n    _classCallCheck(this, Underline);\n    return _callSuper(this, Underline, arguments);\n  }\n  _inherits(Underline, _Plugin);\n  return _createClass(Underline, null, [{\n    key: \"requires\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return [UnderlineEditing, UnderlineUI];\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"pluginName\",\n    get: function get() {\n      return 'Underline';\n    }\n  }]);\n}(Plugin);\nexport { Underline as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module basic-styles/underline/underlineediting\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport AttributeCommand from '../attributecommand';\nvar UNDERLINE = 'underline';\n\n/**\n * The underline editing feature.\n *\n * It registers the `'underline'` command, the <kbd>Ctrl+U</kbd> keystroke\n * and introduces the `underline` attribute in the model which renders to the view as an `<u>` element.\n *\n * @extends module:core/plugin~Plugin\n */\nvar UnderlineEditing = /*#__PURE__*/function (_Plugin) {\n  function UnderlineEditing() {\n    _classCallCheck(this, UnderlineEditing);\n    return _callSuper(this, UnderlineEditing, arguments);\n  }\n  _inherits(UnderlineEditing, _Plugin);\n  return _createClass(UnderlineEditing, [{\n    key: \"init\",\n    value:\n    /**\n     * @inheritDoc\n     */\n    function init() {\n      var editor = this.editor;\n\n      // Allow strikethrough attribute on text nodes.\n      editor.model.schema.extend('$text', {\n        allowAttributes: UNDERLINE\n      });\n      editor.model.schema.setAttributeProperties(UNDERLINE, {\n        isFormatting: true,\n        copyOnEnter: true\n      });\n      editor.conversion.attributeToElement({\n        model: UNDERLINE,\n        view: 'u',\n        upcastAlso: {\n          styles: {\n            'text-decoration': 'underline'\n          }\n        }\n      });\n\n      // Create underline command.\n      editor.commands.add(UNDERLINE, new AttributeCommand(editor, UNDERLINE));\n\n      // Set the Ctrl+U keystroke.\n      editor.keystrokes.set('CTRL+U', 'underline');\n    }\n  }], [{\n    key: \"pluginName\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return 'UnderlineEditing';\n    }\n  }]);\n}(Plugin);\nexport { UnderlineEditing as default };","import _classCallCheck from '/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js';\nimport _createClass from '/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js';\nimport _callSuper from '/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js';\nimport _inherits from '/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js';\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module basic-styles/underline/underlineui\n */\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview';\nimport underlineIcon from '../../theme/icons/underline.svg';\nvar UNDERLINE = 'underline';\n/**\n * The underline UI feature. It introduces the Underline button.\n *\n * @extends module:core/plugin~Plugin\n */\nvar UnderlineUI = /*#__PURE__*/\nfunction (_Plugin) {\n    function UnderlineUI() {\n        _classCallCheck(this, UnderlineUI);\n        return _callSuper(this, UnderlineUI, arguments);\n    }\n    _inherits(UnderlineUI, _Plugin);\n    return _createClass(UnderlineUI, [{\n            key: 'init',\n            value: /**\n     * @inheritDoc\n     */\n            function init() {\n                var _this = this;\n                var editor = this.editor;\n                var t = editor.t;\n                // Add bold button to feature components.\n                editor.ui.componentFactory.add(UNDERLINE, function (locale) {\n                    var command = editor.commands.get(UNDERLINE);\n                    var view = new ButtonView(locale);\n                    view.set({\n                        label: t('Underline'),\n                        icon: underlineIcon,\n                        keystroke: 'CTRL+U',\n                        tooltip: true,\n                        isToggleable: true\n                    });\n                    view.bind('isOn', 'isEnabled').to(command, 'value', 'isEnabled');\n                    // Execute command.\n                    _this.listenTo(view, 'execute', function () {\n                        return editor.execute(UNDERLINE);\n                    });\n                    return view;\n                });\n            }\n        }]);\n}(Plugin);\nexport {\n    UnderlineUI as default\n};","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M10.187 17H5.773c-.637 0-1.092-.138-1.364-.415-.273-.277-.409-.718-.409-1.323V4.738c0-.617.14-1.062.419-1.332.279-.27.73-.406 1.354-.406h4.68c.69 0 1.288.041 1.793.124.506.083.96.242 1.36.478.341.197.644.447.906.75a3.262 3.262 0 0 1 .808 2.162c0 1.401-.722 2.426-2.167 3.075C15.05 10.175 16 11.315 16 13.01a3.756 3.756 0 0 1-2.296 3.504 6.1 6.1 0 0 1-1.517.377c-.571.073-1.238.11-2 .11zm-.217-6.217H7v4.087h3.069c1.977 0 2.965-.69 2.965-2.072 0-.707-.256-1.22-.768-1.537-.512-.319-1.277-.478-2.296-.478zM7 5.13v3.619h2.606c.729 0 1.292-.067 1.69-.2a1.6 1.6 0 0 0 .91-.765c.165-.267.247-.566.247-.897 0-.707-.26-1.176-.778-1.409-.519-.232-1.31-.348-2.375-.348H7z\\\"/></svg>\"","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M9.586 14.633l.021.004c-.036.335.095.655.393.962.082.083.173.15.274.201h1.474a.6.6 0 1 1 0 1.2H5.304a.6.6 0 0 1 0-1.2h1.15c.474-.07.809-.182 1.005-.334.157-.122.291-.32.404-.597l2.416-9.55a1.053 1.053 0 0 0-.281-.823 1.12 1.12 0 0 0-.442-.296H8.15a.6.6 0 0 1 0-1.2h6.443a.6.6 0 1 1 0 1.2h-1.195c-.376.056-.65.155-.823.296-.215.175-.423.439-.623.79l-2.366 9.347z\\\"/></svg>\"","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M3 18v-1.5h14V18zM5.2 10V3.6c0-.4.4-.6.8-.6.3 0 .7.2.7.6v6.2c0 2 1.3 2.8 3.2 2.8 1.9 0 3.4-.9 3.4-2.9V3.6c0-.3.4-.5.8-.5.3 0 .7.2.7.5V10c0 2.7-2.2 4-4.9 4-2.6 0-4.7-1.2-4.7-4z\\\"/></svg>\"","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.function.name.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module clipboard/clipboard\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport ClipboardObserver from './clipboardobserver';\nimport plainTextToHtml from './utils/plaintexttohtml';\nimport normalizeClipboardHtml from './utils/normalizeclipboarddata';\nimport viewToPlainText from './utils/viewtoplaintext.js';\nimport HtmlDataProcessor from '@ckeditor/ckeditor5-engine/src/dataprocessor/htmldataprocessor';\n\n/**\n * The clipboard feature. It is responsible for intercepting the `paste` and `drop` events and\n * passing the pasted content through the clipboard pipeline in order to insert it into the editor's content.\n * It also handles the `cut` and `copy` events to fill the native clipboard with serialized editor's data.\n *\n * Read more about the clipboard integration in {@glink framework/guides/deep-dive/clipboard \"Clipboard\" deep dive} guide.\n *\n * @extends module:core/plugin~Plugin\n */\nvar Clipboard = /*#__PURE__*/function (_Plugin) {\n  function Clipboard() {\n    _classCallCheck(this, Clipboard);\n    return _callSuper(this, Clipboard, arguments);\n  }\n  _inherits(Clipboard, _Plugin);\n  return _createClass(Clipboard, [{\n    key: \"init\",\n    value:\n    /**\n     * @inheritDoc\n     */\n    function init() {\n      var _this = this;\n      var editor = this.editor;\n      var modelDocument = editor.model.document;\n      var view = editor.editing.view;\n      var viewDocument = view.document;\n\n      /**\n       * Data processor used to convert pasted HTML to a view structure.\n       *\n       * @private\n       * @member {module:engine/dataprocessor/htmldataprocessor~HtmlDataProcessor} #_htmlDataProcessor\n       */\n      this._htmlDataProcessor = new HtmlDataProcessor();\n      view.addObserver(ClipboardObserver);\n\n      // The clipboard paste pipeline.\n\n      // Pasting and dropping is disabled when editor is read-only.\n      // See: https://github.com/ckeditor/ckeditor5-clipboard/issues/26.\n      this.listenTo(viewDocument, 'clipboardInput', function (evt) {\n        if (editor.isReadOnly) {\n          evt.stop();\n        }\n      }, {\n        priority: 'highest'\n      });\n      this.listenTo(viewDocument, 'clipboardInput', function (evt, data) {\n        var dataTransfer = data.dataTransfer;\n        var content = '';\n        if (dataTransfer.getData('text/html')) {\n          content = normalizeClipboardHtml(dataTransfer.getData('text/html'));\n        } else if (dataTransfer.getData('text/plain')) {\n          content = plainTextToHtml(dataTransfer.getData('text/plain'));\n        }\n        content = _this._htmlDataProcessor.toView(content);\n        _this.fire('inputTransformation', {\n          content: content,\n          dataTransfer: dataTransfer\n        });\n        view.scrollToTheSelection();\n      }, {\n        priority: 'low'\n      });\n      this.listenTo(this, 'inputTransformation', function (evt, data) {\n        if (!data.content.isEmpty) {\n          var dataController = _this.editor.data;\n          var model = _this.editor.model;\n\n          // Convert the pasted content to a model document fragment.\n          // Conversion is contextual, but in this case we need an \"all allowed\" context and for that\n          // we use the $clipboardHolder item.\n          var modelFragment = dataController.toModel(data.content, '$clipboardHolder');\n          if (modelFragment.childCount == 0) {\n            return;\n          }\n          model.insertContent(modelFragment);\n        }\n      }, {\n        priority: 'low'\n      });\n\n      // The clipboard copy/cut pipeline.\n\n      function onCopyCut(evt, data) {\n        var dataTransfer = data.dataTransfer;\n        data.preventDefault();\n        var content = editor.data.toView(editor.model.getSelectedContent(modelDocument.selection));\n        viewDocument.fire('clipboardOutput', {\n          dataTransfer: dataTransfer,\n          content: content,\n          method: evt.name\n        });\n      }\n      this.listenTo(viewDocument, 'copy', onCopyCut, {\n        priority: 'low'\n      });\n      this.listenTo(viewDocument, 'cut', function (evt, data) {\n        // Cutting is disabled when editor is read-only.\n        // See: https://github.com/ckeditor/ckeditor5-clipboard/issues/26.\n        if (editor.isReadOnly) {\n          data.preventDefault();\n        } else {\n          onCopyCut(evt, data);\n        }\n      }, {\n        priority: 'low'\n      });\n      this.listenTo(viewDocument, 'clipboardOutput', function (evt, data) {\n        if (!data.content.isEmpty) {\n          data.dataTransfer.setData('text/html', _this._htmlDataProcessor.toData(data.content));\n          data.dataTransfer.setData('text/plain', viewToPlainText(data.content));\n        }\n        if (data.method == 'cut') {\n          editor.model.deleteContent(modelDocument.selection);\n        }\n      }, {\n        priority: 'low'\n      });\n    }\n  }], [{\n    key: \"pluginName\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return 'Clipboard';\n    }\n  }]);\n}(Plugin);\n/**\n * Fired with a `content` and `dataTransfer` objects. The `content` which comes from the clipboard (was pasted or dropped)\n * should be processed in order to be inserted into the editor. The `dataTransfer` object is available\n * in case the transformation functions needs access to a raw clipboard data.\n *\n * It is a part of the {@glink framework/guides/deep-dive/clipboard#input-pipeline \"clipboard input pipeline\"}.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n * @see module:clipboard/clipboard~Clipboard\n * @event module:clipboard/clipboard~Clipboard#event:inputTransformation\n * @param {Object} data Event data.\n * @param {module:engine/view/documentfragment~DocumentFragment} data.content Event data. Content to be inserted into the editor.\n * It can be modified by the event listeners. Read more about the clipboard pipelines in\n * {@glink framework/guides/deep-dive/clipboard \"Clipboard\" deep dive}.\n * @param {module:clipboard/datatransfer~DataTransfer} data.dataTransfer Data transfer instance.\n */\n/**\n * Fired on {@link module:engine/view/document~Document#event:copy} and {@link module:engine/view/document~Document#event:cut}\n * with a copy of selected content. The content can be processed before it ends up in the clipboard.\n *\n * It is a part of the {@glink framework/guides/deep-dive/clipboard#output-pipeline \"clipboard output pipeline\"}.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n * @see module:clipboard/clipboard~Clipboard\n * @event module:engine/view/document~Document#event:clipboardOutput\n * @param {module:clipboard/clipboard~ClipboardOutputEventData} data Event data.\n */\n/**\n * The value of the {@link module:engine/view/document~Document#event:clipboardOutput} event.\n *\n * @class module:clipboard/clipboard~ClipboardOutputEventData\n */\n/**\n * Data transfer instance.\n *\n * @readonly\n * @member {module:clipboard/datatransfer~DataTransfer} module:clipboard/clipboard~ClipboardOutputEventData#dataTransfer\n */\n/**\n * Content to be put into the clipboard. It can be modified by the event listeners.\n * Read more about the clipboard pipelines in {@glink framework/guides/deep-dive/clipboard \"Clipboard\" deep dive}.\n *\n * @member {module:engine/view/documentfragment~DocumentFragment} module:clipboard/clipboard~ClipboardOutputEventData#content\n */\n/**\n * Whether the event was triggered by copy or cut operation.\n *\n * @member {'copy'|'cut'} module:clipboard/clipboard~ClipboardOutputEventData#method\n */\nexport { Clipboard as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.string.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module clipboard/clipboardobserver\n */\n\nimport DomEventObserver from '@ckeditor/ckeditor5-engine/src/view/observer/domeventobserver';\nimport EventInfo from '@ckeditor/ckeditor5-utils/src/eventinfo';\nimport DataTransfer from './datatransfer';\n\n/**\n * Clipboard events observer.\n *\n * Fires the following events:\n *\n * * {@link module:engine/view/document~Document#event:clipboardInput}\n * * {@link module:engine/view/document~Document#event:dragover}\n * * {@link module:engine/view/document~Document#event:drop}\n * * {@link module:engine/view/document~Document#event:paste}\n * * {@link module:engine/view/document~Document#event:copy}\n * * {@link module:engine/view/document~Document#event:cut}\n *\n * Note that this observer is not available by default (it is not added by the engine).\n * To make it available it needs to be added to {@link module:engine/view/document~Document} by\n * the {@link module:engine/view/view~View#addObserver `View#addObserver()`} method. You can also load the\n * {@link module:clipboard/clipboard~Clipboard} plugin which adds this observer automatically (because it uses it).\n *\n * @extends module:engine/view/observer/domeventobserver~DomEventObserver\n */\nvar ClipboardObserver = /*#__PURE__*/function (_DomEventObserver) {\n  function ClipboardObserver(view) {\n    var _this;\n    _classCallCheck(this, ClipboardObserver);\n    _this = _callSuper(this, ClipboardObserver, [view]);\n    var viewDocument = _this.document;\n    _this.domEventType = ['paste', 'copy', 'cut', 'drop', 'dragover'];\n    _this.listenTo(viewDocument, 'paste', handleInput, {\n      priority: 'low'\n    });\n    _this.listenTo(viewDocument, 'drop', handleInput, {\n      priority: 'low'\n    });\n    function handleInput(evt, data) {\n      data.preventDefault();\n      var targetRanges = data.dropRange ? [data.dropRange] : Array.from(viewDocument.selection.getRanges());\n      var eventInfo = new EventInfo(viewDocument, 'clipboardInput');\n      viewDocument.fire(eventInfo, {\n        dataTransfer: data.dataTransfer,\n        targetRanges: targetRanges\n      });\n\n      // If CKEditor handled the input, do not bubble the original event any further.\n      // This helps external integrations recognize that fact and act accordingly.\n      // https://github.com/ckeditor/ckeditor5-upload/issues/92\n      if (eventInfo.stop.called) {\n        data.stopPropagation();\n      }\n    }\n    return _this;\n  }\n  _inherits(ClipboardObserver, _DomEventObserver);\n  return _createClass(ClipboardObserver, [{\n    key: \"onDomEvent\",\n    value: function onDomEvent(domEvent) {\n      var evtData = {\n        dataTransfer: new DataTransfer(domEvent.clipboardData ? domEvent.clipboardData : domEvent.dataTransfer)\n      };\n      if (domEvent.type == 'drop') {\n        evtData.dropRange = getDropViewRange(this.view, domEvent);\n      }\n      this.fire(domEvent.type, domEvent, evtData);\n    }\n  }]);\n}(DomEventObserver);\nexport { ClipboardObserver as default };\nfunction getDropViewRange(view, domEvent) {\n  var domDoc = domEvent.target.ownerDocument;\n  var x = domEvent.clientX;\n  var y = domEvent.clientY;\n  var domRange;\n\n  // Webkit & Blink.\n  if (domDoc.caretRangeFromPoint && domDoc.caretRangeFromPoint(x, y)) {\n    domRange = domDoc.caretRangeFromPoint(x, y);\n  }\n  // FF.\n  else if (domEvent.rangeParent) {\n    domRange = domDoc.createRange();\n    domRange.setStart(domEvent.rangeParent, domEvent.rangeOffset);\n    domRange.collapse(true);\n  }\n  if (domRange) {\n    return view.domConverter.domRangeToView(domRange);\n  } else {\n    return view.document.selection.getFirstRange();\n  }\n}\n\n/**\n * Fired as a continuation of {@link #event:paste} and {@link #event:drop} events.\n *\n * It is a part of the {@glink framework/guides/deep-dive/clipboard#input-pipeline \"clipboard input pipeline\"}.\n *\n * Fired with a `dataTransfer` which comes from the clipboard and which content should be processed\n * and inserted into the editor.\n *\n * Note that this event is not available by default. To make it available {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to {@link module:engine/view/document~Document} by the {@link module:engine/view/view~View#addObserver} method.\n * It's done by the {@link module:clipboard/clipboard~Clipboard} feature. If it's not loaded, it must be done manually.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n * @see module:clipboard/clipboard~Clipboard\n * @event module:engine/view/document~Document#event:clipboardInput\n * @param {Object} data Event data.\n * @param {module:clipboard/datatransfer~DataTransfer} data.dataTransfer Data transfer instance.\n * @param {Array.<module:engine/view/range~Range>} data.targetRanges Ranges which are the target of the operation\n * (usually – into which the content should be inserted).\n * If clipboard input was triggered by a paste operation, then these are the selection ranges. If by a drop operation,\n * then it's the drop position (which can be different than the selection at the moment of drop).\n */\n\n/**\n * Fired when user drags content over one of the editables.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * Note that this event is not available by default. To make it available {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to {@link module:engine/view/document~Document} by the {@link module:engine/view/view~View#addObserver} method.\n * It's done by the {@link module:clipboard/clipboard~Clipboard} feature. If it's not loaded, it must be done manually.\n *\n * @see module:engine/view/document~Document#event:clipboardInput\n * @event module:engine/view/document~Document#event:dragover\n * @param {module:clipboard/clipboardobserver~ClipboardEventData} data Event data.\n */\n\n/**\n * Fired when user dropped content into one of the editables.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * Note that this event is not available by default. To make it available {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to {@link module:engine/view/document~Document} by the {@link module:engine/view/view~View#addObserver} method.\n * It's done by the {@link module:clipboard/clipboard~Clipboard} feature. If it's not loaded, it must be done manually.\n *\n * @see module:engine/view/document~Document#event:clipboardInput\n * @event module:engine/view/document~Document#event:drop\n * @param {module:clipboard/clipboardobserver~ClipboardEventData} data Event data.\n * @param {module:engine/view/range~Range} dropRange The position into which the content is dropped.\n */\n\n/**\n * Fired when user pasted content into one of the editables.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * Note that this event is not available by default. To make it available {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to {@link module:engine/view/document~Document} by the {@link module:engine/view/view~View#addObserver} method.\n * It's done by the {@link module:clipboard/clipboard~Clipboard} feature. If it's not loaded, it must be done manually.\n *\n * @see module:engine/view/document~Document#event:clipboardInput\n * @event module:engine/view/document~Document#event:paste\n * @param {module:clipboard/clipboardobserver~ClipboardEventData} data Event data.\n */\n\n/**\n * Fired when user copied content from one of the editables.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * Note that this event is not available by default. To make it available {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to {@link module:engine/view/document~Document} by the {@link module:engine/view/view~View#addObserver} method.\n * It's done by the {@link module:clipboard/clipboard~Clipboard} feature. If it's not loaded, it must be done manually.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n * @event module:engine/view/document~Document#event:copy\n * @param {module:clipboard/clipboardobserver~ClipboardEventData} data Event data.\n */\n\n/**\n * Fired when user cut content from one of the editables.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * Note that this event is not available by default. To make it available {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to {@link module:engine/view/document~Document} by the {@link module:engine/view/view~View#addObserver} method.\n * It's done by the {@link module:clipboard/clipboard~Clipboard} feature. If it's not loaded, it must be done manually.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n * @event module:engine/view/document~Document#event:cut\n * @param {module:clipboard/clipboardobserver~ClipboardEventData} data Event data.\n */\n\n/**\n * The value of the {@link module:engine/view/document~Document#event:paste},\n * {@link module:engine/view/document~Document#event:copy} and {@link module:engine/view/document~Document#event:cut} events.\n *\n * In order to access clipboard data use `dataTransfer` property.\n *\n * @class module:clipboard/clipboardobserver~ClipboardEventData\n * @extends module:engine/view/observer/domeventdata~DomEventData\n */\n\n/**\n * Data transfer instance.\n *\n * @readonly\n * @member {module:clipboard/datatransfer~DataTransfer} module:clipboard/clipboardobserver~ClipboardEventData#dataTransfer\n */","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module clipboard/datatransfer\n */\n/**\n * Facade over the native [`DataTransfer`](https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer) object.\n */\nvar DataTransfer = /*#__PURE__*/function () {\n  function DataTransfer(nativeDataTransfer) {\n    _classCallCheck(this, DataTransfer);\n    /**\n     * The array of files created from the native `DataTransfer#files` or `DataTransfer#items`.\n     *\n     * @readonly\n     * @member {Array.<File>} #files\n     */\n    this.files = getFiles(nativeDataTransfer);\n\n    /**\n     * The native DataTransfer object.\n     *\n     * @private\n     * @member {DataTransfer} #_native\n     */\n    this._native = nativeDataTransfer;\n  }\n\n  /**\n   * Returns an array of available native content types.\n   *\n   * @returns {Array.<String>}\n   */\n  return _createClass(DataTransfer, [{\n    key: \"types\",\n    get: function get() {\n      return this._native.types;\n    }\n\n    /**\n     * Gets data from the data transfer by its mime type.\n     *\n     *\t\tdataTransfer.getData( 'text/plain' );\n     *\n     * @param {String} type The mime type. E.g. `text/html` or `text/plain`.\n     * @returns {String}\n     */\n  }, {\n    key: \"getData\",\n    value: function getData(type) {\n      return this._native.getData(type);\n    }\n\n    /**\n     * Sets data in the data transfer.\n     *\n     * @param {String} type The mime type. E.g. `text/html` or `text/plain`.\n     * @param {String} data\n     */\n  }, {\n    key: \"setData\",\n    value: function setData(type, data) {\n      this._native.setData(type, data);\n    }\n  }]);\n}();\nexport { DataTransfer as default };\nfunction getFiles(nativeDataTransfer) {\n  // DataTransfer.files and items are Array-like and might not have an iterable interface.\n  var files = nativeDataTransfer.files ? Array.from(nativeDataTransfer.files) : [];\n  var items = nativeDataTransfer.items ? Array.from(nativeDataTransfer.items) : [];\n  if (files.length) {\n    return files;\n  }\n  // Chrome have empty DataTransfer.files, but let get files through the items interface.\n  return items.filter(function (item) {\n    return item.kind === 'file';\n  }).map(function (item) {\n    return item.getAsFile();\n  });\n}","import \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module clipboard/utils/normalizeclipboarddata\n */\n\n/**\n * Removes some popular browser quirks out of the clipboard data (HTML).\n *\n * @param {String} data The HTML data to normalize.\n * @returns {String} Normalized HTML.\n */\nexport default function normalizeClipboardData(data) {\n  return data.replace(/<span(?: class=\"Apple-converted-space\"|)>(\\s+)<\\/span>/g, function (fullMatch, spaces) {\n    // Handle the most popular and problematic case when even a single space becomes an nbsp;.\n    // Decode those to normal spaces. Read more in https://github.com/ckeditor/ckeditor5-clipboard/issues/2.\n    if (spaces.length == 1) {\n      return ' ';\n    }\n    return spaces;\n  });\n}","import \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module clipboard/utils/plaintexttohtml\n */\n\n/**\n * Converts plain text to its HTML-ized version.\n *\n * @param {String} text The plain text to convert.\n * @returns {String} HTML generated from the plain text.\n */\nexport default function plainTextToHtml(text) {\n  text = text\n  // Encode <>.\n  .replace(/</g, '&lt;').replace(/>/g, '&gt;')\n  // Creates paragraphs for every line breaks.\n  .replace(/\\n/g, '</p><p>')\n  // Preserve trailing spaces (only the first and last one – the rest is handled below).\n  .replace(/^\\s/, '&nbsp;').replace(/\\s$/, '&nbsp;')\n  // Preserve other subsequent spaces now.\n  .replace(/\\s\\s/g, ' &nbsp;');\n  if (text.indexOf('</p><p>') > -1) {\n    // If we created paragraphs above, add the trailing ones.\n    text = \"<p>\".concat(text, \"</p>\");\n  }\n\n  // TODO:\n  // * What about '\\nfoo' vs ' foo'?\n\n  return text;\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.function.name.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module clipboard/utils/viewtoplaintext\n */\n\n// Elements which should not have empty-line padding.\n// Most `view.ContainerElement` want to be separate by new-line, but some are creating one structure\n// together (like `<li>`) so it is better to separate them by only one \"\\n\".\nvar smallPaddingElements = ['figcaption', 'li'];\n\n/**\n * Converts {@link module:engine/view/item~Item view item} and all of its children to plain text.\n *\n * @param {module:engine/view/item~Item} viewItem View item to convert.\n * @returns {String} Plain text representation of `viewItem`.\n */\nexport default function viewToPlainText(viewItem) {\n  var text = '';\n  if (viewItem.is('text') || viewItem.is('textProxy')) {\n    // If item is `Text` or `TextProxy` simple take its text data.\n    text = viewItem.data;\n  } else if (viewItem.is('img') && viewItem.hasAttribute('alt')) {\n    // Special case for images - use alt attribute if it is provided.\n    text = viewItem.getAttribute('alt');\n  } else {\n    // Other elements are document fragments, attribute elements or container elements.\n    // They don't have their own text value, so convert their children.\n    var prev = null;\n    var _iterator = _createForOfIteratorHelper(viewItem.getChildren()),\n      _step;\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var child = _step.value;\n        var childText = viewToPlainText(child);\n\n        // Separate container element children with one or more new-line characters.\n        if (prev && (prev.is('containerElement') || child.is('containerElement'))) {\n          if (smallPaddingElements.includes(prev.name) || smallPaddingElements.includes(child.name)) {\n            text += '\\n';\n          } else {\n            text += '\\n\\n';\n          }\n        }\n        text += childText;\n        prev = child;\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n  }\n  return text;\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module core/command\n */\n\nimport ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\n\n/**\n * The base class for CKEditor commands.\n *\n * Commands are the main way to manipulate editor contents and state. They are mostly used by UI elements (or by other\n * commands) to make changes in the model. Commands are available in every part of code that has access to\n * the {@link module:core/editor/editor~Editor editor} instance.\n *\n * Instances of registered commands can be retrieved from {@link module:core/editor/editor~Editor#commands `editor.commands`}.\n * The easiest way to execute a command is through {@link module:core/editor/editor~Editor#execute `editor.execute()`}.\n *\n * By default commands are disabled when the editor is in {@link module:core/editor/editor~Editor#isReadOnly read-only} mode.\n *\n * @mixes module:utils/observablemixin~ObservableMixin\n */\nvar Command = /*#__PURE__*/function () {\n  /**\n   * Creates a new `Command` instance.\n   *\n   * @param {module:core/editor/editor~Editor} editor Editor on which this command will be used.\n   */\n  function Command(editor) {\n    var _this = this;\n    _classCallCheck(this, Command);\n    /**\n     * The editor on which this command will be used.\n     *\n     * @readonly\n     * @member {module:core/editor/editor~Editor}\n     */\n    this.editor = editor;\n\n    /**\n     * The value of the command. A concrete command class should define what it represents for it.\n     *\n     * For example, the `'bold'` command's value indicates whether the selection starts in a bolded text.\n     * And the value of the `'link'` command may be an object with links details.\n     *\n     * It is possible for a command to have no value (e.g. for stateless actions such as `'imageUpload'`).\n     *\n     * A concrete command class should control this value by overriding the {@link #refresh `refresh()`} method.\n     *\n     * @observable\n     * @readonly\n     * @member #value\n     */\n    this.set('value', undefined);\n\n    /**\n     * Flag indicating whether a command is enabled or disabled.\n     * A disabled command will do nothing when executed.\n     *\n     * A concrete command class should control this value by overriding the {@link #refresh `refresh()`} method.\n     *\n     * It is possible to disable a command from \"outside\". For instance, in your integration you may want to disable\n     * a certain set of commands for the time being. To do that, you can use the fact that `isEnabled` is observable\n     * and it fires the `set:isEnabled` event every time anyone tries to modify its value:\n     *\n     *\t\tfunction disableCommand( cmd ) {\n     *\t\t\tcmd.on( 'set:isEnabled', forceDisable, { priority: 'highest' } );\n     *\n     *\t\t\tcmd.isEnabled = false;\n     *\n     *\t\t\t// Make it possible to enable the command again.\n     *\t\t\treturn () => {\n     *\t\t\t\tcmd.off( 'set:isEnabled', forceDisable );\n     *\t\t\t\tcmd.refresh();\n     *\t\t\t};\n     *\n     *\t\t\tfunction forceDisable( evt ) {\n     *\t\t\t\tevt.return = false;\n     *\t\t\t\tevt.stop();\n     *\t\t\t}\n     *\t\t}\n     *\n     *\t\t// Usage:\n     *\n     *\t\t// Disabling the command.\n     *\t\tconst enableBold = disableCommand( editor.commands.get( 'bold' ) );\n     *\n     *\t\t// Enabling the command again.\n     *\t\tenableBold();\n     *\n     * @observable\n     * @readonly\n     * @member {Boolean} #isEnabled\n     */\n    this.set('isEnabled', false);\n\n    /**\n     * Holds identifiers for {@link #forceDisabled} mechanism.\n     *\n     * @type {Set.<String>}\n     * @private\n     */\n    this._disableStack = new Set();\n    this.decorate('execute');\n\n    // By default every command is refreshed when changes are applied to the model.\n    this.listenTo(this.editor.model.document, 'change', function () {\n      _this.refresh();\n    });\n    this.on('execute', function (evt) {\n      if (!_this.isEnabled) {\n        evt.stop();\n      }\n    }, {\n      priority: 'high'\n    });\n\n    // By default commands are disabled when the editor is in read-only mode.\n    this.listenTo(editor, 'change:isReadOnly', function (evt, name, value) {\n      if (value) {\n        _this.forceDisabled('readOnlyMode');\n      } else {\n        _this.clearForceDisabled('readOnlyMode');\n      }\n    });\n  }\n\n  /**\n   * Refreshes the command. The command should update its {@link #isEnabled} and {@link #value} properties\n   * in this method.\n   *\n   * This method is automatically called when\n   * {@link module:engine/model/document~Document#event:change any changes are applied to the document}.\n   */\n  return _createClass(Command, [{\n    key: \"refresh\",\n    value: function refresh() {\n      this.isEnabled = true;\n    }\n\n    /**\n     * Disables the command.\n     *\n     * Command may be disabled by multiple features or algorithms (at once). When disabling a command, unique id should be passed\n     * (e.g. feature name). The same identifier should be used when {@link #clearForceDisabled enabling back} the command.\n     * The command becomes enabled only after all features {@link #clearForceDisabled enabled it back}.\n     *\n     * Disabling and enabling a command:\n     *\n     *\t\tcommand.isEnabled; // -> true\n     *\t\tcommand.forceDisabled( 'MyFeature' );\n     *\t\tcommand.isEnabled; // -> false\n     *\t\tcommand.clearForceDisabled( 'MyFeature' );\n     *\t\tcommand.isEnabled; // -> true\n     *\n     * Command disabled by multiple features:\n     *\n     *\t\tcommand.forceDisabled( 'MyFeature' );\n     *\t\tcommand.forceDisabled( 'OtherFeature' );\n     *\t\tcommand.clearForceDisabled( 'MyFeature' );\n     *\t\tcommand.isEnabled; // -> false\n     *\t\tcommand.clearForceDisabled( 'OtherFeature' );\n     *\t\tcommand.isEnabled; // -> true\n     *\n     * Multiple disabling with the same identifier is redundant:\n     *\n     *\t\tcommand.forceDisabled( 'MyFeature' );\n     *\t\tcommand.forceDisabled( 'MyFeature' );\n     *\t\tcommand.clearForceDisabled( 'MyFeature' );\n     *\t\tcommand.isEnabled; // -> true\n     *\n     * **Note:** some commands or algorithms may have more complex logic when it comes to enabling or disabling certain commands,\n     * so the command might be still disabled after {@link #clearForceDisabled} was used.\n     *\n     * @param {String} id Unique identifier for disabling. Use the same id when {@link #clearForceDisabled enabling back} the command.\n     */\n  }, {\n    key: \"forceDisabled\",\n    value: function forceDisabled(id) {\n      this._disableStack.add(id);\n      if (this._disableStack.size == 1) {\n        this.on('set:isEnabled', forceDisable, {\n          priority: 'highest'\n        });\n        this.isEnabled = false;\n      }\n    }\n\n    /**\n     * Clears forced disable previously set through {@link #clearForceDisabled}. See {@link #clearForceDisabled}.\n     *\n     * @param {String} id Unique identifier, equal to the one passed in {@link #forceDisabled} call.\n     */\n  }, {\n    key: \"clearForceDisabled\",\n    value: function clearForceDisabled(id) {\n      this._disableStack.delete(id);\n      if (this._disableStack.size == 0) {\n        this.off('set:isEnabled', forceDisable);\n        this.refresh();\n      }\n    }\n\n    /**\n     * Executes the command.\n     *\n     * A command may accept parameters. They will be passed from {@link module:core/editor/editor~Editor#execute `editor.execute()`}\n     * to the command.\n     *\n     * The `execute()` method will automatically abort when the command is disabled ({@link #isEnabled} is `false`).\n     * This behavior is implemented by a high priority listener to the {@link #event:execute} event.\n     *\n     * In order to see how to disable a command from \"outside\" see the {@link #isEnabled} documentation.\n     *\n     * @fires execute\n     */\n  }, {\n    key: \"execute\",\n    value: function execute() {}\n\n    /**\n     * Destroys the command.\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.stopListening();\n    }\n\n    /**\n     * Event fired by the {@link #execute} method. The command action is a listener to this event so it's\n     * possible to change/cancel the behavior of the command by listening to this event.\n     *\n     * See {@link module:utils/observablemixin~ObservableMixin#decorate} for more information and samples.\n     *\n     * **Note:** This event is fired even if command is disabled. However, it is automatically blocked\n     * by a high priority listener in order to prevent command execution.\n     *\n     * @event execute\n     */\n  }]);\n}();\nexport { Command as default };\nmix(Command, ObservableMixin);\n\n// Helper function that forces command to be disabled.\nfunction forceDisable(evt) {\n  evt.return = false;\n  evt.stop();\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _regeneratorValues from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regeneratorValues.js\";\nimport _regenerator from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regenerator.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module core/commandcollection\n */\n\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * Collection of commands. Its instance is available in {@link module:core/editor/editor~Editor#commands `editor.commands`}.\n */\nvar CommandCollection = /*#__PURE__*/function () {\n  /**\n   * Creates collection instance.\n   */\n  function CommandCollection() {\n    _classCallCheck(this, CommandCollection);\n    /**\n     * Command map.\n     *\n     * @private\n     * @member {Map}\n     */\n    this._commands = new Map();\n  }\n\n  /**\n   * Registers a new command.\n   *\n   * @param {String} commandName The name of the command.\n   * @param {module:core/command~Command} command\n   */\n  return _createClass(CommandCollection, [{\n    key: \"add\",\n    value: function add(commandName, command) {\n      this._commands.set(commandName, command);\n    }\n\n    /**\n     * Retrieves a command from the collection.\n     *\n     * @param {String} commandName The name of the command.\n     * @returns {module:core/command~Command}\n     */\n  }, {\n    key: \"get\",\n    value: function get(commandName) {\n      return this._commands.get(commandName);\n    }\n\n    /**\n     * Executes a command.\n     *\n     * @param {String} commandName The name of the command.\n     * @param {*} [...commandParams] Command parameters.\n     */\n  }, {\n    key: \"execute\",\n    value: function execute(commandName) {\n      var command = this.get(commandName);\n      if (!command) {\n        /**\n         * Command does not exist.\n         *\n         * @error commandcollection-command-not-found\n         * @param {String} commandName Name of the command.\n         */\n        throw new CKEditorError('commandcollection-command-not-found: Command does not exist.', this, {\n          commandName: commandName\n        });\n      }\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n      command.execute.apply(command, args);\n    }\n\n    /**\n     * Returns iterator of command names.\n     *\n     * @returns {Iterable.<String>}\n     */\n  }, {\n    key: \"names\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function names() {\n      return _regenerator().w(function (_context) {\n        while (1) switch (_context.n) {\n          case 0:\n            return _context.d(_regeneratorValues(this._commands.keys()), 1);\n          case 1:\n            return _context.a(2);\n        }\n      }, names, this);\n    })\n    /**\n     * Returns iterator of command instances.\n     *\n     * @returns {Iterable.<module:core/command~Command>}\n     */\n  }, {\n    key: \"commands\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function commands() {\n      return _regenerator().w(function (_context2) {\n        while (1) switch (_context2.n) {\n          case 0:\n            return _context2.d(_regeneratorValues(this._commands.values()), 1);\n          case 1:\n            return _context2.a(2);\n        }\n      }, commands, this);\n    })\n    /**\n     * Iterable interface.\n     *\n     * Returns `[ commandName, commandInstance ]` pairs.\n     *\n     * @returns {Iterable.<Array>}\n     */\n  }, {\n    key: Symbol.iterator,\n    value: function value() {\n      return this._commands[Symbol.iterator]();\n    }\n\n    /**\n     * Destroys all collection commands.\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _iterator = _createForOfIteratorHelper(this.commands()),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var command = _step.value;\n          command.destroy();\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n  }]);\n}();\nexport { CommandCollection as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module core/editingkeystrokehandler\n */\n\nimport KeystrokeHandler from '@ckeditor/ckeditor5-utils/src/keystrokehandler';\n\n/**\n * A keystroke handler for editor editing. Its instance is available\n * in {@link module:core/editor/editor~Editor#keystrokes} so plugins\n * can register their keystrokes.\n *\n * E.g. an undo plugin would do this:\n *\n *\t\teditor.keystrokes.set( 'Ctrl+Z', 'undo' );\n *\t\teditor.keystrokes.set( 'Ctrl+Shift+Z', 'redo' );\n *\t\teditor.keystrokes.set( 'Ctrl+Y', 'redo' );\n *\n * @extends module:utils/keystrokehandler~KeystrokeHandler\n */\nvar EditingKeystrokeHandler = /*#__PURE__*/function (_KeystrokeHandler) {\n  /**\n   * Creates an instance of the keystroke handler.\n   *\n   * @param {module:core/editor/editor~Editor} editor\n   */\n  function EditingKeystrokeHandler(editor) {\n    var _this;\n    _classCallCheck(this, EditingKeystrokeHandler);\n    _this = _callSuper(this, EditingKeystrokeHandler);\n\n    /**\n     * The editor instance.\n     *\n     * @readonly\n     * @member {module:core/editor/editor~Editor}\n     */\n    _this.editor = editor;\n    return _this;\n  }\n\n  /**\n   * Registers a handler for the specified keystroke.\n   *\n   * The handler can be specified as a command name or a callback.\n   *\n   * @param {String|Array.<String|Number>} keystroke Keystroke defined in a format accepted by\n   * the {@link module:utils/keyboard~parseKeystroke} function.\n   * @param {Function|String} callback If a string is passed, then the keystroke will\n   * {@link module:core/editor/editor~Editor#execute execute a command}.\n   * If a function, then it will be called with the\n   * {@link module:engine/view/observer/keyobserver~KeyEventData key event data} object and\n   * a `cancel()` helper to both `preventDefault()` and `stopPropagation()` of the event.\n   * @param {Object} [options={}] Additional options.\n   * @param {module:utils/priorities~PriorityString|Number} [options.priority='normal'] The priority of the keystroke\n   * callback. The higher the priority value the sooner the callback will be executed. Keystrokes having the same priority\n   * are called in the order they were added.\n   */\n  _inherits(EditingKeystrokeHandler, _KeystrokeHandler);\n  return _createClass(EditingKeystrokeHandler, [{\n    key: \"set\",\n    value: function set(keystroke, callback) {\n      var _this2 = this;\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      if (typeof callback == 'string') {\n        var commandName = callback;\n        callback = function callback(evtData, cancel) {\n          _this2.editor.execute(commandName);\n          cancel();\n        };\n      }\n      _superPropGet(EditingKeystrokeHandler, \"set\", this, 3)([keystroke, callback, options]);\n    }\n  }]);\n}(KeystrokeHandler);\nexport { EditingKeystrokeHandler as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.object.to-string.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module core/editor/editor\n */\n\nimport Config from '@ckeditor/ckeditor5-utils/src/config';\nimport EditingController from '@ckeditor/ckeditor5-engine/src/controller/editingcontroller';\nimport PluginCollection from '../plugincollection';\nimport CommandCollection from '../commandcollection';\nimport Locale from '@ckeditor/ckeditor5-utils/src/locale';\nimport DataController from '@ckeditor/ckeditor5-engine/src/controller/datacontroller';\nimport Conversion from '@ckeditor/ckeditor5-engine/src/conversion/conversion';\nimport Model from '@ckeditor/ckeditor5-engine/src/model/model';\nimport EditingKeystrokeHandler from '../editingkeystrokehandler';\nimport ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * Class representing a basic, generic editor.\n *\n * Check out the list of its subclasses to learn about specific editor implementations.\n *\n * All editor implementations (like {@link module:editor-classic/classiceditor~ClassicEditor} or\n * {@link module:editor-inline/inlineeditor~InlineEditor}) should extend this class. They can add their\n * own methods and properties.\n *\n * When you are implementing a plugin, then this editor represents the API\n * which your plugin can expect to get when using its {@link module:core/plugin~Plugin#editor} property.\n *\n * This API should be sufficient in order to implement the \"editing\" part of your feature\n * (schema definition, conversion, commands, keystrokes, etc.).\n * It does not define the editor UI, which is available only if the\n * the specific editor implements also the {@link module:core/editor/editorwithui~EditorWithUI} interface\n * (as most editor implementations do).\n *\n * @abstract\n * @mixes module:utils/observablemixin~ObservableMixin\n */\nvar Editor = /*#__PURE__*/function () {\n  /**\n   * Creates a new instance of the Editor class.\n   *\n   * Usually, not to be used directly. See the static {@link module:core/editor/editor~Editor.create `create()`} method.\n   *\n   * @param {Object} [config] The editor config.\n   */\n  function Editor(config) {\n    var _this = this;\n    _classCallCheck(this, Editor);\n    var availablePlugins = this.constructor.builtinPlugins;\n\n    /**\n     * Holds all configurations specific to this editor instance.\n     *\n     *\t\teditor.config.get( 'image.toolbar' );\n     *\t\t// -> [ 'imageStyle:full', 'imageStyle:side', '|', 'imageTextAlternative' ]\n     *\n     * @readonly\n     * @member {module:utils/config~Config}\n     */\n    this.config = new Config(config, this.constructor.defaultConfig);\n    this.config.define('plugins', availablePlugins);\n\n    /**\n     * The plugins loaded and in use by this editor instance.\n     *\n     *\t\teditor.plugins.get( 'Clipboard' ); // -> instance of the Clipboard plugin.\n     *\n     * @readonly\n     * @member {module:core/plugincollection~PluginCollection}\n     */\n    this.plugins = new PluginCollection(this, availablePlugins);\n\n    /**\n     * Commands registered to the editor.\n     *\n     * Use the shorthand {@link #execute `editor.execute()`} method to execute commands:\n     *\n     *\t\t// Execute the bold command:\n     *\t\teditor.execute( 'bold' );\n     *\n     *\t\t// Check the state of the bold command:\n     *\t\teditor.commands.get( 'bold' ).value;\n     *\n     * @readonly\n     * @member {module:core/commandcollection~CommandCollection}\n     */\n    this.commands = new CommandCollection();\n    var languageConfig = this.config.get('language') || {};\n\n    /**\n     * @readonly\n     * @member {module:utils/locale~Locale}\n     */\n    this.locale = new Locale({\n      uiLanguage: typeof languageConfig === 'string' ? languageConfig : languageConfig.ui,\n      contentLanguage: this.config.get('language.content')\n    });\n\n    /**\n     * Shorthand for {@link module:utils/locale~Locale#t}.\n     *\n     * @see module:utils/locale~Locale#t\n     * @method #t\n     */\n    this.t = this.locale.t;\n\n    /**\n     * Indicates the editor life-cycle state.\n     *\n     * The editor is in one of the following states:\n     *\n     * * `initializing` - during the editor initialization (before {@link module:core/editor/editor~Editor.create `Editor.create()`})\n     * finished its job,\n     * * `ready` - after the promise returned by the {@link module:core/editor/editor~Editor.create `Editor.create()`}\n     * method is resolved,\n     * * `destroyed` - once the {@link #destroy `editor.destroy()`} method was called.\n     *\n     * @observable\n     * @member {'initializing'|'ready'|'destroyed'} #state\n     */\n    this.set('state', 'initializing');\n    this.once('ready', function () {\n      return _this.state = 'ready';\n    }, {\n      priority: 'high'\n    });\n    this.once('destroy', function () {\n      return _this.state = 'destroyed';\n    }, {\n      priority: 'high'\n    });\n\n    /**\n     * Defines whether this editor is in read-only mode.\n     *\n     * In read-only mode the editor {@link #commands commands} are disabled so it is not possible\n     * to modify the document by using them. Also, the editable element(s) become non-editable.\n     *\n     * In order to make the editor read-only, you can set this value directly:\n     *\n     *\t\teditor.isReadOnly = true;\n     *\n     * @observable\n     * @member {Boolean} #isReadOnly\n     */\n    this.set('isReadOnly', false);\n\n    /**\n     * The editor's model.\n     *\n     * The central point of the editor's abstract data model.\n     *\n     * @readonly\n     * @member {module:engine/model/model~Model}\n     */\n    this.model = new Model();\n\n    /**\n     * The {@link module:engine/controller/datacontroller~DataController data controller}.\n     * Used e.g. for setting and retrieving editor data.\n     *\n     * @readonly\n     * @member {module:engine/controller/datacontroller~DataController}\n     */\n    this.data = new DataController(this.model);\n\n    /**\n     * The {@link module:engine/controller/editingcontroller~EditingController editing controller}.\n     * Controls user input and rendering the content for editing.\n     *\n     * @readonly\n     * @member {module:engine/controller/editingcontroller~EditingController}\n     */\n    this.editing = new EditingController(this.model);\n    this.editing.view.document.bind('isReadOnly').to(this);\n\n    /**\n     * Conversion manager through which you can register model to view and view to model converters.\n     *\n     * See {@link module:engine/conversion/conversion~Conversion}'s documentation to learn how to add converters.\n     *\n     * @readonly\n     * @member {module:engine/conversion/conversion~Conversion}\n     */\n    this.conversion = new Conversion([this.editing.downcastDispatcher, this.data.downcastDispatcher], this.data.upcastDispatcher);\n    this.conversion.addAlias('dataDowncast', this.data.downcastDispatcher);\n    this.conversion.addAlias('editingDowncast', this.editing.downcastDispatcher);\n\n    /**\n     * Instance of the {@link module:core/editingkeystrokehandler~EditingKeystrokeHandler}.\n     *\n     * It allows setting simple keystrokes:\n     *\n     *\t\t// Execute the bold command on Ctrl+E:\n     *\t\teditor.keystrokes.set( 'Ctrl+E', 'bold' );\n     *\n     *\t\t// Execute your own callback:\n     *\t\teditor.keystrokes.set( 'Ctrl+E', ( data, cancel ) => {\n     *\t\t\tconsole.log( data.keyCode );\n     *\n     *\t\t\t// Prevent default (native) action and stop the underlying keydown event\n     *\t\t\t// so no other editor feature will interfere.\n     *\t\t\tcancel();\n     *\t\t} );\n     *\n     * Note: Certain, typing oriented keystrokes (like <kbd>Backspace</kbd> or <kbd>Enter</kbd>) are handled\n     * by low level mechanism and trying to listen to them via the keystroke handler will not work reliably.\n     * To handle those specific keystrokes see the events fired by the\n     * {@link module:engine/view/document~Document editing view document} (`editor.editing.view.document`).\n     *\n     * @readonly\n     * @member {module:core/editingkeystrokehandler~EditingKeystrokeHandler}\n     */\n    this.keystrokes = new EditingKeystrokeHandler(this);\n    this.keystrokes.listenTo(this.editing.view.document);\n  }\n\n  /**\n   * Loads and initializes plugins specified in the config.\n   *\n   * @returns {Promise.<module:core/plugin~LoadedPlugins>} A promise which resolves\n   * once the initialization is completed providing an array of loaded plugins.\n   */\n  return _createClass(Editor, [{\n    key: \"initPlugins\",\n    value: function initPlugins() {\n      var config = this.config;\n      var plugins = config.get('plugins') || [];\n      var removePlugins = config.get('removePlugins') || [];\n      var extraPlugins = config.get('extraPlugins') || [];\n      return this.plugins.init(plugins.concat(extraPlugins), removePlugins);\n    }\n\n    /**\n     * Destroys the editor instance, releasing all resources used by it.\n     *\n     * **Note** The editor cannot be destroyed during the initialization phase so if it is called\n     * while the editor {@link #state is being initialized}, it will wait for the editor initialization before destroying it.\n     *\n     * @fires destroy\n     * @returns {Promise} A promise that resolves once the editor instance is fully destroyed.\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _this2 = this;\n      var readyPromise = Promise.resolve();\n      if (this.state == 'initializing') {\n        readyPromise = new Promise(function (resolve) {\n          return _this2.once('ready', resolve);\n        });\n      }\n      return readyPromise.then(function () {\n        _this2.fire('destroy');\n        _this2.stopListening();\n        _this2.commands.destroy();\n      }).then(function () {\n        return _this2.plugins.destroy();\n      }).then(function () {\n        _this2.model.destroy();\n        _this2.data.destroy();\n        _this2.editing.destroy();\n        _this2.keystrokes.destroy();\n      });\n    }\n\n    /**\n     * Executes specified command with given parameters.\n     *\n     * Shorthand for:\n     *\n     *\t\teditor.commands.get( commandName ).execute( ... );\n     *\n     * @param {String} commandName Name of command to execute.\n     * @param {*} [...commandParams] Command parameters.\n     */\n  }, {\n    key: \"execute\",\n    value: function execute() {\n      try {\n        var _this$commands;\n        (_this$commands = this.commands).execute.apply(_this$commands, arguments);\n      } catch (err) {\n        CKEditorError.rethrowUnexpectedError(err, this);\n      }\n    }\n\n    /**\n     * Creates and initializes a new editor instance.\n     *\n     * This is an abstract method. Every editor type needs to implement its own initialization logic.\n     *\n     * See the `create()` methods of the existing editor types to learn how to use them:\n     *\n     * * {@link module:editor-classic/classiceditor~ClassicEditor.create `ClassicEditor.create()`}\n     * * {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`}\n     * * {@link module:editor-decoupled/decouplededitor~DecoupledEditor.create `DecoupledEditor.create()`}\n     * * {@link module:editor-inline/inlineeditor~InlineEditor.create `InlineEditor.create()`}\n     *\n     * @abstract\n     * @method module:core/editor/editor~Editor.create\n     */\n  }]);\n}();\nexport { Editor as default };\nmix(Editor, ObservableMixin);\n\n/**\n * Fired when {@link module:engine/controller/datacontroller~DataController#event:ready data} and all additional\n * editor components are ready.\n *\n * Note: This event is most useful for plugin developers. When integrating the editor with your website or\n * application you do not have to listen to `editor#ready` because when the promise returned by the static\n * {@link module:core/editor/editor~Editor.create `Editor.create()`} event is resolved, the editor is already ready.\n * In fact, since the first moment when the editor instance is available to you is inside `then()`'s callback,\n * you cannot even add a listener to the `editor#ready` event.\n *\n * See also the {@link #state `editor.state`} property.\n *\n * @event ready\n */\n\n/**\n * Fired when this editor instance is destroyed. The editor at this point is not usable and this event should be used to\n * perform the clean-up in any plugin.\n *\n *\n * See also the {@link #state `editor.state`} property.\n *\n * @event destroy\n */\n\n/**\n * This error is thrown when a user tries to use a `<textarea>` element to create a non-classic editor in it.\n *\n * Textarea element represents a plain-text and cannot be used as a editable root element with included CKEditor5.\n * Content of an editor should be nicely present to the user and show him how it's going to looks like. Textarea element\n * doesn't support such behavior.\n *\n * Only {@glink builds/guides/overview#classic-editor Classic Editor} has implemented a special system, which\n * **replace** DOM element and load data from it\n * ({@link module:editor-classic/classiceditor~ClassicEditor.create more information}). All other editors\n * use an existing element, load data from it and make this element editable. Details about behaviour of each editor\n * might be found in an associated description of a `create` method of each editor.\n *\n * @error editor-wrong-element\n */\n\n/**\n * An array of plugins built into this editor class.\n * It is used in CKEditor 5 builds to provide a list of plugins which are later automatically initialized\n * during the editor initialization.\n *\n * They will be automatically initialized by the editor, unless listed in `config.removePlugins` and\n * unless `config.plugins` is passed.\n *\n *\t\t// Build some plugins into the editor class first.\n *\t\tClassicEditor.builtinPlugins = [ FooPlugin, BarPlugin ];\n *\n *\t\t// Normally, you need to define config.plugins, but since ClassicEditor.builtinPlugins was\n *\t\t// defined, now you can call create() without any configuration.\n *\t\tClassicEditor\n *\t\t\t.create( sourceElement )\n *\t\t\t.then( editor => {\n *\t\t\t\teditor.plugins.get( FooPlugin ); // -> instance of the Foo plugin\n *\t\t\t\teditor.plugins.get( BarPlugin ); // -> instance of the Bar plugin\n *\t\t\t} );\n *\n *\t\tClassicEditor\n *\t\t\t.create( sourceElement, {\n *\t\t\t\t// Don't initialize this plugins (note: it's defined by a string):\n *\t\t\t\tremovePlugins: [ 'Foo' ]\n *\t\t\t} )\n *\t\t\t.then( editor => {\n *\t\t\t\teditor.plugins.get( FooPlugin ); // -> undefined\n *\t\t\t\teditor.config.get( BarPlugin ); // -> instance of the Bar plugin\n *\t\t\t} );\n *\n *\t\tClassicEditor\n *\t\t\t.create( sourceElement, {\n *\t\t\t\t// Load only this plugin. Can also be define by a string if\n *\t\t\t\t// this plugin was built into the editor class.\n *\t\t\t\tplugins: [ FooPlugin ]\n *\t\t\t} )\n *\t\t\t.then( editor => {\n *\t\t\t\teditor.plugins.get( FooPlugin ); // -> instance of the Foo plugin\n *\t\t\t\teditor.config.get( BarPlugin ); // -> undefined\n *\t\t\t} );\n *\n * See also {@link module:core/editor/editor~Editor.defaultConfig}.\n *\n * @static\n * @member {Array.<Function>} module:core/editor/editor~Editor.builtinPlugins\n */\n\n/**\n * The default config which is built into the editor class.\n * It is used in CKEditor 5 builds to provide the default config options which are later used during editor initialization.\n *\n *\t\tClassicEditor.defaultConfig = {\n *\t\t\tfoo: 1,\n *\t\t\tbar: 2\n *\t\t};\n *\n *\t\tClassicEditor\n *\t\t\t.create( sourceElement )\n *\t\t\t.then( editor => {\n *\t\t\t\teditor.config.get( 'foo' ); // -> 1\n *\t\t\t\teditor.config.get( 'bar' ); // -> 2\n *\t\t\t} );\n *\n *\t\t// The default options can be overridden by the config passed to create().\n *\t\tClassicEditor\n *\t\t\t.create( sourceElement, { bar: 3 } )\n *\t\t\t.then( editor => {\n *\t\t\t\teditor.config.get( 'foo' ); // -> 1\n *\t\t\t\teditor.config.get( 'bar' ); // -> 3\n *\t\t\t} );\n *\n * See also {@link module:core/editor/editor~Editor.builtinPlugins}.\n *\n * @static\n * @member {Object} module:core/editor/editor~Editor.defaultConfig\n */","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module core/editor/editorui\n */\n\n/* globals console */\n\nimport ComponentFactory from '@ckeditor/ckeditor5-ui/src/componentfactory';\nimport FocusTracker from '@ckeditor/ckeditor5-utils/src/focustracker';\nimport EmitterMixin from '@ckeditor/ckeditor5-utils/src/emittermixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\n\n/**\n * A class providing the minimal interface that is required to successfully bootstrap any editor UI.\n *\n * @mixes module:utils/emittermixin~EmitterMixin\n */\nvar EditorUI = /*#__PURE__*/function () {\n  /**\n   * Creates an instance of the editor UI class.\n   *\n   * @param {module:core/editor/editor~Editor} editor The editor instance.\n   */\n  function EditorUI(editor) {\n    var _this = this;\n    _classCallCheck(this, EditorUI);\n    /**\n     * The editor that the UI belongs to.\n     *\n     * @readonly\n     * @member {module:core/editor/editor~Editor} #editor\n     */\n    this.editor = editor;\n\n    /**\n     * An instance of the {@link module:ui/componentfactory~ComponentFactory}, a registry used by plugins\n     * to register factories of specific UI components.\n     *\n     * @readonly\n     * @member {module:ui/componentfactory~ComponentFactory} #componentFactory\n     */\n    this.componentFactory = new ComponentFactory(editor);\n\n    /**\n     * Stores the information about the editor UI focus and propagates it so various plugins and components\n     * are unified as a focus group.\n     *\n     * @readonly\n     * @member {module:utils/focustracker~FocusTracker} #focusTracker\n     */\n    this.focusTracker = new FocusTracker();\n\n    /**\n     * Stores all editable elements used by the editor instance.\n     *\n     * @private\n     * @member {Map.<String,HTMLElement>}\n     */\n    this._editableElementsMap = new Map();\n\n    // Informs UI components that should be refreshed after layout change.\n    this.listenTo(editor.editing.view.document, 'layoutChanged', function () {\n      return _this.update();\n    });\n  }\n\n  /**\n   * The main (outermost) DOM element of the editor UI.\n   *\n   * For example, in {@link module:editor-classic/classiceditor~ClassicEditor} it is a `<div>` which\n   * wraps the editable element and the toolbar. In {@link module:editor-inline/inlineeditor~InlineEditor}\n   * it is the editable element itself (as there is no other wrapper). However, in\n   * {@link module:editor-decoupled/decouplededitor~DecoupledEditor} it is set to `null` because this editor does not\n   * come with a single \"main\" HTML element (its editable element and toolbar are separate).\n   *\n   * This property can be understood as a shorthand for retrieving the element that a specific editor integration\n   * considers to be its main DOM element.\n   *\n   * @readonly\n   * @member {HTMLElement|null} #element\n   */\n  return _createClass(EditorUI, [{\n    key: \"element\",\n    get: function get() {\n      return null;\n    }\n\n    /**\n     * Fires the {@link module:core/editor/editorui~EditorUI#event:update `update`} event.\n     *\n     * This method should be called when the editor UI (e.g. positions of its balloons) needs to be updated due to\n     * some environmental change which CKEditor 5 is not aware of (e.g. resize of a container in which it is used).\n     */\n  }, {\n    key: \"update\",\n    value: function update() {\n      this.fire('update');\n    }\n\n    /**\n     * Destroys the UI.\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.stopListening();\n      this.focusTracker.destroy();\n\n      // Clean–up the references to the CKEditor instance stored in the native editable DOM elements.\n      var _iterator = _createForOfIteratorHelper(this._editableElementsMap.values()),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var domElement = _step.value;\n          domElement.ckeditorInstance = null;\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      this._editableElementsMap = new Map();\n    }\n\n    /**\n     * Store the native DOM editable element used by the editor under\n     * a unique name.\n     *\n     * @param {String} rootName The unique name of the editable element.\n     * @param {HTMLElement} domElement The native DOM editable element.\n     */\n  }, {\n    key: \"setEditableElement\",\n    value: function setEditableElement(rootName, domElement) {\n      this._editableElementsMap.set(rootName, domElement);\n\n      // Put a reference to the CKEditor instance in the editable native DOM element.\n      // It helps 3rd–party software (browser extensions, other libraries) access and recognize\n      // CKEditor 5 instances (editing roots) and use their API (there is no global editor\n      // instance registry).\n      if (!domElement.ckeditorInstance) {\n        domElement.ckeditorInstance = this.editor;\n      }\n    }\n\n    /**\n     * Returns the editable editor element with the given name or null if editable does not exist.\n     *\n     * @param {String} [rootName=main] The editable name.\n     * @returns {HTMLElement|undefined}\n     */\n  }, {\n    key: \"getEditableElement\",\n    value: function getEditableElement() {\n      var rootName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'main';\n      return this._editableElementsMap.get(rootName);\n    }\n\n    /**\n     * Returns array of names of all editor editable elements.\n     *\n     * @returns {Iterable.<String>}\n     */\n  }, {\n    key: \"getEditableElementsNames\",\n    value: function getEditableElementsNames() {\n      return this._editableElementsMap.keys();\n    }\n\n    /**\n     * Stores all editable elements used by the editor instance.\n     *\n     * @protected\n     * @deprecated\n     * @member {Map.<String,HTMLElement>}\n     */\n  }, {\n    key: \"_editableElements\",\n    get: function get() {\n      /**\n       * The {@link module:core/editor/editorui~EditorUI#_editableElements `EditorUI#_editableElements`} property has been\n       * deprecated and will be removed in the near future. Please use {@link #setEditableElement `setEditableElement()`} and\n       * {@link #getEditableElement `getEditableElement()`} methods instead.\n       *\n       * @error editor-ui-deprecated-editable-elements\n       * @param {module:core/editor/editorui~EditorUI} editorUI Editor UI instance the deprecated property belongs to.\n       */\n      console.warn('editor-ui-deprecated-editable-elements: ' + 'The EditorUI#_editableElements property has been deprecated and will be removed in the near future.', {\n        editorUI: this\n      });\n      return this._editableElementsMap;\n    }\n\n    /**\n     * Fired when the editor UI is ready.\n     *\n     * Fired before {@link module:engine/controller/datacontroller~DataController#event:ready}.\n     *\n     * @event ready\n     */\n\n    /**\n     * Fired whenever the UI (all related components) should be refreshed.\n     *\n     * **Note:**: The event is fired after each {@link module:engine/view/document~Document#event:layoutChanged}.\n     * It can also be fired manually via the {@link module:core/editor/editorui~EditorUI#update} method.\n     *\n     * @event update\n     */\n  }]);\n}();\nexport { EditorUI as default };\nmix(EditorUI, EmitterMixin);","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\nimport { isFunction } from 'lodash-es';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * @module core/editor/utils/attachtoform\n */\n\n/**\n * Checks if the editor is initialized on a `<textarea>` element that belongs to a form. If yes, it updates the editor's element\n * content before submitting the form.\n *\n * This helper requires the {@link module:core/editor/utils/elementapimixin~ElementApi ElementApi interface}.\n *\n * @param {module:core/editor/editor~Editor} editor Editor instance.\n */\nexport default function attachToForm(editor) {\n  if (!isFunction(editor.updateSourceElement)) {\n    /**\n     * The editor passed to `attachToForm()` must implement the\n     * {@link module:core/editor/utils/elementapimixin~ElementApi} interface.\n     *\n     * @error attachtoform-missing-elementapi-interface\n     */\n    throw new CKEditorError('attachtoform-missing-elementapi-interface: Editor passed to attachToForm() must implement ElementApi.', editor);\n  }\n  var sourceElement = editor.sourceElement;\n\n  // Only when replacing a textarea which is inside of a form element.\n  if (sourceElement && sourceElement.tagName.toLowerCase() === 'textarea' && sourceElement.form) {\n    var originalSubmit;\n    var form = sourceElement.form;\n    var onSubmit = function onSubmit() {\n      return editor.updateSourceElement();\n    };\n\n    // Replace the original form#submit() to call a custom submit function first.\n    // Check if #submit is a function because the form might have an input named \"submit\".\n    if (isFunction(form.submit)) {\n      originalSubmit = form.submit;\n      form.submit = function () {\n        onSubmit();\n        originalSubmit.apply(form);\n      };\n    }\n\n    // Update the replaced textarea with data before each form#submit event.\n    form.addEventListener('submit', onSubmit);\n\n    // Remove the submit listener and revert the original submit method on\n    // editor#destroy.\n    editor.on('destroy', function () {\n      form.removeEventListener('submit', onSubmit);\n      if (originalSubmit) {\n        form.submit = originalSubmit;\n      }\n    });\n  }\n}","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module core/editor/utils/dataapimixin\n */\n\n/**\n * Implementation of the {@link module:core/editor/utils/dataapimixin~DataApi}.\n *\n * @mixin DataApiMixin\n * @implements module:core/editor/utils/dataapimixin~DataApi\n */\nvar DataApiMixin = {\n  /**\n   * @inheritDoc\n   */\n  setData: function setData(data) {\n    this.data.set(data);\n  },\n  /**\n   * @inheritDoc\n   */\n  getData: function getData(options) {\n    return this.data.get(options);\n  }\n};\nexport default DataApiMixin;\n\n/**\n * Interface defining editor methods for setting and getting data to and from the editor's main root element\n * using the {@link module:core/editor/editor~Editor#data data pipeline}.\n *\n * This interface is not a part of the {@link module:core/editor/editor~Editor} class because one may want to implement\n * an editor with multiple root elements, in which case the methods for setting and getting data will need to be implemented\n * differently.\n *\n * @interface DataApi\n */\n\n/**\n * Sets the data in the editor.\n *\n *\t\teditor.setData( '<p>This is editor!</p>' );\n *\n * By default the editor accepts HTML. This can be controlled by injecting a different data processor.\n * See the {@glink features/markdown Markdown output} guide for more details.\n *\n * Note: Not only is the format of the data configurable, but the type of the `setData()`'s parameter does not\n * have to be a string either. You can e.g. accept an object or a DOM `DocumentFragment` if you consider this\n * the right format for you.\n *\n * @method #setData\n * @param {String} data Input data.\n */\n\n/**\n * Gets the data from the editor.\n *\n *\t\teditor.getData(); // -> '<p>This is editor!</p>'\n *\n * By default the editor outputs HTML. This can be controlled by injecting a different data processor.\n * See the {@glink features/markdown Markdown output} guide for more details.\n *\n * Note: Not only is the format of the data configurable, but the type of the `getData()`'s return value does not\n * have to be a string either. You can e.g. return an object or a DOM `DocumentFragment` if you consider this\n * the right format for you.\n *\n * @method #getData\n * @param {Object} [options]\n * @param {String} [options.rootName='main'] Root name.\n * @param {String} [options.trim='empty'] Whether returned data should be trimmed. This option is set to `'empty'` by default,\n * which means that whenever editor content is considered empty, an empty string is returned. To turn off trimming\n * use `'none'`. In such cases exact content will be returned (for example `'<p>&nbsp;</p>'` for an empty editor).\n * @returns {String} Output data.\n */","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport setDataInElement from '@ckeditor/ckeditor5-utils/src/dom/setdatainelement';\n\n/**\n * @module core/editor/utils/elementapimixin\n */\n\n/**\n * Implementation of the {@link module:core/editor/utils/elementapimixin~ElementApi}.\n *\n * @mixin ElementApiMixin\n * @implements module:core/editor/utils/elementapimixin~ElementApi\n */\nvar ElementApiMixin = {\n  /**\n   * @inheritDoc\n   */\n  updateSourceElement: function updateSourceElement() {\n    if (!this.sourceElement) {\n      /**\n       * Cannot update the source element of a detached editor.\n       *\n       * The {@link ~ElementApi#updateSourceElement `updateSourceElement()`} method cannot be called if you did not\n       * pass an element to `Editor.create()`.\n       *\n       * @error editor-missing-sourceelement\n       */\n      throw new CKEditorError('editor-missing-sourceelement: Cannot update the source element of a detached editor.', this);\n    }\n    setDataInElement(this.sourceElement, this.data.get());\n  }\n};\nexport default ElementApiMixin;\n\n/**\n * Interface describing an editor that replaced a DOM element (was \"initialized on an element\").\n *\n * Such an editor should provide a method to\n * {@link module:core/editor/utils/elementapimixin~ElementApi#updateSourceElement update the replaced element with the current data}.\n *\n * @interface ElementApi\n */\n\n/**\n * The element on which the editor has been initialized.\n *\n * @readonly\n * @member {HTMLElement} #sourceElement\n */\n\n/**\n * Updates the {@link #sourceElement editor source element}'s content with the data.\n *\n * @method #updateSourceElement\n */","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module core/plugin\n */\n\nimport ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\n\n/**\n * The base class for CKEditor plugin classes.\n *\n * @implements module:core/plugin~PluginInterface\n * @mixes module:utils/observablemixin~ObservableMixin\n */\nvar Plugin = /*#__PURE__*/function () {\n  /**\n   * @inheritDoc\n   */\n  function Plugin(editor) {\n    _classCallCheck(this, Plugin);\n    /**\n     * The editor instance.\n     *\n     * Note that most editors implement the {@link module:core/editor/editorwithui~EditorWithUI} interface in addition\n     * to the base {@link module:core/editor/editor~Editor} interface. However, editors with an external UI\n     * (i.e. Bootstrap-based) or a headless editor may not implement the {@link module:core/editor/editorwithui~EditorWithUI}\n     * interface.\n     *\n     * Because of above, to make plugins more universal, it is recommended to split features into:\n     *  - The \"editing\" part that only uses the {@link module:core/editor/editor~Editor} interface.\n     *  - The \"UI\" part that uses both the {@link module:core/editor/editor~Editor} interface and\n     *  the {@link module:core/editor/editorwithui~EditorWithUI} interface.\n     *\n     * @readonly\n     * @member {module:core/editor/editor~Editor} #editor\n     */\n    this.editor = editor;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  return _createClass(Plugin, [{\n    key: \"destroy\",\n    value: function destroy() {\n      this.stopListening();\n    }\n  }]);\n}();\nexport { Plugin as default };\nmix(Plugin, ObservableMixin);\n\n/**\n * The base interface for CKEditor plugins.\n *\n * In its minimal form a plugin can be a simple function that accepts {@link module:core/editor/editor~Editor the editor}\n * as a parameter:\n *\n *\t\t// A simple plugin that enables a data processor.\n *\t\tfunction MyPlugin( editor ) {\n *\t\t\teditor.data.processor = new MyDataProcessor();\n *\t\t}\n *\n * In most cases however, you will want to inherit from the {@link module:core/plugin~Plugin} class which implements the\n * {@link module:utils/observablemixin~ObservableMixin} and is, therefore, more convenient:\n *\n *\t\tclass MyPlugin extends Plugin {\n *\t\t\tinit() {\n *\t\t\t\t// `listenTo()` and `editor` are available thanks to `Plugin`.\n *\t\t\t\t// By using `listenTo()` you will ensure that the listener is removed when\n *\t\t\t\t// the plugin is destroyed.\n *\t\t\t\tthis.listenTo( this.editor.data, 'ready', () => {\n *\t\t\t\t\t// Do something when the data is ready.\n *\t\t\t\t} );\n *\t\t\t}\n *\t\t}\n *\n * The plugin can also implement methods (e.g. {@link module:core/plugin~PluginInterface#init `init()`} or\n * {@link module:core/plugin~PluginInterface#destroy `destroy()`}) which, when present, will be used to properly\n * initialize and destroy the plugin.\n *\n * **Note:** When defined as a plain function, the plugin acts as a constructor and will be\n * called in parallel with other plugins' {@link module:core/plugin~PluginInterface#constructor constructors}.\n * This means the code of that plugin will be executed **before** {@link module:core/plugin~PluginInterface#init `init()`} and\n * {@link module:core/plugin~PluginInterface#afterInit `afterInit()`} methods of other plugins and, for instance,\n * you cannot use it to extend other plugins' {@glink framework/guides/architecture/editing-engine#schema schema}\n * rules as they are defined later on during the `init()` stage.\n *\n * @interface PluginInterface\n */\n\n/**\n * Creates a new plugin instance. This is the first step of the plugin initialization.\n * See also {@link #init} and {@link #afterInit}.\n *\n * A plugin is always instantiated after its {@link module:core/plugin~PluginInterface.requires dependencies} and the\n * {@link #init} and {@link #afterInit} methods are called in the same order.\n *\n * Usually, you will want to put your plugin's initialization code in the {@link #init} method.\n * The constructor can be understood as \"before init\" and used in special cases, just like\n * {@link #afterInit} serves the special \"after init\" scenarios (e.g.the code which depends on other\n * plugins, but which does not {@link module:core/plugin~PluginInterface.requires explicitly require} them).\n *\n * @method #constructor\n * @param {module:core/editor/editor~Editor} editor\n */\n\n/**\n * An array of plugins required by this plugin.\n *\n * To keep the plugin class definition tight it is recommended to define this property as a static getter:\n *\n *\t\timport Image from './image.js';\n *\n *\t\texport default class ImageCaption {\n *\t\t\tstatic get requires() {\n *\t\t\t\treturn [ Image ];\n *\t\t\t}\n *\t\t}\n *\n * @static\n * @readonly\n * @member {Array.<Function>|undefined} module:core/plugin~PluginInterface.requires\n */\n\n/**\n * An optional name of the plugin. If set, the plugin will be available in\n * {@link module:core/plugincollection~PluginCollection#get} by its\n * name and its constructor. If not, then only by its constructor.\n *\n * The name should reflect the constructor name.\n *\n * To keep the plugin class definition tight it is recommended to define this property as a static getter:\n *\n *\t\texport default class ImageCaption {\n *\t\t\tstatic get pluginName() {\n *\t\t\t\treturn 'ImageCaption';\n *\t\t\t}\n *\t\t}\n *\n * Note: The native `Function.name` property could not be used to keep the plugin name because\n * it will be mangled during code minification.\n *\n * Naming a plugin is necessary to enable removing it through the\n * {@link module:core/editor/editorconfig~EditorConfig#removePlugins `config.removePlugins`} option.\n *\n * @static\n * @readonly\n * @member {String|undefined} module:core/plugin~PluginInterface.pluginName\n */\n\n/**\n * The second stage (after plugin {@link #constructor}) of plugin initialization.\n * Unlike the plugin constructor this method can be asynchronous.\n *\n * A plugin's `init()` method is called after its {@link module:core/plugin~PluginInterface.requires dependencies} are initialized,\n * so in the same order as constructors of these plugins.\n *\n * **Note:** This method is optional. A plugin instance does not need to have it defined.\n *\n * @method #init\n * @returns {null|Promise}\n */\n\n/**\n * The third (and last) stage of plugin initialization. See also {@link #constructor} and {@link #init}.\n *\n * **Note:** This method is optional. A plugin instance does not need to have it defined.\n *\n * @method #afterInit\n * @returns {null|Promise}\n */\n\n/**\n * Destroys the plugin.\n *\n * **Note:** This method is optional. A plugin instance does not need to have it defined.\n *\n * @method #destroy\n * @returns {null|Promise}\n */\n\n/**\n * Array of loaded plugins.\n *\n * @typedef {Array.<module:core/plugin~PluginInterface>} module:core/plugin~LoadedPlugins\n */","import _slicedToArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport _regenerator from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regenerator.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.reduce.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module core/plugincollection\n */\n\n/* globals console */\n\nimport CKEditorError, { attachLinkToDocumentation } from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport EmitterMixin from '@ckeditor/ckeditor5-utils/src/emittermixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\n\n/**\n * Manages a list of CKEditor plugins, including loading, resolving dependencies and initialization.\n *\n * @mixes module:utils/emittermixin~EmitterMixin\n */\nvar PluginCollection = /*#__PURE__*/function () {\n  /**\n   * Creates an instance of the PluginCollection class.\n   * Allows loading and initializing plugins and their dependencies.\n   *\n   * @param {module:core/editor/editor~Editor} editor\n   * @param {Array.<Function>} [availablePlugins] Plugins (constructors) which the collection will be able to use\n   * when {@link module:core/plugincollection~PluginCollection#init} is used with plugin names (strings, instead of constructors).\n   * Usually, the editor will pass its built-in plugins to the collection so they can later be\n   * used in `config.plugins` or `config.removePlugins` by names.\n   */\n  function PluginCollection(editor) {\n    var availablePlugins = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n    _classCallCheck(this, PluginCollection);\n    /**\n     * @protected\n     * @member {module:core/editor/editor~Editor} module:core/plugin~PluginCollection#_editor\n     */\n    this._editor = editor;\n\n    /**\n     * Map of plugin constructors which can be retrieved by their names.\n     *\n     * @protected\n     * @member {Map.<String|Function,Function>} module:core/plugin~PluginCollection#_availablePlugins\n     */\n    this._availablePlugins = new Map();\n\n    /**\n     * @protected\n     * @member {Map} module:core/plugin~PluginCollection#_plugins\n     */\n    this._plugins = new Map();\n    var _iterator = _createForOfIteratorHelper(availablePlugins),\n      _step;\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var PluginConstructor = _step.value;\n        this._availablePlugins.set(PluginConstructor, PluginConstructor);\n        if (PluginConstructor.pluginName) {\n          this._availablePlugins.set(PluginConstructor.pluginName, PluginConstructor);\n        }\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n  }\n\n  /**\n   * Iterable interface.\n   *\n   * Returns `[ PluginConstructor, pluginInstance ]` pairs.\n   *\n   * @returns {Iterable.<Array>}\n   */\n  return _createClass(PluginCollection, [{\n    key: Symbol.iterator,\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function value() {\n      var _iterator2, _step2, entry, _t;\n      return _regenerator().w(function (_context) {\n        while (1) switch (_context.p = _context.n) {\n          case 0:\n            _iterator2 = _createForOfIteratorHelper(this._plugins);\n            _context.p = 1;\n            _iterator2.s();\n          case 2:\n            if ((_step2 = _iterator2.n()).done) {\n              _context.n = 4;\n              break;\n            }\n            entry = _step2.value;\n            if (!(typeof entry[0] == 'function')) {\n              _context.n = 3;\n              break;\n            }\n            _context.n = 3;\n            return entry;\n          case 3:\n            _context.n = 2;\n            break;\n          case 4:\n            _context.n = 6;\n            break;\n          case 5:\n            _context.p = 5;\n            _t = _context.v;\n            _iterator2.e(_t);\n          case 6:\n            _context.p = 6;\n            _iterator2.f();\n            return _context.f(6);\n          case 7:\n            return _context.a(2);\n        }\n      }, value, this, [[1, 5, 6, 7]]);\n    })\n    /**\n     * Gets the plugin instance by its constructor or name.\n     *\n     *\t\t// Check if 'Clipboard' plugin was loaded.\n     *\t\tif ( editor.plugins.has( 'Clipboard' ) ) {\n     *\t\t\t// Get clipboard plugin instance\n     *\t\t\tconst clipboard = editor.plugins.get( 'Clipboard' );\n     *\n     *\t\t\tthis.listenTo( clipboard, 'inputTransformation', ( evt, data ) => {\n     *\t\t\t\t// Do something on clipboard input.\n     *\t\t\t} );\n     *\t\t}\n     *\n     * **Note**: This method will throw error if plugin is not loaded. Use `{@link #has editor.plugins.has()}`\n     * to check if plugin is available.\n     *\n     * @param {Function|String} key The plugin constructor or {@link module:core/plugin~PluginInterface.pluginName name}.\n     * @returns {module:core/plugin~PluginInterface}\n     */\n  }, {\n    key: \"get\",\n    value: function get(key) {\n      var plugin = this._plugins.get(key);\n      if (!plugin) {\n        /**\n         * The plugin is not loaded and could not be obtained.\n         *\n         * Plugin classes (constructors) need to be provided to the editor and must be loaded before they can be obtained from\n         * the plugin collection.\n         * This is usually done in CKEditor 5 builds by setting the {@link module:core/editor/editor~Editor.builtinPlugins}\n         * property.\n         *\n         * **Note**: You can use `{@link module:core/plugincollection~PluginCollection#has editor.plugins.has()}`\n         * to check if plugin was loaded.\n         *\n         * @error plugincollection-plugin-not-loaded\n         * @param {String} plugin The name of the plugin which is not loaded.\n         */\n        var errorMsg = 'plugincollection-plugin-not-loaded: The requested plugin is not loaded.';\n        var pluginName = key;\n        if (typeof key == 'function') {\n          pluginName = key.pluginName || key.name;\n        }\n        throw new CKEditorError(errorMsg, this._editor, {\n          plugin: pluginName\n        });\n      }\n      return plugin;\n    }\n\n    /**\n     * Checks if plugin is loaded.\n     *\n     *\t\t// Check if 'Clipboard' plugin was loaded.\n     *\t\tif ( editor.plugins.has( 'Clipboard' ) ) {\n     *\t\t\t// Now use clipboard plugin instance:\n     *\t\t\tconst clipboard = editor.plugins.get( 'Clipboard' );\n     *\n     *\t\t\t// ...\n     *\t\t}\n     *\n     * @param {Function|String} key The plugin constructor or {@link module:core/plugin~PluginInterface.pluginName name}.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"has\",\n    value: function has(key) {\n      return this._plugins.has(key);\n    }\n\n    /**\n     * Initializes a set of plugins and adds them to the collection.\n     *\n     * @param {Array.<Function|String>} plugins An array of {@link module:core/plugin~PluginInterface plugin constructors}\n     * or {@link module:core/plugin~PluginInterface.pluginName plugin names}. The second option (names) works only if\n     * `availablePlugins` were passed to the {@link #constructor}.\n     * @param {Array.<String|Function>} [removePlugins] Names of plugins or plugin constructors\n     * that should not be loaded (despite being specified in the `plugins` array).\n     * @returns {Promise.<module:core/plugin~LoadedPlugins>} A promise which gets resolved once all plugins are loaded\n     * and available in the collection.\n     */\n  }, {\n    key: \"init\",\n    value: function init(plugins) {\n      var removePlugins = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n      var that = this;\n      var editor = this._editor;\n      var loading = new Set();\n      var loaded = [];\n      var pluginConstructors = mapToAvailableConstructors(plugins);\n      var removePluginConstructors = mapToAvailableConstructors(removePlugins);\n      var missingPlugins = getMissingPluginNames(plugins);\n      if (missingPlugins) {\n        /**\n         * Some plugins are not available and could not be loaded.\n         *\n         * Plugin classes (constructors) need to be provided to the editor before they can be loaded by name.\n         * This is usually done in CKEditor 5 builds by setting the {@link module:core/editor/editor~Editor.builtinPlugins}\n         * property.\n         *\n         * **If you see this warning when using one of the {@glink builds/index CKEditor 5 Builds}**, it means\n         * that you try to enable a plugin which was not included in that build. This may be due to a typo\n         * in the plugin name or simply because that plugin is not a part of this build. In the latter scenario,\n         * read more about {@glink builds/guides/development/custom-builds custom builds}.\n         *\n         * **If you see this warning when using one of the editor creators directly** (not a build), then it means\n         * that you tried loading plugins by name. However, unlike CKEditor 4, CKEditor 5 does not implement a \"plugin loader\".\n         * This means that CKEditor 5 does not know where to load the plugin modules from. Therefore, you need to\n         * provide each plugin through reference (as a constructor function). Check out the examples in\n         * {@glink builds/guides/integration/advanced-setup#scenario-2-building-from-source \"Building from source\"}.\n         *\n         * @error plugincollection-plugin-not-found\n         * @param {Array.<String>} plugins The name of the plugins which could not be loaded.\n         */\n        var errorMsg = 'plugincollection-plugin-not-found: Some plugins are not available and could not be loaded.';\n\n        // Log the error so it's more visible on the console. Hopefully, for better DX.\n        console.error(attachLinkToDocumentation(errorMsg), {\n          plugins: missingPlugins\n        });\n        return Promise.reject(new CKEditorError(errorMsg, this._editor, {\n          plugins: missingPlugins\n        }));\n      }\n      return Promise.all(pluginConstructors.map(loadPlugin)).then(function () {\n        return initPlugins(loaded, 'init');\n      }).then(function () {\n        return initPlugins(loaded, 'afterInit');\n      }).then(function () {\n        return loaded;\n      });\n      function loadPlugin(PluginConstructor) {\n        if (removePluginConstructors.includes(PluginConstructor)) {\n          return;\n        }\n\n        // The plugin is already loaded or being loaded - do nothing.\n        if (that._plugins.has(PluginConstructor) || loading.has(PluginConstructor)) {\n          return;\n        }\n        return instantiatePlugin(PluginConstructor).catch(function (err) {\n          /**\n           * It was not possible to load the plugin.\n           *\n           * This is a generic error logged to the console when a JavaSript error is thrown during the initialization\n           * of one of the plugins.\n           *\n           * If you correctly handled the promise returned by the editor's `create()` method (like shown below)\n           * you will find the original error logged to the console, too:\n           *\n           *\t\tClassicEditor.create( document.getElementById( 'editor' ) )\n           *\t\t\t.then( editor => {\n           *\t\t\t\t// ...\n           * \t\t\t} )\n           *\t\t\t.catch( error => {\n           *\t\t\t\tconsole.error( error );\n           *\t\t\t} );\n           *\n           * @error plugincollection-load\n           * @param {String} plugin The name of the plugin that could not be loaded.\n           */\n          console.error(attachLinkToDocumentation('plugincollection-load: It was not possible to load the plugin.'), {\n            plugin: PluginConstructor\n          });\n          throw err;\n        });\n      }\n      function initPlugins(loadedPlugins, method) {\n        return loadedPlugins.reduce(function (promise, plugin) {\n          if (!plugin[method]) {\n            return promise;\n          }\n          return promise.then(plugin[method].bind(plugin));\n        }, Promise.resolve());\n      }\n      function instantiatePlugin(PluginConstructor) {\n        return new Promise(function (resolve) {\n          loading.add(PluginConstructor);\n          if (PluginConstructor.requires) {\n            PluginConstructor.requires.forEach(function (RequiredPluginConstructorOrName) {\n              var RequiredPluginConstructor = getPluginConstructor(RequiredPluginConstructorOrName);\n              if (removePlugins.includes(RequiredPluginConstructor)) {\n                /**\n                 * Cannot load a plugin because one of its dependencies is listed in the `removePlugins` option.\n                 *\n                 * @error plugincollection-required\n                 * @param {Function} plugin The required plugin.\n                 * @param {Function} requiredBy The parent plugin.\n                 */\n                throw new CKEditorError('plugincollection-required: Cannot load a plugin because one of its dependencies is listed in' + 'the `removePlugins` option.', editor, {\n                  plugin: RequiredPluginConstructor,\n                  requiredBy: PluginConstructor\n                });\n              }\n              loadPlugin(RequiredPluginConstructor);\n            });\n          }\n          var plugin = new PluginConstructor(editor);\n          that._add(PluginConstructor, plugin);\n          loaded.push(plugin);\n          resolve();\n        });\n      }\n      function getPluginConstructor(PluginConstructorOrName) {\n        if (typeof PluginConstructorOrName == 'function') {\n          return PluginConstructorOrName;\n        }\n        return that._availablePlugins.get(PluginConstructorOrName);\n      }\n      function getMissingPluginNames(plugins) {\n        var missingPlugins = [];\n        var _iterator3 = _createForOfIteratorHelper(plugins),\n          _step3;\n        try {\n          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n            var pluginNameOrConstructor = _step3.value;\n            if (!getPluginConstructor(pluginNameOrConstructor)) {\n              missingPlugins.push(pluginNameOrConstructor);\n            }\n          }\n        } catch (err) {\n          _iterator3.e(err);\n        } finally {\n          _iterator3.f();\n        }\n        return missingPlugins.length ? missingPlugins : null;\n      }\n      function mapToAvailableConstructors(plugins) {\n        return plugins.map(function (pluginNameOrConstructor) {\n          return getPluginConstructor(pluginNameOrConstructor);\n        }).filter(function (PluginConstructor) {\n          return !!PluginConstructor;\n        });\n      }\n    }\n\n    /**\n     * Destroys all loaded plugins.\n     *\n     * @returns {Promise}\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var promises = Array.from(this).map(function (_ref) {\n        var _ref2 = _slicedToArray(_ref, 2),\n          pluginInstance = _ref2[1];\n        return pluginInstance;\n      }).filter(function (pluginInstance) {\n        return typeof pluginInstance.destroy == 'function';\n      }).map(function (pluginInstance) {\n        return pluginInstance.destroy();\n      });\n      return Promise.all(promises);\n    }\n\n    /**\n     * Adds the plugin to the collection. Exposed mainly for testing purposes.\n     *\n     * @protected\n     * @param {Function} PluginConstructor The plugin constructor.\n     * @param {module:core/plugin~PluginInterface} plugin The instance of the plugin.\n     */\n  }, {\n    key: \"_add\",\n    value: function _add(PluginConstructor, plugin) {\n      this._plugins.set(PluginConstructor, plugin);\n      var pluginName = PluginConstructor.pluginName;\n      if (!pluginName) {\n        return;\n      }\n      if (this._plugins.has(pluginName)) {\n        /**\n         * Two plugins with the same {@link module:core/plugin~PluginInterface.pluginName} were loaded.\n         * This will lead to runtime conflicts between these plugins.\n         *\n         * In practice, this warning usually means that new plugins were added to an existing CKEditor 5 build.\n         * Plugins should always be added to a source version of the editor (`@ckeditor/ckeditor5-editor-*`),\n         * not to an editor imported from one of the `@ckeditor/ckeditor5-build-*` packages.\n         *\n         * Check your import paths and the list of plugins passed to\n         * {@link module:core/editor/editor~Editor.create `Editor.create()`}\n         * or specified in {@link module:core/editor/editor~Editor.builtinPlugins `Editor.builtinPlugins`}.\n         *\n         * The second option is that your `node_modules/` directory contains duplicated versions of the same\n         * CKEditor 5 packages. Normally, on clean installations, npm deduplicates packages in `node_modules/`, so\n         * it may be enough to call `rm -rf node_modules && npm i`. However, if you installed conflicting versions\n         * of packages, their dependencies may need to be installed in more than one version which may lead to this\n         * warning.\n         *\n         * Technically speaking, this error occurs because after adding a plugin to an existing editor build\n         * dependencies of this plugin are being duplicated.\n         * They are already built into that editor build and now get added for the second time as dependencies\n         * of the plugin you are installing.\n         *\n         * Read more about {@glink builds/guides/integration/installing-plugins installing plugins}.\n         *\n         * @error plugincollection-plugin-name-conflict\n         * @param {String} pluginName The duplicated plugin name.\n         * @param {Function} plugin1 The first plugin constructor.\n         * @param {Function} plugin2 The second plugin constructor.\n         */\n        throw new CKEditorError('plugincollection-plugin-name-conflict: Two plugins with the same name were loaded.', null, {\n          pluginName: pluginName,\n          plugin1: this._plugins.get(pluginName).constructor,\n          plugin2: PluginConstructor\n        });\n      }\n      this._plugins.set(pluginName, plugin);\n    }\n  }]);\n}();\nexport { PluginCollection as default };\nmix(PluginCollection, EmitterMixin);","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M11.591 10.177l4.243 4.242a1 1 0 0 1-1.415 1.415l-4.242-4.243-4.243 4.243a1 1 0 0 1-1.414-1.415l4.243-4.242L4.52 5.934A1 1 0 0 1 5.934 4.52l4.243 4.243 4.242-4.243a1 1 0 1 1 1.415 1.414l-4.243 4.243z\\\"/></svg>\"","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M6.972 16.615a.997.997 0 0 1-.744-.292l-4.596-4.596a1 1 0 1 1 1.414-1.414l3.926 3.926 9.937-9.937a1 1 0 0 1 1.414 1.415L7.717 16.323a.997.997 0 0 1-.745.292z\\\"/></svg>\"","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M7.3 17.37l-.061.088a1.518 1.518 0 0 1-.934.535l-4.178.663-.806-4.153a1.495 1.495 0 0 1 .187-1.058l.056-.086L8.77 2.639c.958-1.351 2.803-1.076 4.296-.03 1.497 1.047 2.387 2.693 1.433 4.055L7.3 17.37zM9.14 4.728l-5.545 8.346 3.277 2.294 5.544-8.346L9.14 4.728zM6.07 16.512l-3.276-2.295.53 2.73 2.746-.435zM9.994 3.506L13.271 5.8c.316-.452-.16-1.333-1.065-1.966-.905-.634-1.895-.78-2.212-.328zM8 18.5L9.375 17H19v1.5H8z\\\"/></svg>\"","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><circle cx=\\\"9.5\\\" cy=\\\"4.5\\\" r=\\\"1.5\\\"/><circle cx=\\\"9.5\\\" cy=\\\"10.5\\\" r=\\\"1.5\\\"/><circle cx=\\\"9.5\\\" cy=\\\"16.5\\\" r=\\\"1.5\\\"/></svg>\\n\"","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.object.to-string.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module editor-classic/classiceditor\n */\n\nimport Editor from '@ckeditor/ckeditor5-core/src/editor/editor';\nimport DataApiMixin from '@ckeditor/ckeditor5-core/src/editor/utils/dataapimixin';\nimport ElementApiMixin from '@ckeditor/ckeditor5-core/src/editor/utils/elementapimixin';\nimport attachToForm from '@ckeditor/ckeditor5-core/src/editor/utils/attachtoform';\nimport HtmlDataProcessor from '@ckeditor/ckeditor5-engine/src/dataprocessor/htmldataprocessor';\nimport ClassicEditorUI from './classiceditorui';\nimport ClassicEditorUIView from './classiceditoruiview';\nimport getDataFromElement from '@ckeditor/ckeditor5-utils/src/dom/getdatafromelement';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport { isElement } from 'lodash-es';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * The {@glink builds/guides/overview#classic-editor classic editor} implementation.\n * It uses an inline editable and a sticky toolbar, all enclosed in a boxed UI.\n * See the {@glink examples/builds/classic-editor demo}.\n *\n * In order to create a classic editor instance, use the static\n * {@link module:editor-classic/classiceditor~ClassicEditor.create `ClassicEditor.create()`} method.\n *\n * # Classic editor and classic build\n *\n * The classic editor can be used directly from source (if you installed the\n * [`@ckeditor/ckeditor5-editor-classic`](https://www.npmjs.com/package/@ckeditor/ckeditor5-editor-classic) package)\n * but it is also available in the {@glink builds/guides/overview#classic-editor classic build}.\n *\n * {@glink builds/guides/overview Builds} are ready-to-use editors with plugins bundled in. When using the editor from\n * source you need to take care of loading all plugins by yourself\n * (through the {@link module:core/editor/editorconfig~EditorConfig#plugins `config.plugins`} option).\n * Using the editor from source gives much better flexibility and allows easier customization.\n *\n * Read more about initializing the editor from source or as a build in\n * {@link module:editor-classic/classiceditor~ClassicEditor.create `ClassicEditor.create()`}.\n *\n * @mixes module:core/editor/utils/dataapimixin~DataApiMixin\n * @mixes module:core/editor/utils/elementapimixin~ElementApiMixin\n * @implements module:core/editor/editorwithui~EditorWithUI\n * @extends module:core/editor/editor~Editor\n */\nvar ClassicEditor = /*#__PURE__*/function (_Editor) {\n  /**\n   * Creates an instance of the classic editor.\n   *\n   * **Note:** do not use the constructor to create editor instances. Use the static\n   * {@link module:editor-classic/classiceditor~ClassicEditor.create `ClassicEditor.create()`} method instead.\n   *\n   * @protected\n   * @param {HTMLElement|String} sourceElementOrData The DOM element that will be the source for the created editor\n   * or the editor's initial data. For more information see\n   * {@link module:editor-classic/classiceditor~ClassicEditor.create `ClassicEditor.create()`}.\n   * @param {module:core/editor/editorconfig~EditorConfig} config The editor configuration.\n   */\n  function ClassicEditor(sourceElementOrData, config) {\n    var _this;\n    _classCallCheck(this, ClassicEditor);\n    _this = _callSuper(this, ClassicEditor, [config]);\n    if (isElement(sourceElementOrData)) {\n      _this.sourceElement = sourceElementOrData;\n    }\n    _this.data.processor = new HtmlDataProcessor();\n    _this.model.document.createRoot();\n    _this.ui = new ClassicEditorUI(_this, new ClassicEditorUIView(_this.locale, _this.editing.view));\n    attachToForm(_this);\n    return _this;\n  }\n\n  /**\n   * Destroys the editor instance, releasing all resources used by it.\n   *\n   * Updates the editor's source element with the data.\n   *\n   * @returns {Promise}\n   */\n  _inherits(ClassicEditor, _Editor);\n  return _createClass(ClassicEditor, [{\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.sourceElement) {\n        this.updateSourceElement();\n      }\n      this.ui.destroy();\n      return _superPropGet(ClassicEditor, \"destroy\", this, 3)([]);\n    }\n\n    /**\n     * Creates a new classic editor instance.\n     *\n     * There are three ways how the editor can be initialized.\n     *\n     * # Replacing a DOM element (and loading data from it)\n     *\n     * You can initialize the editor using an existing DOM element:\n     *\n     *\t\tClassicEditor\n     *\t\t\t.create( document.querySelector( '#editor' ) )\n     *\t\t\t.then( editor => {\n     *\t\t\t\tconsole.log( 'Editor was initialized', editor );\n     *\t\t\t} )\n     *\t\t\t.catch( err => {\n     *\t\t\t\tconsole.error( err.stack );\n     *\t\t\t} );\n     *\n     * The element's content will be used as the editor data and the element will be replaced by the editor UI.\n     *\n     * # Creating a detached editor\n     *\n     * Alternatively, you can initialize the editor by passing the initial data directly as a string.\n     * In this case, the editor will render an element that must be inserted into the DOM:\n     *\n     *\t\tClassicEditor\n     *\t\t\t.create( '<p>Hello world!</p>' )\n     *\t\t\t.then( editor => {\n     *\t\t\t\tconsole.log( 'Editor was initialized', editor );\n     *\n     *\t\t\t\t// Initial data was provided so the editor UI element needs to be added manually to the DOM.\n     *\t\t\t\tdocument.body.appendChild( editor.ui.element );\n     *\t\t\t} )\n     *\t\t\t.catch( err => {\n     *\t\t\t\tconsole.error( err.stack );\n     *\t\t\t} );\n     *\n     * This lets you dynamically append the editor to your web page whenever it is convenient for you. You may use this method if your\n     * web page content is generated on the client side and the DOM structure is not ready at the moment when you initialize the editor.\n     *\n     * # Replacing a DOM element (and data provided in `config.initialData`)\n     *\n     * You can also mix these two ways by providing a DOM element to be used and passing the initial data through the configuration:\n     *\n     *\t\tClassicEditor\n     *\t\t\t.create( document.querySelector( '#editor' ), {\n     *\t\t\t\tinitialData: '<h2>Initial data</h2><p>Foo bar.</p>'\n     *\t\t\t} )\n     *\t\t\t.then( editor => {\n     *\t\t\t\tconsole.log( 'Editor was initialized', editor );\n     *\t\t\t} )\n     *\t\t\t.catch( err => {\n     *\t\t\t\tconsole.error( err.stack );\n     *\t\t\t} );\n     *\n     * This method can be used to initialize the editor on an existing element with the specified content in case if your integration\n     * makes it difficult to set the content of the source element.\n     *\n     * Note that an error will be thrown if you pass the initial data both as the first parameter and also in the configuration.\n     *\n     * # Configuring the editor\n     *\n     * See the {@link module:core/editor/editorconfig~EditorConfig editor configuration documentation} to learn more about\n     * customizing plugins, toolbar and more.\n     *\n     * # Using the editor from source\n     *\n     * The code samples listed in the previous sections of this documentation assume that you are using an\n     * {@glink builds/guides/overview editor build} (for example – `@ckeditor/ckeditor5-build-classic`).\n     *\n     * If you want to use the classic editor from source (`@ckeditor/ckeditor5-editor-classic/src/classiceditor`),\n     * you need to define the list of\n     * {@link module:core/editor/editorconfig~EditorConfig#plugins plugins to be initialized} and\n     * {@link module:core/editor/editorconfig~EditorConfig#toolbar toolbar items}. Read more about using the editor from\n     * source in the {@glink builds/guides/integration/advanced-setup \"Advanced setup\" guide}.\n     *\n     * @param {HTMLElement|String} sourceElementOrData The DOM element that will be the source for the created editor\n     * or the editor's initial data.\n     *\n     * If a DOM element is passed, its content will be automatically loaded to the editor upon initialization\n     * and the {@link module:editor-classic/classiceditorui~ClassicEditorUI#element editor element} will replace the passed element\n     * in the DOM (the original one will be hidden and the editor will be injected next to it).\n     *\n     * Moreover, the editor data will be set back to the original element once the editor is destroyed and when a form, in which\n     * this element is contained, is submitted (if the original element is a `<textarea>`). This ensures seamless integration with native\n     * web forms.\n     *\n     * If the initial data is passed, a detached editor will be created. In this case you need to insert it into the DOM manually.\n     * It is available under the {@link module:editor-classic/classiceditorui~ClassicEditorUI#element `editor.ui.element`} property.\n     *\n     * @param {module:core/editor/editorconfig~EditorConfig} [config] The editor configuration.\n     * @returns {Promise} A promise resolved once the editor is ready. The promise resolves with the created editor instance.\n     */\n  }], [{\n    key: \"create\",\n    value: function create(sourceElementOrData) {\n      var _this2 = this;\n      var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      return new Promise(function (resolve) {\n        var editor = new _this2(sourceElementOrData, config);\n        resolve(editor.initPlugins().then(function () {\n          return editor.ui.init(isElement(sourceElementOrData) ? sourceElementOrData : null);\n        }).then(function () {\n          if (!isElement(sourceElementOrData) && config.initialData) {\n            // Documented in core/editor/editorconfig.jdoc.\n            throw new CKEditorError('editor-create-initial-data: ' + 'The config.initialData option cannot be used together with initial data passed in Editor.create().', null);\n          }\n          var initialData = config.initialData || getInitialData(sourceElementOrData);\n          return editor.data.init(initialData);\n        }).then(function () {\n          return editor.fire('ready');\n        }).then(function () {\n          return editor;\n        }));\n      });\n    }\n  }]);\n}(Editor);\nexport { ClassicEditor as default };\nmix(ClassicEditor, DataApiMixin);\nmix(ClassicEditor, ElementApiMixin);\nfunction getInitialData(sourceElementOrData) {\n  return isElement(sourceElementOrData) ? getDataFromElement(sourceElementOrData) : sourceElementOrData;\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module editor-classic/classiceditorui\n */\n\nimport EditorUI from '@ckeditor/ckeditor5-core/src/editor/editorui';\nimport enableToolbarKeyboardFocus from '@ckeditor/ckeditor5-ui/src/toolbar/enabletoolbarkeyboardfocus';\nimport normalizeToolbarConfig from '@ckeditor/ckeditor5-ui/src/toolbar/normalizetoolbarconfig';\nimport { enablePlaceholder } from '@ckeditor/ckeditor5-engine/src/view/placeholder';\nimport ElementReplacer from '@ckeditor/ckeditor5-utils/src/elementreplacer';\n\n/**\n * The classic editor UI class.\n *\n * @extends module:core/editor/editorui~EditorUI\n */\nvar ClassicEditorUI = /*#__PURE__*/function (_EditorUI) {\n  /**\n   * Creates an instance of the classic editor UI class.\n   *\n   * @param {module:core/editor/editor~Editor} editor The editor instance.\n   * @param {module:ui/editorui/editoruiview~EditorUIView} view The view of the UI.\n   */\n  function ClassicEditorUI(editor, view) {\n    var _this;\n    _classCallCheck(this, ClassicEditorUI);\n    _this = _callSuper(this, ClassicEditorUI, [editor]);\n\n    /**\n     * The main (top–most) view of the editor UI.\n     *\n     * @readonly\n     * @member {module:ui/editorui/editoruiview~EditorUIView} #view\n     */\n    _this.view = view;\n\n    /**\n     * A normalized `config.toolbar` object.\n     *\n     * @private\n     * @member {Object}\n     */\n    _this._toolbarConfig = normalizeToolbarConfig(editor.config.get('toolbar'));\n\n    /**\n     * The element replacer instance used to hide the editor's source element.\n     *\n     * @protected\n     * @member {module:utils/elementreplacer~ElementReplacer}\n     */\n    _this._elementReplacer = new ElementReplacer();\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(ClassicEditorUI, _EditorUI);\n  return _createClass(ClassicEditorUI, [{\n    key: \"element\",\n    get: function get() {\n      return this.view.element;\n    }\n\n    /**\n     * Initializes the UI.\n     *\n     * @param {HTMLElement|null} replacementElement The DOM element that will be the source for the created editor.\n     */\n  }, {\n    key: \"init\",\n    value: function init(replacementElement) {\n      var editor = this.editor;\n      var view = this.view;\n      var editingView = editor.editing.view;\n      var editable = view.editable;\n      var editingRoot = editingView.document.getRoot();\n\n      // The editable UI and editing root should share the same name. Then name is used\n      // to recognize the particular editable, for instance in ARIA attributes.\n      editable.name = editingRoot.rootName;\n      view.render();\n\n      // The editable UI element in DOM is available for sure only after the editor UI view has been rendered.\n      // But it can be available earlier if a DOM element has been passed to BalloonEditor.create().\n      var editableElement = editable.element;\n\n      // Register the editable UI view in the editor. A single editor instance can aggregate multiple\n      // editable areas (roots) but the classic editor has only one.\n      this.setEditableElement(editable.name, editableElement);\n\n      // Let the global focus tracker know that the editable UI element is focusable and\n      // belongs to the editor. From now on, the focus tracker will sustain the editor focus\n      // as long as the editable is focused (e.g. the user is typing).\n      this.focusTracker.add(editableElement);\n\n      // Let the editable UI element respond to the changes in the global editor focus\n      // tracker. It has been added to the same tracker a few lines above but, in reality, there are\n      // many focusable areas in the editor, like balloons, toolbars or dropdowns and as long\n      // as they have focus, the editable should act like it is focused too (although technically\n      // it isn't), e.g. by setting the proper CSS class, visually announcing focus to the user.\n      // Doing otherwise will result in editable focus styles disappearing, once e.g. the\n      // toolbar gets focused.\n      view.editable.bind('isFocused').to(this.focusTracker);\n\n      // Bind the editable UI element to the editing view, making it an end– and entry–point\n      // of the editor's engine. This is where the engine meets the UI.\n      editingView.attachDomRoot(editableElement);\n\n      // If an element containing the initial data of the editor was provided, replace it with\n      // an editor instance's UI in DOM until the editor is destroyed. For instance, a <textarea>\n      // can be such element.\n      if (replacementElement) {\n        this._elementReplacer.replace(replacementElement, this.element);\n      }\n      this._initPlaceholder();\n      this._initToolbar();\n      this.fire('ready');\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var view = this.view;\n      var editingView = this.editor.editing.view;\n      this._elementReplacer.restore();\n      editingView.detachDomRoot(view.editable.name);\n      view.destroy();\n      _superPropGet(ClassicEditorUI, \"destroy\", this, 3)([]);\n    }\n\n    /**\n     * Initializes the editor toolbar.\n     *\n     * @private\n     */\n  }, {\n    key: \"_initToolbar\",\n    value: function _initToolbar() {\n      var editor = this.editor;\n      var view = this.view;\n      var editingView = editor.editing.view;\n\n      // Set–up the sticky panel with toolbar.\n      view.stickyPanel.bind('isActive').to(this.focusTracker, 'isFocused');\n      view.stickyPanel.limiterElement = view.element;\n      if (this._toolbarConfig.viewportTopOffset) {\n        view.stickyPanel.viewportTopOffset = this._toolbarConfig.viewportTopOffset;\n      }\n      view.toolbar.fillFromConfig(this._toolbarConfig.items, this.componentFactory);\n      enableToolbarKeyboardFocus({\n        origin: editingView,\n        originFocusTracker: this.focusTracker,\n        originKeystrokeHandler: editor.keystrokes,\n        toolbar: view.toolbar\n      });\n    }\n\n    /**\n     * Enable the placeholder text on the editing root, if any was configured.\n     *\n     * @private\n     */\n  }, {\n    key: \"_initPlaceholder\",\n    value: function _initPlaceholder() {\n      var editor = this.editor;\n      var editingView = editor.editing.view;\n      var editingRoot = editingView.document.getRoot();\n      var sourceElement = editor.sourceElement;\n      var placeholderText = editor.config.get('placeholder') || sourceElement && sourceElement.tagName.toLowerCase() === 'textarea' && sourceElement.getAttribute('placeholder');\n      if (placeholderText) {\n        enablePlaceholder({\n          view: editingView,\n          element: editingRoot,\n          text: placeholderText,\n          isDirectHost: false\n        });\n      }\n    }\n  }]);\n}(EditorUI);\nexport { ClassicEditorUI as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module editor-classic/classiceditoruiview\n */\n\nimport BoxedEditorUIView from '@ckeditor/ckeditor5-ui/src/editorui/boxed/boxededitoruiview';\nimport InlineEditableUIView from '@ckeditor/ckeditor5-ui/src/editableui/inline/inlineeditableuiview';\nimport StickyPanelView from '@ckeditor/ckeditor5-ui/src/panel/sticky/stickypanelview';\nimport ToolbarView from '@ckeditor/ckeditor5-ui/src/toolbar/toolbarview';\nimport '../theme/classiceditor.css';\n\n/**\n * Classic editor UI view. Uses an inline editable and a sticky toolbar, all\n * enclosed in a boxed UI view.\n *\n * @extends module:ui/editorui/boxed/boxededitoruiview~BoxedEditorUIView\n */\nvar ClassicEditorUIView = /*#__PURE__*/function (_BoxedEditorUIView) {\n  /**\n   * Creates an instance of the classic editor UI view.\n   *\n   * @param {module:utils/locale~Locale} locale The {@link module:core/editor/editor~Editor#locale} instance.\n   * @param {module:engine/view/view~View} editingView The editing view instance this view is related to.\n   */\n  function ClassicEditorUIView(locale, editingView) {\n    var _this;\n    _classCallCheck(this, ClassicEditorUIView);\n    _this = _callSuper(this, ClassicEditorUIView, [locale]);\n\n    /**\n     * Sticky panel view instance. This is a parent view of a {@link #toolbar}\n     * that makes toolbar sticky.\n     *\n     * @readonly\n     * @member {module:ui/panel/sticky/stickypanelview~StickyPanelView}\n     */\n    _this.stickyPanel = new StickyPanelView(locale);\n\n    /**\n     * Toolbar view instance.\n     *\n     * @readonly\n     * @member {module:ui/toolbar/toolbarview~ToolbarView}\n     */\n    _this.toolbar = new ToolbarView(locale, {\n      shouldGroupWhenFull: true\n    });\n\n    /**\n     * Editable UI view.\n     *\n     * @readonly\n     * @member {module:ui/editableui/inline/inlineeditableuiview~InlineEditableUIView}\n     */\n    _this.editable = new InlineEditableUIView(locale, editingView);\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(ClassicEditorUIView, _BoxedEditorUIView);\n  return _createClass(ClassicEditorUIView, [{\n    key: \"render\",\n    value: function render() {\n      _superPropGet(ClassicEditorUIView, \"render\", this, 3)([]);\n\n      // Set toolbar as a child of a stickyPanel and makes toolbar sticky.\n      this.stickyPanel.content.add(this.toolbar);\n      this.top.add(this.stickyPanel);\n      this.main.add(this.editable);\n    }\n  }]);\n}(BoxedEditorUIView);\nexport { ClassicEditorUIView as default };","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../postcss-loader/src/index.js??ref--16-0!./classiceditor.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"690205ae\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../postcss-loader/src/index.js??ref--16-0!./classiceditor.css\", function() {\n     var newContent = require(\"!!../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../postcss-loader/src/index.js??ref--16-0!./classiceditor.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","import _slicedToArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.string.trim.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/controller/datacontroller\n */\n\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport Mapper from '../conversion/mapper';\nimport DowncastDispatcher from '../conversion/downcastdispatcher';\nimport { insertText } from '../conversion/downcasthelpers';\nimport UpcastDispatcher from '../conversion/upcastdispatcher';\nimport { convertText, convertToModelFragment } from '../conversion/upcasthelpers';\nimport ViewDocumentFragment from '../view/documentfragment';\nimport ViewDocument from '../view/document';\nimport ViewDowncastWriter from '../view/downcastwriter';\nimport ModelRange from '../model/range';\n\n/**\n * Controller for the data pipeline. The data pipeline controls how data is retrieved from the document\n * and set inside it. Hence, the controller features two methods which allow to {@link ~DataController#get get}\n * and {@link ~DataController#set set} data of the {@link ~DataController#model model}\n * using given:\n *\n * * {@link module:engine/dataprocessor/dataprocessor~DataProcessor data processor},\n * * downcast converters,\n * * upcast converters.\n *\n * An instance of the data controller is always available in the {@link module:core/editor/editor~Editor#data `editor.data`}\n * property:\n *\n *\t\teditor.data.get( { rootName: 'customRoot' } ); // -> '<p>Hello!</p>'\n *\n * @mixes module:utils/observablemixin~ObservableMixin\n */\nvar DataController = /*#__PURE__*/function () {\n  /**\n   * Creates a data controller instance.\n   *\n   * @param {module:engine/model/model~Model} model Data model.\n   * @param {module:engine/dataprocessor/dataprocessor~DataProcessor} [dataProcessor] Data processor that should be used\n   * by the controller.\n   */\n  function DataController(model, dataProcessor) {\n    var _this = this;\n    _classCallCheck(this, DataController);\n    /**\n     * Data model.\n     *\n     * @readonly\n     * @member {module:engine/model/model~Model}\n     */\n    this.model = model;\n\n    /**\n     * Data processor used during the conversion.\n     *\n     * @readonly\n     * @member {module:engine/dataprocessor/dataprocessor~DataProcessor}\n     */\n    this.processor = dataProcessor;\n\n    /**\n     * Mapper used for the conversion. It has no permanent bindings, because they are created when getting data and\n     * cleared directly after the data are converted. However, the mapper is defined as a class property, because\n     * it needs to be passed to the `DowncastDispatcher` as a conversion API.\n     *\n     * @readonly\n     * @member {module:engine/conversion/mapper~Mapper}\n     */\n    this.mapper = new Mapper();\n\n    /**\n     * Downcast dispatcher used by the {@link #get get method}. Downcast converters should be attached to it.\n     *\n     * @readonly\n     * @member {module:engine/conversion/downcastdispatcher~DowncastDispatcher}\n     */\n    this.downcastDispatcher = new DowncastDispatcher({\n      mapper: this.mapper\n    });\n    this.downcastDispatcher.on('insert:$text', insertText(), {\n      priority: 'lowest'\n    });\n\n    /**\n     * Upcast dispatcher used by the {@link #set set method}. Upcast converters should be attached to it.\n     *\n     * @readonly\n     * @member {module:engine/conversion/upcastdispatcher~UpcastDispatcher}\n     */\n    this.upcastDispatcher = new UpcastDispatcher({\n      schema: model.schema\n    });\n\n    // Define default converters for text and elements.\n    //\n    // Note that if there is no default converter for the element it will be skipped, for instance `<b>foo</b>` will be\n    // converted to nothing. We add `convertToModelFragment` as a last converter so it converts children of that\n    // element to the document fragment so `<b>foo</b>` will be converted to `foo` if there is no converter for `<b>`.\n    this.upcastDispatcher.on('text', convertText(), {\n      priority: 'lowest'\n    });\n    this.upcastDispatcher.on('element', convertToModelFragment(), {\n      priority: 'lowest'\n    });\n    this.upcastDispatcher.on('documentFragment', convertToModelFragment(), {\n      priority: 'lowest'\n    });\n    this.decorate('init');\n\n    // Fire `ready` event when initialisation has completed. Such low level listener gives possibility\n    // to plug into initialisation pipeline without interrupting the initialisation flow.\n    this.on('init', function () {\n      _this.fire('ready');\n    }, {\n      priority: 'lowest'\n    });\n  }\n\n  /**\n   * Returns the model's data converted by downcast dispatchers attached to {@link #downcastDispatcher} and\n   * formatted by the {@link #processor data processor}.\n   *\n   * @param {Object} [options]\n   * @param {String} [options.rootName='main'] Root name.\n   * @param {String} [options.trim='empty'] Whether returned data should be trimmed. This option is set to `empty` by default,\n   * which means whenever editor content is considered empty, an empty string will be returned. To turn off trimming completely\n   * use `'none'`. In such cases exact content will be returned (for example `<p>&nbsp;</p>` for an empty editor).\n   * @returns {String} Output data.\n   */\n  return _createClass(DataController, [{\n    key: \"get\",\n    value: function get(options) {\n      var _ref = options || {},\n        _ref$rootName = _ref.rootName,\n        rootName = _ref$rootName === void 0 ? 'main' : _ref$rootName,\n        _ref$trim = _ref.trim,\n        trim = _ref$trim === void 0 ? 'empty' : _ref$trim;\n      if (!this._checkIfRootsExists([rootName])) {\n        /**\n         * Cannot get data from a non-existing root. This error is thrown when {@link #get DataController#get() method}\n         * is called with non-existent root name. For example, if there is an editor instance with only `main` root,\n         * calling {@link #get} like:\n         *\n         *\t\tdata.get( { rootName: 'root2' } );\n         *\n         * will throw this error.\n         *\n         * @error datacontroller-get-non-existent-root\n         */\n        throw new CKEditorError('datacontroller-get-non-existent-root: Attempting to get data from a non-existing root.', this);\n      }\n      var root = this.model.document.getRoot(rootName);\n      if (trim === 'empty' && !this.model.hasContent(root, {\n        ignoreWhitespaces: true\n      })) {\n        return '';\n      }\n      return this.stringify(root);\n    }\n\n    /**\n     * Returns the content of the given {@link module:engine/model/element~Element model's element} or\n     * {@link module:engine/model/documentfragment~DocumentFragment model document fragment} converted by the downcast converters\n     * attached to {@link #downcastDispatcher} and formatted by the {@link #processor data processor}.\n     *\n     * @param {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment} modelElementOrFragment\n     * Element whose content will be stringified.\n     * @returns {String} Output data.\n     */\n  }, {\n    key: \"stringify\",\n    value: function stringify(modelElementOrFragment) {\n      // Model -> view.\n      var viewDocumentFragment = this.toView(modelElementOrFragment);\n\n      // View -> data.\n      return this.processor.toData(viewDocumentFragment);\n    }\n\n    /**\n     * Returns the content of the given {@link module:engine/model/element~Element model element} or\n     * {@link module:engine/model/documentfragment~DocumentFragment model document fragment} converted by the downcast\n     * converters attached to {@link #downcastDispatcher} to a\n     * {@link module:engine/view/documentfragment~DocumentFragment view document fragment}.\n     *\n     * @param {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment} modelElementOrFragment\n     * Element or document fragment whose content will be converted.\n     * @returns {module:engine/view/documentfragment~DocumentFragment} Output view DocumentFragment.\n     */\n  }, {\n    key: \"toView\",\n    value: function toView(modelElementOrFragment) {\n      // Clear bindings so the call to this method gives correct results.\n      this.mapper.clearBindings();\n\n      // First, convert elements.\n      var modelRange = ModelRange._createIn(modelElementOrFragment);\n      var viewDocumentFragment = new ViewDocumentFragment();\n\n      // Create separate ViewDowncastWriter just for data conversion purposes.\n      // We have no view controller and rendering do DOM in DataController so view.change() block is not used here.\n      var viewWriter = new ViewDowncastWriter(new ViewDocument());\n      this.mapper.bindElements(modelElementOrFragment, viewDocumentFragment);\n      this.downcastDispatcher.convertInsert(modelRange, viewWriter);\n      if (!modelElementOrFragment.is('documentFragment')) {\n        // Then, if a document element is converted, convert markers.\n        // From all document markers, get those, which \"intersect\" with the converter element.\n        var markers = _getMarkersRelativeToElement(modelElementOrFragment);\n        var _iterator = _createForOfIteratorHelper(markers),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var _step$value = _slicedToArray(_step.value, 2),\n              name = _step$value[0],\n              range = _step$value[1];\n            this.downcastDispatcher.convertMarkerAdd(name, range, viewWriter);\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      }\n      return viewDocumentFragment;\n    }\n\n    /**\n     * Sets initial input data parsed by the {@link #processor data processor} and\n     * converted by the {@link #upcastDispatcher view-to-model converters}.\n     * Initial data can be set only to document that {@link module:engine/model/document~Document#version} is equal 0.\n     *\n     * **Note** This method is {@link module:utils/observablemixin~ObservableMixin#decorate decorated} which is\n     * used by e.g. collaborative editing plugin that syncs remote data on init.\n     *\n     * When data is passed as a string it is initialized on a default `main` root:\n     *\n     *\t\tdataController.init( '<p>Foo</p>' ); // Initializes data on the `main` root.\n     *\n     * To initialize data on a different root or multiple roots at once, object containing `rootName` - `data` pairs should be passed:\n     *\n     *\t\tdataController.init( { main: '<p>Foo</p>', title: '<h1>Bar</h1>' } ); // Initializes data on the `main` and `title` roots.\n     *\n     * @fires init\n     * @param {String|Object.<String,String>} data Input data as a string or an object containing `rootName` - `data`\n     * pairs to initialize data on multiple roots at once.\n     * @returns {Promise} Promise that is resolved after the data is set on the editor.\n     */\n  }, {\n    key: \"init\",\n    value: function init(data) {\n      var _this2 = this;\n      if (this.model.document.version) {\n        /**\n         * Cannot set initial data to not empty {@link module:engine/model/document~Document}.\n         * Initial data should be set once, during {@link module:core/editor/editor~Editor} initialization,\n         * when the {@link module:engine/model/document~Document#version} is equal 0.\n         *\n         * @error datacontroller-init-document-not-empty\n         */\n        throw new CKEditorError('datacontroller-init-document-not-empty: Trying to set initial data to not empty document.', this);\n      }\n      var initialData = {};\n      if (typeof data === 'string') {\n        initialData.main = data; // Default root is 'main'. To initiate data on a different root, object should be passed.\n      } else {\n        initialData = data;\n      }\n      if (!this._checkIfRootsExists(Object.keys(initialData))) {\n        /**\n         * Cannot init data on a non-existing root. This error is thrown when {@link #init DataController#init() method}\n         * is called with non-existent root name. For example, if there is an editor instance with only `main` root,\n         * calling {@link #init} like:\n         *\n         * \t\tdata.init( { main: '<p>Foo</p>', root2: '<p>Bar</p>' } );\n         *\n         * will throw this error.\n         *\n         * @error datacontroller-init-non-existent-root\n         */\n        throw new CKEditorError('datacontroller-init-non-existent-root: Attempting to init data on a non-existing root.', this);\n      }\n      this.model.enqueueChange('transparent', function (writer) {\n        for (var _i = 0, _Object$keys = Object.keys(initialData); _i < _Object$keys.length; _i++) {\n          var rootName = _Object$keys[_i];\n          var modelRoot = _this2.model.document.getRoot(rootName);\n          writer.insert(_this2.parse(initialData[rootName], modelRoot), modelRoot, 0);\n        }\n      });\n      return Promise.resolve();\n    }\n\n    /**\n     * Sets input data parsed by the {@link #processor data processor} and\n     * converted by the {@link #upcastDispatcher view-to-model converters}.\n     * This method can be used any time to replace existing editor data by the new one without clearing the\n     * {@link module:engine/model/document~Document#history document history}.\n     *\n     * This method also creates a batch with all the changes applied. If all you need is to parse data, use\n     * the {@link #parse} method.\n     *\n     * When data is passed as a string it is set on a default `main` root:\n     *\n     *\t\tdataController.set( '<p>Foo</p>' ); // Sets data on the `main` root.\n     *\n     * To set data on a different root or multiple roots at once, object containing `rootName` - `data` pairs should be passed:\n     *\n     *\t\tdataController.set( { main: '<p>Foo</p>', title: '<h1>Bar</h1>' } ); // Sets data on the `main` and `title` roots.\n     *\n     * @param {String|Object.<String,String>} data Input data as a string or an object containing `rootName` - `data`\n     * pairs to set data on multiple roots at once.\n     */\n  }, {\n    key: \"set\",\n    value: function set(data) {\n      var _this3 = this;\n      var newData = {};\n      if (typeof data === 'string') {\n        newData.main = data; // Default root is 'main'. To set data on a different root, object should be passed.\n      } else {\n        newData = data;\n      }\n      if (!this._checkIfRootsExists(Object.keys(newData))) {\n        /**\n         * Cannot set data on a non-existing root. This error is thrown when {@link #set DataController#set() method}\n         * is called with non-existent root name. For example, if there is an editor instance with only `main` root,\n         * calling {@link #set} like:\n         *\n         * \t\tdata.set( { main: '<p>Foo</p>', root2: '<p>Bar</p>' } );\n         *\n         * will throw this error.\n         *\n         * @error datacontroller-set-non-existent-root\n         */\n        throw new CKEditorError('datacontroller-set-non-existent-root: Attempting to set data on a non-existing root.', this);\n      }\n      this.model.enqueueChange('transparent', function (writer) {\n        writer.setSelection(null);\n        writer.removeSelectionAttribute(_this3.model.document.selection.getAttributeKeys());\n        for (var _i2 = 0, _Object$keys2 = Object.keys(newData); _i2 < _Object$keys2.length; _i2++) {\n          var rootName = _Object$keys2[_i2];\n          // Save to model.\n          var modelRoot = _this3.model.document.getRoot(rootName);\n          writer.remove(writer.createRangeIn(modelRoot));\n          writer.insert(_this3.parse(newData[rootName], modelRoot), modelRoot, 0);\n        }\n      });\n    }\n\n    /**\n     * Returns the data parsed by the {@link #processor data processor} and then converted by upcast converters\n     * attached to the {@link #upcastDispatcher}.\n     *\n     * @see #set\n     * @param {String} data Data to parse.\n     * @param {module:engine/model/schema~SchemaContextDefinition} [context='$root'] Base context in which the view will\n     * be converted to the model. See: {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher#convert}.\n     * @returns {module:engine/model/documentfragment~DocumentFragment} Parsed data.\n     */\n  }, {\n    key: \"parse\",\n    value: function parse(data) {\n      var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '$root';\n      // data -> view\n      var viewDocumentFragment = this.processor.toView(data);\n\n      // view -> model\n      return this.toModel(viewDocumentFragment, context);\n    }\n\n    /**\n     * Returns the result of the given {@link module:engine/view/element~Element view element} or\n     * {@link module:engine/view/documentfragment~DocumentFragment view document fragment} converted by the\n     * {@link #upcastDispatcher view-to-model converters}, wrapped by {@link module:engine/model/documentfragment~DocumentFragment}.\n     *\n     * When marker elements were converted during the conversion process, it will be set as a document fragment's\n     * {@link module:engine/model/documentfragment~DocumentFragment#markers static markers map}.\n     *\n     * @param {module:engine/view/element~Element|module:engine/view/documentfragment~DocumentFragment} viewElementOrFragment\n     * Element or document fragment whose content will be converted.\n     * @param {module:engine/model/schema~SchemaContextDefinition} [context='$root'] Base context in which the view will\n     * be converted to the model. See: {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher#convert}.\n     * @returns {module:engine/model/documentfragment~DocumentFragment} Output document fragment.\n     */\n  }, {\n    key: \"toModel\",\n    value: function toModel(viewElementOrFragment) {\n      var _this4 = this;\n      var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '$root';\n      return this.model.change(function (writer) {\n        return _this4.upcastDispatcher.convert(viewElementOrFragment, writer, context);\n      });\n    }\n\n    /**\n     * Removes all event listeners set by the DataController.\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.stopListening();\n    }\n\n    /**\n     * Checks if all provided root names are existing editor roots.\n     *\n     * @private\n     * @param {Array.<String>} rootNames Root names to check.\n     * @returns {Boolean} Whether all provided root names are existing editor roots.\n     */\n  }, {\n    key: \"_checkIfRootsExists\",\n    value: function _checkIfRootsExists(rootNames) {\n      var _iterator2 = _createForOfIteratorHelper(rootNames),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var rootName = _step2.value;\n          if (!this.model.document.getRootNames().includes(rootName)) {\n            return false;\n          }\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      return true;\n    }\n\n    /**\n     * Event fired once data initialisation has finished.\n     *\n     * @event ready\n     */\n\n    /**\n     * Event fired after {@link #init init() method} has been run. It can be {@link #listenTo listened to} to adjust/modify\n     * the initialisation flow. However, if the `init` event is stopped or prevented, the {@link #event:ready ready event}\n     * should be fired manually.\n     *\n     * The `init` event is fired by decorated {@link #init} method.\n     * See {@link module:utils/observablemixin~ObservableMixin#decorate} for more information and samples.\n     *\n     * @event init\n     */\n  }]);\n}();\nexport { DataController as default };\nmix(DataController, ObservableMixin);\n\n// Helper function for downcast conversion.\n//\n// Takes a document element (element that is added to a model document) and checks which markers are inside it\n// and which markers are containing it. If the marker is intersecting with element, the intersection is returned.\nfunction _getMarkersRelativeToElement(element) {\n  var result = [];\n  var doc = element.root.document;\n  if (!doc) {\n    return [];\n  }\n  var elementRange = ModelRange._createIn(element);\n  var _iterator3 = _createForOfIteratorHelper(doc.model.markers),\n    _step3;\n  try {\n    for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n      var marker = _step3.value;\n      var intersection = elementRange.getIntersection(marker.getRange());\n      if (intersection) {\n        result.push([marker.name, intersection]);\n      }\n    }\n  } catch (err) {\n    _iterator3.e(err);\n  } finally {\n    _iterator3.f();\n  }\n  return result;\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.function.name.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/controller/editingcontroller\n */\n\nimport RootEditableElement from '../view/rooteditableelement';\nimport View from '../view/view';\nimport Mapper from '../conversion/mapper';\nimport DowncastDispatcher from '../conversion/downcastdispatcher';\nimport { clearAttributes, convertCollapsedSelection, convertRangeSelection, insertText, remove } from '../conversion/downcasthelpers';\nimport ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport { convertSelectionChange } from '../conversion/upcasthelpers';\n\n/**\n * Controller for the editing pipeline. The editing pipeline controls {@link ~EditingController#model model} rendering,\n * including selection handling. It also creates the {@link ~EditingController#view view} which builds a\n * browser-independent virtualization over the DOM elements. The editing controller also attaches default converters.\n *\n * @mixes module:utils/observablemixin~ObservableMixin\n */\nvar EditingController = /*#__PURE__*/function () {\n  /**\n   * Creates an editing controller instance.\n   *\n   * @param {module:engine/model/model~Model} model Editing model.\n   */\n  function EditingController(model) {\n    var _this = this;\n    _classCallCheck(this, EditingController);\n    /**\n     * Editor model.\n     *\n     * @readonly\n     * @member {module:engine/model/model~Model}\n     */\n    this.model = model;\n\n    /**\n     * Editing view controller.\n     *\n     * @readonly\n     * @member {module:engine/view/view~View}\n     */\n    this.view = new View();\n\n    /**\n     * Mapper which describes the model-view binding.\n     *\n     * @readonly\n     * @member {module:engine/conversion/mapper~Mapper}\n     */\n    this.mapper = new Mapper();\n\n    /**\n     * Downcast dispatcher that converts changes from the model to {@link #view the editing view}.\n     *\n     * @readonly\n     * @member {module:engine/conversion/downcastdispatcher~DowncastDispatcher} #downcastDispatcher\n     */\n    this.downcastDispatcher = new DowncastDispatcher({\n      mapper: this.mapper\n    });\n    var doc = this.model.document;\n    var selection = doc.selection;\n    var markers = this.model.markers;\n\n    // When plugins listen on model changes (on selection change, post fixers, etc) and change the view as a result of\n    // model's change, they might trigger view rendering before the conversion is completed (e.g. before the selection\n    // is converted). We disable rendering for the length of the outermost model change() block to prevent that.\n    //\n    // See  https://github.com/ckeditor/ckeditor5-engine/issues/1528\n    this.listenTo(this.model, '_beforeChanges', function () {\n      _this.view._disableRendering(true);\n    }, {\n      priority: 'highest'\n    });\n    this.listenTo(this.model, '_afterChanges', function () {\n      _this.view._disableRendering(false);\n    }, {\n      priority: 'lowest'\n    });\n\n    // Whenever model document is changed, convert those changes to the view (using model.Document#differ).\n    // Do it on 'low' priority, so changes are converted after other listeners did their job.\n    // Also convert model selection.\n    this.listenTo(doc, 'change', function () {\n      _this.view.change(function (writer) {\n        _this.downcastDispatcher.convertChanges(doc.differ, markers, writer);\n        _this.downcastDispatcher.convertSelection(selection, markers, writer);\n      });\n    }, {\n      priority: 'low'\n    });\n\n    // Convert selection from the view to the model when it changes in the view.\n    this.listenTo(this.view.document, 'selectionChange', convertSelectionChange(this.model, this.mapper));\n\n    // Attach default model converters.\n    this.downcastDispatcher.on('insert:$text', insertText(), {\n      priority: 'lowest'\n    });\n    this.downcastDispatcher.on('remove', remove(), {\n      priority: 'low'\n    });\n\n    // Attach default model selection converters.\n    this.downcastDispatcher.on('selection', clearAttributes(), {\n      priority: 'low'\n    });\n    this.downcastDispatcher.on('selection', convertRangeSelection(), {\n      priority: 'low'\n    });\n    this.downcastDispatcher.on('selection', convertCollapsedSelection(), {\n      priority: 'low'\n    });\n\n    // Binds {@link module:engine/view/document~Document#roots view roots collection} to\n    // {@link module:engine/model/document~Document#roots model roots collection} so creating\n    // model root automatically creates corresponding view root.\n    this.view.document.roots.bindTo(this.model.document.roots).using(function (root) {\n      // $graveyard is a special root that has no reflection in the view.\n      if (root.rootName == '$graveyard') {\n        return null;\n      }\n      var viewRoot = new RootEditableElement(root.name);\n      viewRoot.rootName = root.rootName;\n      viewRoot._document = _this.view.document;\n      _this.mapper.bindElements(root, viewRoot);\n      return viewRoot;\n    });\n  }\n\n  /**\n   * Removes all event listeners attached to the `EditingController`. Destroys all objects created\n   * by `EditingController` that need to be destroyed.\n   */\n  return _createClass(EditingController, [{\n    key: \"destroy\",\n    value: function destroy() {\n      this.view.destroy();\n      this.stopListening();\n    }\n  }]);\n}();\nexport { EditingController as default };\nmix(EditingController, ObservableMixin);","import _regeneratorValues from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regeneratorValues.js\";\nimport _regenerator from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regenerator.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nvar _marked = /*#__PURE__*/_regenerator().m(_getAllUpcastDefinitions),\n  _marked2 = /*#__PURE__*/_regenerator().m(_getUpcastDefinition);\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/conversion/conversion\n */\n\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport UpcastHelpers from './upcasthelpers';\nimport DowncastHelpers from './downcasthelpers';\n\n/**\n * A utility class that helps add converters to upcast and downcast dispatchers.\n *\n * We recommend reading the {@glink framework/guides/architecture/editing-engine Editing engine architecture} guide first to\n * understand the core concepts of the conversion mechanisms.\n *\n * An instance of the conversion manager is available in the\n * {@link module:core/editor/editor~Editor#conversion `editor.conversion`} property\n * and by default has the following groups of dispatchers (i.e. directions of conversion):\n *\n * * `downcast` (editing and data downcasts)\n * * `editingDowncast`\n * * `dataDowncast`\n * * `upcast`\n *\n * # One-way converters\n *\n * To add a converter to a specific group, use the {@link module:engine/conversion/conversion~Conversion#for `for()`}\n * method:\n *\n *\t\t// Add a converter to editing downcast and data downcast.\n *\t\teditor.conversion.for( 'downcast' ).elementToElement( config ) );\n *\n *\t\t// Add a converter to the data pipepline only:\n *\t\teditor.conversion.for( 'dataDowncast' ).elementToElement( dataConversionConfig ) );\n *\n *\t\t// And a slightly different one for the editing pipeline:\n *\t\teditor.conversion.for( 'editingDowncast' ).elementToElement( editingConversionConfig ) );\n *\n * See {@link module:engine/conversion/conversion~Conversion#for `for()`} method documentation to learn more about\n * available conversion helpers and how to use your custom ones.\n *\n * # Two-way converters\n *\n * Besides using one-way converters via the `for()` method, you can also use other methods available in this\n * class to add two-way converters (upcast and downcast):\n *\n * * {@link module:engine/conversion/conversion~Conversion#elementToElement `elementToElement()`} &ndash;\n * Model element to view element and vice versa.\n * * {@link module:engine/conversion/conversion~Conversion#attributeToElement `attributeToElement()`} &ndash;\n * Model attribute to view element and vice versa.\n * * {@link module:engine/conversion/conversion~Conversion#attributeToAttribute `attributeToAttribute()`} &ndash;\n * Model attribute to view element and vice versa.\n */\nvar Conversion = /*#__PURE__*/function () {\n  /**\n   * Creates a new conversion instance.\n   *\n   * @param {module:engine/conversion/downcastdispatcher~DowncastDispatcher|\n   * Array.<module:engine/conversion/downcastdispatcher~DowncastDispatcher>} downcastDispatchers\n   * @param {module:engine/conversion/upcastdispatcher~UpcastDispatcher|\n   * Array.<module:engine/conversion/upcastdispatcher~UpcastDispatcher>} upcastDispatchers\n   */\n  function Conversion(downcastDispatchers, upcastDispatchers) {\n    _classCallCheck(this, Conversion);\n    /**\n     * Maps dispatchers group name to ConversionHelpers instances.\n     *\n     * @private\n     * @member {Map.<String,module:engine/conversion/conversionhelpers~ConversionHelpers>}\n     */\n    this._helpers = new Map();\n\n    // Define default 'downcast' & 'upcast' dispatchers groups. Those groups are always available as two-way converters needs them.\n    this._downcast = Array.isArray(downcastDispatchers) ? downcastDispatchers : [downcastDispatchers];\n    this._createConversionHelpers({\n      name: 'downcast',\n      dispatchers: this._downcast,\n      isDowncast: true\n    });\n    this._upcast = Array.isArray(upcastDispatchers) ? upcastDispatchers : [upcastDispatchers];\n    this._createConversionHelpers({\n      name: 'upcast',\n      dispatchers: this._upcast,\n      isDowncast: false\n    });\n  }\n\n  /**\n   * Define an alias for registered dispatcher.\n   *\n   *\t\tconst conversion = new Conversion(\n   *\t\t\t[ dataDowncastDispatcher, editingDowncastDispatcher ],\n   *\t\t\tupcastDispatcher\n   *\t\t);\n   *\n   *\t\tconversion.addAlias( 'dataDowncast', dataDowncastDispatcher );\n   *\n   * @param {String} alias An alias of a dispatcher.\n   * @param {module:engine/conversion/downcastdispatcher~DowncastDispatcher|\n   * module:engine/conversion/upcastdispatcher~UpcastDispatcher} dispatcher Dispatcher which should have an alias.\n   */\n  return _createClass(Conversion, [{\n    key: \"addAlias\",\n    value: function addAlias(alias, dispatcher) {\n      var isDowncast = this._downcast.includes(dispatcher);\n      var isUpcast = this._upcast.includes(dispatcher);\n      if (!isUpcast && !isDowncast) {\n        /**\n         * Trying to register and alias for a dispatcher that nas not been registered.\n         *\n         * @error conversion-add-alias-dispatcher-not-registered\n         */\n        throw new CKEditorError('conversion-add-alias-dispatcher-not-registered: ' + 'Trying to register and alias for a dispatcher that nas not been registered.', this);\n      }\n      this._createConversionHelpers({\n        name: alias,\n        dispatchers: [dispatcher],\n        isDowncast: isDowncast\n      });\n    }\n\n    /**\n     * Provides a chainable API to assign converters to conversion dispatchers group.\n     *\n     * If the given group name has not been registered, the\n     * {@link module:utils/ckeditorerror~CKEditorError `conversion-for-unknown-group` error} is thrown.\n     *\n     * You can use conversion helpers available directly in the `for()` chain or your custom ones via\n     * the {@link module:engine/conversion/conversionhelpers~ConversionHelpers#add `add()`} method.\n     *\n     * # Using bulit-in conversion helpers\n     *\n     * The `for()` chain comes with a set of conversion helpers which you can use like this:\n     *\n     *\t\teditor.conversion.for( 'downcast' )\n     *\t\t\t.elementToElement( config1 )        // Adds an element-to-element downcast converter.\n     *\t\t\t.attributeToElement( config2 );     // Adds an attribute-to-element downcast converter.\n     *\n     *\t\teditor.conversion.for( 'upcast' )\n     *\t\t\t.elementToAttribute( config3 );     // Adds an element-to-attribute upcast converter.\n     *\n     * Refer to the documentation of built-in conversion helpers to learn about their configuration options.\n     *\n     * * downcast (model-to-view) conversion helpers:\n     *\n     *\t* {@link module:engine/conversion/downcasthelpers~DowncastHelpers#elementToElement `elementToElement()`},\n     *\t* {@link module:engine/conversion/downcasthelpers~DowncastHelpers#attributeToElement `attributeToElement()`},\n     *\t* {@link module:engine/conversion/downcasthelpers~DowncastHelpers#attributeToAttribute `attributeToAttribute()`}.\n     *\t* {@link module:engine/conversion/downcasthelpers~DowncastHelpers#markerToElement `markerToElement()`}.\n     *\t* {@link module:engine/conversion/downcasthelpers~DowncastHelpers#markerToHighlight `markerToHighlight()`}.\n     *\n     * * upcast (view-to-model) conversion helpers:\n     *\n     *\t* {@link module:engine/conversion/upcasthelpers~UpcastHelpers#elementToElement `elementToElement()`},\n     *\t* {@link module:engine/conversion/upcasthelpers~UpcastHelpers#elementToAttribute `elementToAttribute()`},\n     *\t* {@link module:engine/conversion/upcasthelpers~UpcastHelpers#attributeToAttribute `attributeToAttribute()`}.\n     *\t* {@link module:engine/conversion/upcasthelpers~UpcastHelpers#elementToMarker `elementToMarker()`}.\n     *\n     * # Using custom conversion helpers\n     *\n     * If you need to implement a nontypical converter, you can do so by calling:\n     *\n     *\t\teditor.conversion.for( direction ).add( customHelper );\n     *\n     * The `.add()` method takes exactly one parameter, which is a function. This function should accept one parameter that\n     * is a dispatcher instance. The function should add an actual converter to the passed dispatcher instance.\n     *\n     * Example:\n     *\n     *\t\teditor.conversion.for( 'upcast' ).add( dispatcher => {\n     *\t\t\tdispatcher.on( 'element:a',  ( evt, data, conversionApi ) => {\n     *\t\t\t\t// Do something with a view <a> element.\n     *\t\t\t} );\n     *\t\t} );\n     *\n     * Refer to the documentation of {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher}\n     * and {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher} to learn how to write\n     * custom converters.\n     *\n     * @param {String} groupName The name of dispatchers group to add the converters to.\n     * @returns {module:engine/conversion/downcasthelpers~DowncastHelpers|module:engine/conversion/upcasthelpers~UpcastHelpers}\n     */\n  }, {\n    key: \"for\",\n    value: function _for(groupName) {\n      if (!this._helpers.has(groupName)) {\n        /**\n         * Trying to add a converter to an unknown dispatchers group.\n         *\n         * @error conversion-for-unknown-group\n         */\n        throw new CKEditorError('conversion-for-unknown-group: Trying to add a converter to an unknown dispatchers group.', this);\n      }\n      return this._helpers.get(groupName);\n    }\n\n    /**\n     * Sets up converters between the model and the view that convert a model element to a view element (and vice versa).\n     * For example, the model `<paragraph>Foo</paragraph>` is `<p>Foo</p>` in the view.\n     *\n     *\t\t// A simple conversion from the `paragraph` model element to the `<p>` view element (and vice versa).\n     *\t\teditor.conversion.elementToElement( { model: 'paragraph', view: 'p' } );\n     *\n     *\t\t// Override other converters by specifying a converter definition with a higher priority.\n     *\t\teditor.conversion.elementToElement( { model: 'paragraph', view: 'div', converterPriority: 'high' } );\n     *\n     *\t\t// View specified as an object instead of a string.\n     *\t\teditor.conversion.elementToElement( {\n     *\t\t\tmodel: 'fancyParagraph',\n     *\t\t\tview: {\n     *\t\t\t\tname: 'p',\n     *\t\t\t\tclasses: 'fancy'\n     *\t\t\t}\n     *\t\t} );\n     *\n     *\t\t// Use `upcastAlso` to define other view elements that should also be converted to a `paragraph` element.\n     *\t\teditor.conversion.elementToElement( {\n     *\t\t\tmodel: 'paragraph',\n     *\t\t\tview: 'p',\n     *\t\t\tupcastAlso: [\n     *\t\t\t\t'div',\n     *\t\t\t\t{\n     *\t\t\t\t\t// Any element with the `display: block` style.\n     *\t\t\t\t\tstyles: {\n     *\t\t\t\t\t\tdisplay: 'block'\n     *\t\t\t\t\t}\n     *\t\t\t\t}\n     *\t\t\t]\n     *\t\t} );\n     *\n     *\t\t// `upcastAlso` set as callback enables a conversion of a wide range of different view elements.\n     *\t\teditor.conversion.elementToElement( {\n     *\t\t\tmodel: 'heading',\n     *\t\t\tview: 'h2',\n     *\t\t\t// Convert \"headling-like\" paragraphs to headings.\n     *\t\t\tupcastAlso: viewElement => {\n     *\t\t\t\tconst fontSize = viewElement.getStyle( 'font-size' );\n     *\n     *\t\t\t\tif ( !fontSize ) {\n     *\t\t\t\t\treturn null;\n     *\t\t\t\t}\n     *\n     *\t\t\t\tconst match = fontSize.match( /(\\d+)\\s*px/ );\n     *\n     *\t\t\t\tif ( !match ) {\n     *\t\t\t\t\treturn null;\n     *\t\t\t\t}\n     *\n     *\t\t\t\tconst size = Number( match[ 1 ] );\n     *\n     *\t\t\t\tif ( size > 26 ) {\n     *\t\t\t\t\t// Returned value can be an object with the matched properties.\n     *\t\t\t\t\t// These properties will be \"consumed\" during the conversion.\n     *\t\t\t\t\t// See `engine.view.Matcher~MatcherPattern` and `engine.view.Matcher#match` for more details.\n     *\n     *\t\t\t\t\treturn { name: true, styles: [ 'font-size' ] };\n     *\t\t\t\t}\n     *\n     *\t\t\t\treturn null;\n     *\t\t\t}\n     *\t\t} );\n     *\n     * `definition.model` is a `String` with a model element name to convert from or to.\n     * See {@link module:engine/conversion/conversion~ConverterDefinition} to learn about other parameters.\n     *\n     * @param {module:engine/conversion/conversion~ConverterDefinition} definition The converter definition.\n     */\n  }, {\n    key: \"elementToElement\",\n    value: function elementToElement(definition) {\n      // Set up downcast converter.\n      this.for('downcast').elementToElement(definition);\n\n      // Set up upcast converter.\n      var _iterator = _createForOfIteratorHelper(_getAllUpcastDefinitions(definition)),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var _step$value = _step.value,\n            model = _step$value.model,\n            view = _step$value.view;\n          this.for('upcast').elementToElement({\n            model: model,\n            view: view,\n            converterPriority: definition.converterPriority\n          });\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n\n    /**\n     * Sets up converters between the model and the view that convert a model attribute to a view element (and vice versa).\n     * For example, a model text node with `\"Foo\"` as data and the `bold` attribute is `<strong>Foo</strong>` in the view.\n     *\n     *\t\t// A simple conversion from the `bold=true` attribute to the `<strong>` view element (and vice versa).\n     *\t\teditor.conversion.attributeToElement( { model: 'bold', view: 'strong' } );\n     *\n     *\t\t// Override other converters by specifying a converter definition with a higher priority.\n     *\t\teditor.conversion.attributeToElement( { model: 'bold', view: 'b', converterPriority: 'high' } );\n     *\n     *\t\t// View specified as an object instead of a string.\n     *\t\teditor.conversion.attributeToElement( {\n     *\t\t\tmodel: 'bold',\n     *\t\t\tview: {\n     *\t\t\t\tname: 'span',\n     *\t\t\t\tclasses: 'bold'\n     *\t\t\t}\n     *\t\t} );\n     *\n     *\t\t// Use `config.model.name` to define the conversion only from a given node type, `$text` in this case.\n     *\t\t// The same attribute on different elements may then be handled by a different converter.\n     *\t\teditor.conversion.attributeToElement( {\n     *\t\t\tmodel: {\n     *\t\t\t\tkey: 'textDecoration',\n     *\t\t\t\tvalues: [ 'underline', 'lineThrough' ],\n     *\t\t\t\tname: '$text'\n     *\t\t\t},\n     *\t\t\tview: {\n     *\t\t\t\tunderline: {\n     *\t\t\t\t\tname: 'span',\n     *\t\t\t\t\tstyles: {\n     *\t\t\t\t\t\t'text-decoration': 'underline'\n     *\t\t\t\t\t}\n     *\t\t\t\t},\n     *\t\t\t\tlineThrough: {\n     *\t\t\t\t\tname: 'span',\n     *\t\t\t\t\tstyles: {\n     *\t\t\t\t\t\t'text-decoration': 'line-through'\n     *\t\t\t\t\t}\n     *\t\t\t\t}\n     *\t\t\t}\n     *\t\t} );\n     *\n     *\t\t// Use `upcastAlso` to define other view elements that should also be converted to the `bold` attribute.\n     *\t\teditor.conversion.attributeToElement( {\n     *\t\t\tmodel: 'bold',\n     *\t\t\tview: 'strong',\n     *\t\t\tupcastAlso: [\n     *\t\t\t\t'b',\n     *\t\t\t\t{\n     *\t\t\t\t\tname: 'span',\n     *\t\t\t\t\tclasses: 'bold'\n     *\t\t\t\t},\n     *\t\t\t\t{\n     *\t\t\t\t\tname: 'span',\n     *\t\t\t\t\tstyles: {\n     *\t\t\t\t\t\t'font-weight': 'bold'\n     *\t\t\t\t\t}\n     *\t\t\t\t},\n     *\t\t\t\tviewElement => {\n     *\t\t\t\t\tconst fontWeight = viewElement.getStyle( 'font-weight' );\n     *\n     *\t\t\t\t\tif ( viewElement.is( 'span' ) && fontWeight && /\\d+/.test() && Number( fontWeight ) > 500 ) {\n     *\t\t\t\t\t\t// Returned value can be an object with the matched properties.\n     *\t\t\t\t\t\t// These properties will be \"consumed\" during the conversion.\n     *\t\t\t\t\t\t// See `engine.view.Matcher~MatcherPattern` and `engine.view.Matcher#match` for more details.\n     *\n     *\t\t\t\t\t\treturn {\n     *\t\t\t\t\t\t\tname: true,\n     *\t\t\t\t\t\t\tstyles: [ 'font-weight' ]\n     *\t\t\t\t\t\t};\n     *\t\t\t\t\t}\n     *\t\t\t\t}\n     *\t\t\t]\n     *\t\t} );\n     *\n     *\t\t// Conversion from and to a model attribute key whose value is an enum (`fontSize=big|small`).\n     *\t\t// `upcastAlso` set as callback enables a conversion of a wide range of different view elements.\n     *\t\teditor.conversion.attributeToElement( {\n     *\t\t\tmodel: {\n     *\t\t\t\tkey: 'fontSize',\n     *\t\t\t\tvalues: [ 'big', 'small' ]\n     *\t\t\t},\n     *\t\t\tview: {\n     *\t\t\t\tbig: {\n     *\t\t\t\t\tname: 'span',\n     *\t\t\t\t\tstyles: {\n     *\t\t\t\t\t\t'font-size': '1.2em'\n     *\t\t\t\t\t}\n     *\t\t\t\t},\n     *\t\t\t\tsmall: {\n     *\t\t\t\t\tname: 'span',\n     *\t\t\t\t\tstyles: {\n     *\t\t\t\t\t\t'font-size': '0.8em'\n     *\t\t\t\t\t}\n     *\t\t\t\t}\n     *\t\t\t},\n     *\t\t\tupcastAlso: {\n     *\t\t\t\tbig: viewElement => {\n     *\t\t\t\t\tconst fontSize = viewElement.getStyle( 'font-size' );\n     *\n     *\t\t\t\t\tif ( !fontSize ) {\n     *\t\t\t\t\t\treturn null;\n     *\t\t\t\t\t}\n     *\n     *\t\t\t\t\tconst match = fontSize.match( /(\\d+)\\s*px/ );\n     *\n     *\t\t\t\t\tif ( !match ) {\n     *\t\t\t\t\t\treturn null;\n     *\t\t\t\t\t}\n     *\n     *\t\t\t\t\tconst size = Number( match[ 1 ] );\n     *\n     *\t\t\t\t\tif ( viewElement.is( 'span' ) && size > 10 ) {\n     *\t\t\t\t\t\t// Returned value can be an object with the matched properties.\n     *\t\t\t\t\t\t// These properties will be \"consumed\" during the conversion.\n     *\t\t\t\t\t\t// See `engine.view.Matcher~MatcherPattern` and `engine.view.Matcher#match` for more details.\n     *\n     *\t\t\t\t\t\treturn { name: true, styles: [ 'font-size' ] };\n     *\t\t\t\t\t}\n     *\n     *\t\t\t\t\treturn null;\n     *\t\t\t\t},\n     *\t\t\t\tsmall: viewElement => {\n     *\t\t\t\t\tconst fontSize = viewElement.getStyle( 'font-size' );\n     *\n     *\t\t\t\t\tif ( !fontSize ) {\n     *\t\t\t\t\t\treturn null;\n     *\t\t\t\t\t}\n     *\n     *\t\t\t\t\tconst match = fontSize.match( /(\\d+)\\s*px/ );\n     *\n     *\t\t\t\t\tif ( !match ) {\n     *\t\t\t\t\t\treturn null;\n     *\t\t\t\t\t}\n     *\n     *\t\t\t\t\tconst size = Number( match[ 1 ] );\n     *\n     *\t\t\t\t\tif ( viewElement.is( 'span' ) && size < 10 ) {\n     *\t\t\t\t\t\t// Returned value can be an object with the matched properties.\n     *\t\t\t\t\t\t// These properties will be \"consumed\" during the conversion.\n     *\t\t\t\t\t\t// See `engine.view.Matcher~MatcherPattern` and `engine.view.Matcher#match` for more details.\n     *\n     *\t\t\t\t\t\treturn { name: true, styles: [ 'font-size' ] };\n     *\t\t\t\t\t}\n     *\n     *\t\t\t\t\treturn null;\n     *\t\t\t\t}\n     *\t\t\t}\n     *\t\t} );\n     *\n     * The `definition.model` parameter specifies which model attribute should be converted from or to. It can be a `{ key, value }` object\n     * describing the attribute key and value to convert or a `String` specifying just the attribute key (then `value` is set to `true`).\n     * See {@link module:engine/conversion/conversion~ConverterDefinition} to learn about other parameters.\n     *\n     * @param {module:engine/conversion/conversion~ConverterDefinition} definition The converter definition.\n     */\n  }, {\n    key: \"attributeToElement\",\n    value: function attributeToElement(definition) {\n      // Set up downcast converter.\n      this.for('downcast').attributeToElement(definition);\n\n      // Set up upcast converter.\n      var _iterator2 = _createForOfIteratorHelper(_getAllUpcastDefinitions(definition)),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var _step2$value = _step2.value,\n            model = _step2$value.model,\n            view = _step2$value.view;\n          this.for('upcast').elementToAttribute({\n            view: view,\n            model: model,\n            converterPriority: definition.converterPriority\n          });\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n    }\n\n    /**\n     * Sets up converters between the model and the view that convert a model attribute to a view attribute (and vice versa).\n     * For example, `<image src='foo.jpg'></image>` is converted to `<img src='foo.jpg'></img>` (the same attribute key and value).\n     * This type of converters is intended to be used with {@link module:engine/model/element~Element model element} nodes.\n     * To convert text attributes {@link module:engine/conversion/conversion~Conversion#attributeToElement `attributeToElement converter`}\n     * should be set up.\n     *\n     *\t\t// A simple conversion from the `source` model attribute to the `src` view attribute (and vice versa).\n     *\t\teditor.conversion.attributeToAttribute( { model: 'source', view: 'src' } );\n     *\n     *\t\t// Attribute values are strictly specified.\n     *\t\teditor.conversion.attributeToAttribute( {\n     *\t\t\tmodel: {\n     *\t\t\t\tname: 'image',\n     *\t\t\t\tkey: 'aside',\n     *\t\t\t\tvalues: [ 'aside' ]\n     *\t\t\t},\n     *\t\t\tview: {\n     *\t\t\t\taside: {\n     *\t\t\t\t\tname: 'img',\n     *\t\t\t\t\tkey: 'class',\n     *\t\t\t\t\tvalue: [ 'aside', 'half-size' ]\n     *\t\t\t\t}\n     *\t\t\t}\n     *\t\t} );\n     *\n     *\t\t// Set the style attribute.\n     *\t\teditor.conversion.attributeToAttribute( {\n     *\t\t\tmodel: {\n     *\t\t\t\tname: 'image',\n     *\t\t\t\tkey: 'aside',\n     *\t\t\t\tvalues: [ 'aside' ]\n     *\t\t\t},\n     *\t\t\tview: {\n     *\t\t\t\taside: {\n     *\t\t\t\t\tname: 'img',\n     *\t\t\t\t\tkey: 'style',\n     *\t\t\t\t\tvalue: {\n     *\t\t\t\t\t\tfloat: 'right',\n     *\t\t\t\t\t\twidth: '50%',\n     *\t\t\t\t\t\tmargin: '5px'\n     *\t\t\t\t\t}\n     *\t\t\t\t}\n     *\t\t\t}\n     *\t\t} );\n     *\n     *\t\t// Conversion from and to a model attribute key whose value is an enum (`align=right|center`).\n     *\t\t// Use `upcastAlso` to define other view elements that should also be converted to the `align=right` attribute.\n     *\t\teditor.conversion.attributeToAttribute( {\n     *\t\t\tmodel: {\n     *\t\t\t\tkey: 'align',\n     *\t\t\t\tvalues: [ 'right', 'center' ]\n     *\t\t\t},\n     *\t\t\tview: {\n     *\t\t\t\tright: {\n     *\t\t\t\t\tkey: 'class',\n     *\t\t\t\t\tvalue: 'align-right'\n     *\t\t\t\t},\n     *\t\t\t\tcenter: {\n     *\t\t\t\t\tkey: 'class',\n     *\t\t\t\t\tvalue: 'align-center'\n     *\t\t\t\t}\n     *\t\t\t},\n     *\t\t\tupcastAlso: {\n     *\t\t\t\tright: {\n     *\t\t\t\t\tstyles: {\n     *\t\t\t\t\t\t'text-align': 'right'\n     *\t\t\t\t\t}\n     *\t\t\t\t},\n     *\t\t\t\tcenter: {\n     *\t\t\t\t\tstyles: {\n     *\t\t\t\t\t\t'text-align': 'center'\n     *\t\t\t\t\t}\n     *\t\t\t\t}\n     *\t\t\t}\n     *\t\t} );\n     *\n     * The `definition.model` parameter specifies which model attribute should be converted from and to.\n     * It can be a `{ key, [ values ], [ name ] }` object or a `String`, which will be treated like `{ key: definition.model }`.\n     * The `key` property is the model attribute key to convert from and to.\n     * The `values` are the possible model attribute values. If `values` is not set, the model attribute value will be the same as the\n     * view attribute value.\n     * If `name` is set, the conversion will be set up only for model elements with the given name.\n     *\n     * The `definition.view` parameter specifies which view attribute should be converted from and to.\n     * It can be a `{ key, value, [ name ] }` object or a `String`, which will be treated like `{ key: definition.view }`.\n     * The `key` property is the view attribute key to convert from and to.\n     * The `value` is the view attribute value to convert from and to. If `definition.value` is not set, the view attribute value will be\n     * the same as the model attribute value.\n     * If `key` is `'class'`, `value` can be a `String` or an array of `String`s.\n     * If `key` is `'style'`, `value` is an object with key-value pairs.\n     * In other cases, `value` is a `String`.\n     * If `name` is set, the conversion will be set up only for model elements with the given name.\n     * If `definition.model.values` is set, `definition.view` is an object that assigns values from `definition.model.values`\n     * to `{ key, value, [ name ] }` objects.\n     *\n     * `definition.upcastAlso` specifies which other matching view elements should also be upcast to the given model configuration.\n     * If `definition.model.values` is set, `definition.upcastAlso` should be an object assigning values from `definition.model.values`\n     * to {@link module:engine/view/matcher~MatcherPattern}s or arrays of {@link module:engine/view/matcher~MatcherPattern}s.\n     *\n     * **Note:** `definition.model` and `definition.view` form should be mirrored, so the same types of parameters should\n     * be given in both parameters.\n     *\n     * @param {Object} definition The converter definition.\n     * @param {String|Object} definition.model The model attribute to convert from and to.\n     * @param {String|Object} definition.view The view attribute to convert from and to.\n     * @param {module:engine/view/matcher~MatcherPattern|Array.<module:engine/view/matcher~MatcherPattern>} [definition.upcastAlso]\n     * Any view element matching `definition.upcastAlso` will also be converted to the given model attribute. `definition.upcastAlso`\n     * is used only if `config.model.values` is specified.\n     */\n  }, {\n    key: \"attributeToAttribute\",\n    value: function attributeToAttribute(definition) {\n      // Set up downcast converter.\n      this.for('downcast').attributeToAttribute(definition);\n\n      // Set up upcast converter.\n      var _iterator3 = _createForOfIteratorHelper(_getAllUpcastDefinitions(definition)),\n        _step3;\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var _step3$value = _step3.value,\n            model = _step3$value.model,\n            view = _step3$value.view;\n          this.for('upcast').attributeToAttribute({\n            view: view,\n            model: model\n          });\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n    }\n\n    /**\n     * Creates and caches conversion helpers for given dispatchers group.\n     *\n     * @private\n     * @param {Object} options\n     * @param {String} options.name Group name.\n     * @param {Array.<module:engine/conversion/downcastdispatcher~DowncastDispatcher|\n     * module:engine/conversion/upcastdispatcher~UpcastDispatcher>} options.dispatchers\n     * @param {Boolean} options.isDowncast\n     */\n  }, {\n    key: \"_createConversionHelpers\",\n    value: function _createConversionHelpers(_ref) {\n      var name = _ref.name,\n        dispatchers = _ref.dispatchers,\n        isDowncast = _ref.isDowncast;\n      if (this._helpers.has(name)) {\n        /**\n         * Trying to register a group name that has already been registered.\n         *\n         * @error conversion-group-exists\n         */\n        throw new CKEditorError('conversion-group-exists: Trying to register a group name that has already been registered.', this);\n      }\n      var helpers = isDowncast ? new DowncastHelpers(dispatchers) : new UpcastHelpers(dispatchers);\n      this._helpers.set(name, helpers);\n    }\n  }]);\n}();\n/**\n * Defines how the model should be converted from and to the view.\n *\n * @typedef {Object} module:engine/conversion/conversion~ConverterDefinition\n *\n * @property {*} [model] The model conversion definition. Describes the model element or model attribute to convert. This parameter differs\n * for different functions that accept `ConverterDefinition`. See the description of the function to learn how to set it.\n * @property {module:engine/view/elementdefinition~ElementDefinition|Object} view The definition of the view element to convert from and\n * to. If `model` describes multiple values, `view` is an object that assigns these values (`view` object keys) to view element definitions\n * (`view` object values).\n * @property {module:engine/view/matcher~MatcherPattern|Array.<module:engine/view/matcher~MatcherPattern>} [upcastAlso]\n * Any view element matching `upcastAlso` will also be converted to the model. If `model` describes multiple values, `upcastAlso`\n * is an object that assigns these values (`upcastAlso` object keys) to {@link module:engine/view/matcher~MatcherPattern}s\n * (`upcastAlso` object values).\n * @property {module:utils/priorities~PriorityString} [converterPriority] The converter priority.\n */\n// Helper function that creates a joint array out of an item passed in `definition.view` and items passed in\n// `definition.upcastAlso`.\n//\n// @param {module:engine/conversion/conversion~ConverterDefinition} definition\n// @returns {Array} Array containing view definitions.\nexport { Conversion as default };\nfunction _getAllUpcastDefinitions(definition) {\n  var _iterator4, _step4, value, model, view, upcastAlso, _t;\n  return _regenerator().w(function (_context) {\n    while (1) switch (_context.p = _context.n) {\n      case 0:\n        if (!definition.model.values) {\n          _context.n = 8;\n          break;\n        }\n        _iterator4 = _createForOfIteratorHelper(definition.model.values);\n        _context.p = 1;\n        _iterator4.s();\n      case 2:\n        if ((_step4 = _iterator4.n()).done) {\n          _context.n = 4;\n          break;\n        }\n        value = _step4.value;\n        model = {\n          key: definition.model.key,\n          value: value\n        };\n        view = definition.view[value];\n        upcastAlso = definition.upcastAlso ? definition.upcastAlso[value] : undefined;\n        return _context.d(_regeneratorValues(_getUpcastDefinition(model, view, upcastAlso)), 3);\n      case 3:\n        _context.n = 2;\n        break;\n      case 4:\n        _context.n = 6;\n        break;\n      case 5:\n        _context.p = 5;\n        _t = _context.v;\n        _iterator4.e(_t);\n      case 6:\n        _context.p = 6;\n        _iterator4.f();\n        return _context.f(6);\n      case 7:\n        _context.n = 9;\n        break;\n      case 8:\n        return _context.d(_regeneratorValues(_getUpcastDefinition(definition.model, definition.view, definition.upcastAlso)), 9);\n      case 9:\n        return _context.a(2);\n    }\n  }, _marked, null, [[1, 5, 6, 7]]);\n}\nfunction _getUpcastDefinition(model, view, upcastAlso) {\n  var _iterator5, _step5, upcastAlsoItem, _t2;\n  return _regenerator().w(function (_context2) {\n    while (1) switch (_context2.p = _context2.n) {\n      case 0:\n        _context2.n = 1;\n        return {\n          model: model,\n          view: view\n        };\n      case 1:\n        if (!upcastAlso) {\n          _context2.n = 8;\n          break;\n        }\n        upcastAlso = Array.isArray(upcastAlso) ? upcastAlso : [upcastAlso];\n        _iterator5 = _createForOfIteratorHelper(upcastAlso);\n        _context2.p = 2;\n        _iterator5.s();\n      case 3:\n        if ((_step5 = _iterator5.n()).done) {\n          _context2.n = 5;\n          break;\n        }\n        upcastAlsoItem = _step5.value;\n        _context2.n = 4;\n        return {\n          model: model,\n          view: upcastAlsoItem\n        };\n      case 4:\n        _context2.n = 3;\n        break;\n      case 5:\n        _context2.n = 7;\n        break;\n      case 6:\n        _context2.p = 6;\n        _t2 = _context2.v;\n        _iterator5.e(_t2);\n      case 7:\n        _context2.p = 7;\n        _iterator5.f();\n        return _context2.f(7);\n      case 8:\n        return _context2.a(2);\n    }\n  }, _marked2, null, [[2, 6, 7, 8]]);\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/conversion/conversionhelpers\n */\n/**\n * Base class for conversion helpers.\n */\nvar ConversionHelpers = /*#__PURE__*/function () {\n  /**\n   * Creates a conversion helpers instance.\n   *\n   * @param {Array.<module:engine/conversion/downcastdispatcher~DowncastDispatcher|\n   * module:engine/conversion/upcastdispatcher~UpcastDispatcher>} dispatchers\n   */\n  function ConversionHelpers(dispatchers) {\n    _classCallCheck(this, ConversionHelpers);\n    this._dispatchers = dispatchers;\n  }\n\n  /**\n   * Registers a conversion helper.\n   *\n   * **Note**: See full usage example in the `{@link module:engine/conversion/conversion~Conversion#for conversion.for()}`\n   * method description.\n   *\n   * @param {Function} conversionHelper The function to be called on event.\n   * @returns {module:engine/conversion/downcasthelpers~DowncastHelpers|module:engine/conversion/upcasthelpers~UpcastHelpers}\n   */\n  return _createClass(ConversionHelpers, [{\n    key: \"add\",\n    value: function add(conversionHelper) {\n      var _iterator = _createForOfIteratorHelper(this._dispatchers),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var dispatcher = _step.value;\n          conversionHelper(dispatcher);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      return this;\n    }\n  }]);\n}();\nexport { ConversionHelpers as default };","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.regexp.test.js\";\nimport \"core-js/modules/es.string.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/conversion/downcastdispatcher\n */\n\nimport Consumable from './modelconsumable';\nimport Range from '../model/range';\nimport EmitterMixin from '@ckeditor/ckeditor5-utils/src/emittermixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport { extend } from 'lodash-es';\n\n/**\n * `DowncastDispatcher` is a central point of downcasting (conversion from model to view), which is a process of reacting to changes\n * in the model and firing a set of events. Callbacks listening to those events are called converters. Those\n * converters role is to convert the model changes to changes in view (for example, adding view nodes or\n * changing attributes on view elements).\n *\n * During conversion process, `DowncastDispatcher` fires events, basing on state of the model and prepares\n * data for those events. It is important to understand that those events are connected with changes done on model,\n * for example: \"node has been inserted\" or \"attribute has changed\". This is in a contrary to upcasting (view to model conversion),\n * where we convert view state (view nodes) to a model tree.\n *\n * The events are prepared basing on a diff created by {@link module:engine/model/differ~Differ Differ}, which buffers them\n * and then passes to `DowncastDispatcher` as a diff between old model state and new model state.\n *\n * Note, that because changes are converted there is a need to have a mapping between model structure and view structure.\n * To map positions and elements during downcast (model to view conversion) use {@link module:engine/conversion/mapper~Mapper}.\n *\n * `DowncastDispatcher` fires following events for model tree changes:\n *\n * * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:insert insert}\n * if a range of nodes has been inserted to the model tree,\n * * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:remove remove}\n * if a range of nodes has been removed from the model tree,\n * * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:attribute attribute}\n * if attribute has been added, changed or removed from a model node.\n *\n * For {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:insert insert}\n * and {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:attribute attribute},\n * `DowncastDispatcher` generates {@link module:engine/conversion/modelconsumable~ModelConsumable consumables}.\n * These are used to have a control over which changes has been already consumed. It is useful when some converters\n * overwrite other or converts multiple changes (for example converts insertion of an element and also converts that\n * element's attributes during insertion).\n *\n * Additionally, `DowncastDispatcher` fires events for {@link module:engine/model/markercollection~Marker marker} changes:\n *\n * * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:addMarker} if a marker has been added,\n * * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:removeMarker} if a marker has been removed.\n *\n * Note, that changing a marker is done through removing the marker from the old range, and adding on the new range,\n * so both those events are fired.\n *\n * Finally, `DowncastDispatcher` also handles firing events for {@link module:engine/model/selection model selection}\n * conversion:\n *\n * * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:selection}\n * which converts selection from model to view,\n * * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:attribute}\n * which is fired for every selection attribute,\n * * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:addMarker}\n * which is fired for every marker which contains selection.\n *\n * Unlike model tree and markers, events for selection are not fired for changes but for selection state.\n *\n * When providing custom listeners for `DowncastDispatcher` remember to check whether given change has not been\n * {@link module:engine/conversion/modelconsumable~ModelConsumable#consume consumed} yet.\n *\n * When providing custom listeners for `DowncastDispatcher` keep in mind that any callback that had\n * {@link module:engine/conversion/modelconsumable~ModelConsumable#consume consumed} a value from a consumable and\n * converted the change should also stop the event (for efficiency purposes).\n *\n * When providing custom listeners for `DowncastDispatcher` remember to use provided\n * {@link module:engine/view/downcastwriter~DowncastWriter view downcast writer} to apply changes to the view document.\n *\n * Example of a custom converter for `DowncastDispatcher`:\n *\n *\t\t// We will convert inserting \"paragraph\" model element into the model.\n *\t\tdowncastDispatcher.on( 'insert:paragraph', ( evt, data, conversionApi ) => {\n *\t\t\t// Remember to check whether the change has not been consumed yet and consume it.\n *\t\t\tif ( conversionApi.consumable.consume( data.item, 'insert' ) ) {\n *\t\t\t\treturn;\n *\t\t\t}\n *\n *\t\t\t// Translate position in model to position in view.\n *\t\t\tconst viewPosition = conversionApi.mapper.toViewPosition( data.range.start );\n *\n *\t\t\t// Create <p> element that will be inserted in view at `viewPosition`.\n *\t\t\tconst viewElement = conversionApi.writer.createContainerElement( 'p' );\n *\n *\t\t\t// Bind the newly created view element to model element so positions will map accordingly in future.\n *\t\t\tconversionApi.mapper.bindElements( data.item, viewElement );\n *\n *\t\t\t// Add the newly created view element to the view.\n *\t\t\tconversionApi.writer.insert( viewPosition, viewElement );\n *\n *\t\t\t// Remember to stop the event propagation.\n *\t\t\tevt.stop();\n *\t\t} );\n */\nvar DowncastDispatcher = /*#__PURE__*/function () {\n  /**\n   * Creates a `DowncastDispatcher` instance.\n   *\n   * @see module:engine/conversion/downcastdispatcher~DowncastConversionApi\n   * @param {Object} conversionApi Additional properties for interface that will be passed to events fired\n   * by `DowncastDispatcher`.\n   */\n  function DowncastDispatcher(conversionApi) {\n    _classCallCheck(this, DowncastDispatcher);\n    /**\n     * Interface passed by dispatcher to the events callbacks.\n     *\n     * @member {module:engine/conversion/downcastdispatcher~DowncastConversionApi}\n     */\n    this.conversionApi = extend({\n      dispatcher: this\n    }, conversionApi);\n  }\n\n  /**\n   * Takes {@link module:engine/model/differ~Differ model differ} object with buffered changes and fires conversion basing on it.\n   *\n   * @param {module:engine/model/differ~Differ} differ Differ object with buffered changes.\n   * @param {module:engine/model/markercollection~MarkerCollection} markers Markers connected with converted model.\n   * @param {module:engine/view/downcastwriter~DowncastWriter} writer View writer that should be used to modify view document.\n   */\n  return _createClass(DowncastDispatcher, [{\n    key: \"convertChanges\",\n    value: function convertChanges(differ, markers, writer) {\n      // Before the view is updated, remove markers which have changed.\n      var _iterator = _createForOfIteratorHelper(differ.getMarkersToRemove()),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var change = _step.value;\n          this.convertMarkerRemove(change.name, change.range, writer);\n        }\n\n        // Convert changes that happened on model tree.\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      var _iterator2 = _createForOfIteratorHelper(differ.getChanges()),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var entry = _step2.value;\n          if (entry.type == 'insert') {\n            this.convertInsert(Range._createFromPositionAndShift(entry.position, entry.length), writer);\n          } else if (entry.type == 'remove') {\n            this.convertRemove(entry.position, entry.length, entry.name, writer);\n          } else {\n            // entry.type == 'attribute'.\n            this.convertAttribute(entry.range, entry.attributeKey, entry.attributeOldValue, entry.attributeNewValue, writer);\n          }\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      var _iterator3 = _createForOfIteratorHelper(this.conversionApi.mapper.flushUnboundMarkerNames()),\n        _step3;\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var markerName = _step3.value;\n          var markerRange = markers.get(markerName).getRange();\n          this.convertMarkerRemove(markerName, markerRange, writer);\n          this.convertMarkerAdd(markerName, markerRange, writer);\n        }\n\n        // After the view is updated, convert markers which have changed.\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n      var _iterator4 = _createForOfIteratorHelper(differ.getMarkersToAdd()),\n        _step4;\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var _change = _step4.value;\n          this.convertMarkerAdd(_change.name, _change.range, writer);\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n    }\n\n    /**\n     * Starts conversion of a range insertion.\n     *\n     * For each node in the range, {@link #event:insert insert event is fired}. For each attribute on each node,\n     * {@link #event:attribute attribute event is fired}.\n     *\n     * @fires insert\n     * @fires attribute\n     * @param {module:engine/model/range~Range} range Inserted range.\n     * @param {module:engine/view/downcastwriter~DowncastWriter} writer View writer that should be used to modify view document.\n     */\n  }, {\n    key: \"convertInsert\",\n    value: function convertInsert(range, writer) {\n      this.conversionApi.writer = writer;\n\n      // Create a list of things that can be consumed, consisting of nodes and their attributes.\n      this.conversionApi.consumable = this._createInsertConsumable(range);\n\n      // Fire a separate insert event for each node and text fragment contained in the range.\n      var _iterator5 = _createForOfIteratorHelper(range),\n        _step5;\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var value = _step5.value;\n          var item = value.item;\n          var itemRange = Range._createFromPositionAndShift(value.previousPosition, value.length);\n          var data = {\n            item: item,\n            range: itemRange\n          };\n          this._testAndFire('insert', data);\n\n          // Fire a separate addAttribute event for each attribute that was set on inserted items.\n          // This is important because most attributes converters will listen only to add/change/removeAttribute events.\n          // If we would not add this part, attributes on inserted nodes would not be converted.\n          var _iterator6 = _createForOfIteratorHelper(item.getAttributeKeys()),\n            _step6;\n          try {\n            for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n              var key = _step6.value;\n              data.attributeKey = key;\n              data.attributeOldValue = null;\n              data.attributeNewValue = item.getAttribute(key);\n              this._testAndFire(\"attribute:\".concat(key), data);\n            }\n          } catch (err) {\n            _iterator6.e(err);\n          } finally {\n            _iterator6.f();\n          }\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n      this._clearConversionApi();\n    }\n\n    /**\n     * Fires conversion of a single node removal. Fires {@link #event:remove remove event} with provided data.\n     *\n     * @param {module:engine/model/position~Position} position Position from which node was removed.\n     * @param {Number} length Offset size of removed node.\n     * @param {String} name Name of removed node.\n     * @param {module:engine/view/downcastwriter~DowncastWriter} writer View writer that should be used to modify view document.\n     */\n  }, {\n    key: \"convertRemove\",\n    value: function convertRemove(position, length, name, writer) {\n      this.conversionApi.writer = writer;\n      this.fire('remove:' + name, {\n        position: position,\n        length: length\n      }, this.conversionApi);\n      this._clearConversionApi();\n    }\n\n    /**\n     * Starts conversion of attribute change on given `range`.\n     *\n     * For each node in the given `range`, {@link #event:attribute attribute event} is fired with the passed data.\n     *\n     * @fires attribute\n     * @param {module:engine/model/range~Range} range Changed range.\n     * @param {String} key Key of the attribute that has changed.\n     * @param {*} oldValue Attribute value before the change or `null` if the attribute has not been set before.\n     * @param {*} newValue New attribute value or `null` if the attribute has been removed.\n     * @param {module:engine/view/downcastwriter~DowncastWriter} writer View writer that should be used to modify view document.\n     */\n  }, {\n    key: \"convertAttribute\",\n    value: function convertAttribute(range, key, oldValue, newValue, writer) {\n      this.conversionApi.writer = writer;\n\n      // Create a list with attributes to consume.\n      this.conversionApi.consumable = this._createConsumableForRange(range, \"attribute:\".concat(key));\n\n      // Create a separate attribute event for each node in the range.\n      var _iterator7 = _createForOfIteratorHelper(range),\n        _step7;\n      try {\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n          var value = _step7.value;\n          var item = value.item;\n          var itemRange = Range._createFromPositionAndShift(value.previousPosition, value.length);\n          var data = {\n            item: item,\n            range: itemRange,\n            attributeKey: key,\n            attributeOldValue: oldValue,\n            attributeNewValue: newValue\n          };\n          this._testAndFire(\"attribute:\".concat(key), data);\n        }\n      } catch (err) {\n        _iterator7.e(err);\n      } finally {\n        _iterator7.f();\n      }\n      this._clearConversionApi();\n    }\n\n    /**\n     * Starts model selection conversion.\n     *\n     * Fires events for given {@link module:engine/model/selection~Selection selection} to start selection conversion.\n     *\n     * @fires selection\n     * @fires addMarker\n     * @fires attribute\n     * @param {module:engine/model/selection~Selection} selection Selection to convert.\n     * @param {module:engine/model/markercollection~MarkerCollection} markers Markers connected with converted model.\n     * @param {module:engine/view/downcastwriter~DowncastWriter} writer View writer that should be used to modify view document.\n     */\n  }, {\n    key: \"convertSelection\",\n    value: function convertSelection(selection, markers, writer) {\n      var markersAtSelection = Array.from(markers.getMarkersAtPosition(selection.getFirstPosition()));\n      this.conversionApi.writer = writer;\n      this.conversionApi.consumable = this._createSelectionConsumable(selection, markersAtSelection);\n      this.fire('selection', {\n        selection: selection\n      }, this.conversionApi);\n      if (!selection.isCollapsed) {\n        return;\n      }\n      for (var _i = 0, _markersAtSelection = markersAtSelection; _i < _markersAtSelection.length; _i++) {\n        var marker = _markersAtSelection[_i];\n        var markerRange = marker.getRange();\n        if (!shouldMarkerChangeBeConverted(selection.getFirstPosition(), marker, this.conversionApi.mapper)) {\n          continue;\n        }\n        var data = {\n          item: selection,\n          markerName: marker.name,\n          markerRange: markerRange\n        };\n        if (this.conversionApi.consumable.test(selection, 'addMarker:' + marker.name)) {\n          this.fire('addMarker:' + marker.name, data, this.conversionApi);\n        }\n      }\n      var _iterator8 = _createForOfIteratorHelper(selection.getAttributeKeys()),\n        _step8;\n      try {\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n          var key = _step8.value;\n          var _data = {\n            item: selection,\n            range: selection.getFirstRange(),\n            attributeKey: key,\n            attributeOldValue: null,\n            attributeNewValue: selection.getAttribute(key)\n          };\n\n          // Do not fire event if the attribute has been consumed.\n          if (this.conversionApi.consumable.test(selection, 'attribute:' + _data.attributeKey)) {\n            this.fire('attribute:' + _data.attributeKey + ':$text', _data, this.conversionApi);\n          }\n        }\n      } catch (err) {\n        _iterator8.e(err);\n      } finally {\n        _iterator8.f();\n      }\n      this._clearConversionApi();\n    }\n\n    /**\n     * Converts added marker. Fires {@link #event:addMarker addMarker} event for each item\n     * in marker's range. If range is collapsed single event is dispatched. See event description for more details.\n     *\n     * @fires addMarker\n     * @param {String} markerName Marker name.\n     * @param {module:engine/model/range~Range} markerRange Marker range.\n     * @param {module:engine/view/downcastwriter~DowncastWriter} writer View writer that should be used to modify view document.\n     */\n  }, {\n    key: \"convertMarkerAdd\",\n    value: function convertMarkerAdd(markerName, markerRange, writer) {\n      // Do not convert if range is in graveyard or not in the document (e.g. in DocumentFragment).\n      if (!markerRange.root.document || markerRange.root.rootName == '$graveyard') {\n        return;\n      }\n      this.conversionApi.writer = writer;\n\n      // In markers' case, event name == consumable name.\n      var eventName = 'addMarker:' + markerName;\n\n      //\n      // First, fire an event for the whole marker.\n      //\n      var consumable = new Consumable();\n      consumable.add(markerRange, eventName);\n      this.conversionApi.consumable = consumable;\n      this.fire(eventName, {\n        markerName: markerName,\n        markerRange: markerRange\n      }, this.conversionApi);\n\n      //\n      // Do not fire events for each item inside the range if the range got consumed.\n      //\n      if (!consumable.test(markerRange, eventName)) {\n        return;\n      }\n\n      //\n      // Then, fire an event for each item inside the marker range.\n      //\n      this.conversionApi.consumable = this._createConsumableForRange(markerRange, eventName);\n      var _iterator9 = _createForOfIteratorHelper(markerRange.getItems()),\n        _step9;\n      try {\n        for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n          var item = _step9.value;\n          // Do not fire event for already consumed items.\n          if (!this.conversionApi.consumable.test(item, eventName)) {\n            continue;\n          }\n          var data = {\n            item: item,\n            range: Range._createOn(item),\n            markerName: markerName,\n            markerRange: markerRange\n          };\n          this.fire(eventName, data, this.conversionApi);\n        }\n      } catch (err) {\n        _iterator9.e(err);\n      } finally {\n        _iterator9.f();\n      }\n      this._clearConversionApi();\n    }\n\n    /**\n     * Fires conversion of marker removal. Fires {@link #event:removeMarker removeMarker} event with provided data.\n     *\n     * @fires removeMarker\n     * @param {String} markerName Marker name.\n     * @param {module:engine/model/range~Range} markerRange Marker range.\n     * @param {module:engine/view/downcastwriter~DowncastWriter} writer View writer that should be used to modify view document.\n     */\n  }, {\n    key: \"convertMarkerRemove\",\n    value: function convertMarkerRemove(markerName, markerRange, writer) {\n      // Do not convert if range is in graveyard or not in the document (e.g. in DocumentFragment).\n      if (!markerRange.root.document || markerRange.root.rootName == '$graveyard') {\n        return;\n      }\n      this.conversionApi.writer = writer;\n      this.fire('removeMarker:' + markerName, {\n        markerName: markerName,\n        markerRange: markerRange\n      }, this.conversionApi);\n      this._clearConversionApi();\n    }\n\n    /**\n     * Creates {@link module:engine/conversion/modelconsumable~ModelConsumable} with values to consume from given range,\n     * assuming that the range has just been inserted to the model.\n     *\n     * @private\n     * @param {module:engine/model/range~Range} range Inserted range.\n     * @returns {module:engine/conversion/modelconsumable~ModelConsumable} Values to consume.\n     */\n  }, {\n    key: \"_createInsertConsumable\",\n    value: function _createInsertConsumable(range) {\n      var consumable = new Consumable();\n      var _iterator0 = _createForOfIteratorHelper(range),\n        _step0;\n      try {\n        for (_iterator0.s(); !(_step0 = _iterator0.n()).done;) {\n          var value = _step0.value;\n          var item = value.item;\n          consumable.add(item, 'insert');\n          var _iterator1 = _createForOfIteratorHelper(item.getAttributeKeys()),\n            _step1;\n          try {\n            for (_iterator1.s(); !(_step1 = _iterator1.n()).done;) {\n              var key = _step1.value;\n              consumable.add(item, 'attribute:' + key);\n            }\n          } catch (err) {\n            _iterator1.e(err);\n          } finally {\n            _iterator1.f();\n          }\n        }\n      } catch (err) {\n        _iterator0.e(err);\n      } finally {\n        _iterator0.f();\n      }\n      return consumable;\n    }\n\n    /**\n     * Creates {@link module:engine/conversion/modelconsumable~ModelConsumable} with values to consume for given range.\n     *\n     * @private\n     * @param {module:engine/model/range~Range} range Affected range.\n     * @param {String} type Consumable type.\n     * @returns {module:engine/conversion/modelconsumable~ModelConsumable} Values to consume.\n     */\n  }, {\n    key: \"_createConsumableForRange\",\n    value: function _createConsumableForRange(range, type) {\n      var consumable = new Consumable();\n      var _iterator10 = _createForOfIteratorHelper(range.getItems()),\n        _step10;\n      try {\n        for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n          var item = _step10.value;\n          consumable.add(item, type);\n        }\n      } catch (err) {\n        _iterator10.e(err);\n      } finally {\n        _iterator10.f();\n      }\n      return consumable;\n    }\n\n    /**\n     * Creates {@link module:engine/conversion/modelconsumable~ModelConsumable} with selection consumable values.\n     *\n     * @private\n     * @param {module:engine/model/selection~Selection} selection Selection to create consumable from.\n     * @param {Iterable.<module:engine/model/markercollection~Marker>} markers Markers which contains selection.\n     * @returns {module:engine/conversion/modelconsumable~ModelConsumable} Values to consume.\n     */\n  }, {\n    key: \"_createSelectionConsumable\",\n    value: function _createSelectionConsumable(selection, markers) {\n      var consumable = new Consumable();\n      consumable.add(selection, 'selection');\n      var _iterator11 = _createForOfIteratorHelper(markers),\n        _step11;\n      try {\n        for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n          var marker = _step11.value;\n          consumable.add(selection, 'addMarker:' + marker.name);\n        }\n      } catch (err) {\n        _iterator11.e(err);\n      } finally {\n        _iterator11.f();\n      }\n      var _iterator12 = _createForOfIteratorHelper(selection.getAttributeKeys()),\n        _step12;\n      try {\n        for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n          var key = _step12.value;\n          consumable.add(selection, 'attribute:' + key);\n        }\n      } catch (err) {\n        _iterator12.e(err);\n      } finally {\n        _iterator12.f();\n      }\n      return consumable;\n    }\n\n    /**\n     * Tests passed `consumable` to check whether given event can be fired and if so, fires it.\n     *\n     * @private\n     * @fires insert\n     * @fires attribute\n     * @param {String} type Event type.\n     * @param {Object} data Event data.\n     */\n  }, {\n    key: \"_testAndFire\",\n    value: function _testAndFire(type, data) {\n      if (!this.conversionApi.consumable.test(data.item, type)) {\n        // Do not fire event if the item was consumed.\n        return;\n      }\n      var name = data.item.name || '$text';\n      this.fire(type + ':' + name, data, this.conversionApi);\n    }\n\n    /**\n     * Clears conversion API object.\n     *\n     * @private\n     */\n  }, {\n    key: \"_clearConversionApi\",\n    value: function _clearConversionApi() {\n      delete this.conversionApi.writer;\n      delete this.conversionApi.consumable;\n    }\n\n    /**\n     * Fired for inserted nodes.\n     *\n     * `insert` is a namespace for a class of events. Names of actually called events follow this pattern:\n     * `insert:name`. `name` is either `'$text'`, when {@link module:engine/model/text~Text a text node} has been inserted,\n     * or {@link module:engine/model/element~Element#name name} of inserted element.\n     *\n     * This way listeners can either listen to a general `insert` event or specific event (for example `insert:paragraph`).\n     *\n     * @event insert\n     * @param {Object} data Additional information about the change.\n     * @param {module:engine/model/item~Item} data.item Inserted item.\n     * @param {module:engine/model/range~Range} data.range Range spanning over inserted item.\n     * @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi Conversion interface\n     * to be used by callback, passed in `DowncastDispatcher` constructor.\n     */\n\n    /**\n     * Fired for removed nodes.\n     *\n     * `remove` is a namespace for a class of events. Names of actually called events follow this pattern:\n     * `remove:name`. `name` is either `'$text'`, when {@link module:engine/model/text~Text a text node} has been removed,\n     * or the {@link module:engine/model/element~Element#name name} of removed element.\n     *\n     * This way listeners can either listen to a general `remove` event or specific event (for example `remove:paragraph`).\n     *\n     * @event remove\n     * @param {Object} data Additional information about the change.\n     * @param {module:engine/model/position~Position} data.position Position from which the node has been removed.\n     * @param {Number} data.length Offset size of the removed node.\n     * @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi Conversion interface\n     * to be used by callback, passed in `DowncastDispatcher` constructor.\n     */\n\n    /**\n     * Fired in the following cases:\n     *\n     * * when an attribute has been added, changed, or removed from a node,\n     * * when a node with an attribute is inserted,\n     * * when collapsed model selection attribute is converted.\n     *\n     * `attribute` is a namespace for a class of events. Names of actually called events follow this pattern:\n     * `attribute:attributeKey:name`. `attributeKey` is the key of added/changed/removed attribute.\n     * `name` is either `'$text'` if change was on {@link module:engine/model/text~Text a text node},\n     * or the {@link module:engine/model/element~Element#name name} of element which attribute has changed.\n     *\n     * This way listeners can either listen to a general `attribute:bold` event or specific event (for example `attribute:src:image`).\n     *\n     * @event attribute\n     * @param {Object} data Additional information about the change.\n     * @param {module:engine/model/item~Item|module:engine/model/documentselection~DocumentSelection} data.item Changed item\n     * or converted selection.\n     * @param {module:engine/model/range~Range} data.range Range spanning over changed item or selection range.\n     * @param {String} data.attributeKey Attribute key.\n     * @param {*} data.attributeOldValue Attribute value before the change. This is `null` when selection attribute is converted.\n     * @param {*} data.attributeNewValue New attribute value.\n     * @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi Conversion interface\n     * to be used by callback, passed in `DowncastDispatcher` constructor.\n     */\n\n    /**\n     * Fired for {@link module:engine/model/selection~Selection selection} changes.\n     *\n     * @event selection\n     * @param {module:engine/model/selection~Selection} selection Selection that is converted.\n     * @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi Conversion interface\n     * to be used by callback, passed in `DowncastDispatcher` constructor.\n     */\n\n    /**\n     * Fired when a new marker is added to the model. Also fired when collapsed model selection that is inside marker is converted.\n     *\n     * `addMarker` is a namespace for a class of events. Names of actually called events follow this pattern:\n     * `addMarker:markerName`. By specifying certain marker names, you can make the events even more gradual. For example,\n     * if markers are named `foo:abc`, `foo:bar`, then it is possible to listen to `addMarker:foo` or `addMarker:foo:abc` and\n     * `addMarker:foo:bar` events.\n     *\n     * If the marker range is not collapsed:\n     *\n     * * the event is fired for each item in the marker range one by one,\n     * * `conversionApi.consumable` includes each item of the marker range and the consumable value is same as event name.\n     *\n     * If the marker range is collapsed:\n     *\n     * * there is only one event,\n     * * `conversionApi.consumable` includes marker range with event name.\n     *\n     * If selection inside a marker is converted:\n     *\n     * * there is only one event,\n     * * `conversionApi.consumable` includes selection instance with event name.\n     *\n     * @event addMarker\n     * @param {Object} data Additional information about the change.\n     * @param {module:engine/model/item~Item|module:engine/model/selection~Selection} data.item Item inside the new marker or\n     * the selection that is being converted.\n     * @param {module:engine/model/range~Range} [data.range] Range spanning over converted item. Available only in marker conversion, if\n     * the marker range was not collapsed.\n     * @param {module:engine/model/range~Range} data.markerRange Marker range.\n     * @param {String} data.markerName Marker name.\n     * @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi Conversion interface\n     * to be used by callback, passed in `DowncastDispatcher` constructor.\n     */\n\n    /**\n     * Fired when marker is removed from the model.\n     *\n     * `removeMarker` is a namespace for a class of events. Names of actually called events follow this pattern:\n     * `removeMarker:markerName`. By specifying certain marker names, you can make the events even more gradual. For example,\n     * if markers are named `foo:abc`, `foo:bar`, then it is possible to listen to `removeMarker:foo` or `removeMarker:foo:abc` and\n     * `removeMarker:foo:bar` events.\n     *\n     * @event removeMarker\n     * @param {Object} data Additional information about the change.\n     * @param {module:engine/model/range~Range} data.markerRange Marker range.\n     * @param {String} data.markerName Marker name.\n     * @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi Conversion interface\n     * to be used by callback, passed in `DowncastDispatcher` constructor.\n     */\n  }]);\n}();\nexport { DowncastDispatcher as default };\nmix(DowncastDispatcher, EmitterMixin);\n\n// Helper function, checks whether change of `marker` at `modelPosition` should be converted. Marker changes are not\n// converted if they happen inside an element with custom conversion method.\n//\n// @param {module:engine/model/position~Position} modelPosition\n// @param {module:engine/model/markercollection~Marker} marker\n// @param {module:engine/conversion/mapper~Mapper} mapper\n// @returns {Boolean}\nfunction shouldMarkerChangeBeConverted(modelPosition, marker, mapper) {\n  var range = marker.getRange();\n  var ancestors = Array.from(modelPosition.getAncestors());\n  ancestors.shift(); // Remove root element. It cannot be passed to `model.Range#containsItem`.\n  ancestors.reverse();\n  var hasCustomHandling = ancestors.some(function (element) {\n    if (range.containsItem(element)) {\n      var viewElement = mapper.toViewElement(element);\n      return !!viewElement.getCustomProperty('addHighlight');\n    }\n  });\n  return !hasCustomHandling;\n}\n\n/**\n * Conversion interface that is registered for given {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher}\n * and is passed as one of parameters when {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher dispatcher}\n * fires it's events.\n *\n * @interface module:engine/conversion/downcastdispatcher~DowncastConversionApi\n */\n\n/**\n * The {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher} instance.\n *\n * @member {module:engine/conversion/downcastdispatcher~DowncastDispatcher} #dispatcher\n */\n\n/**\n * Stores information about what parts of processed model item are still waiting to be handled. After a piece of model item\n * was converted, appropriate consumable value should be {@link module:engine/conversion/modelconsumable~ModelConsumable#consume consumed}.\n *\n * @member {module:engine/conversion/modelconsumable~ModelConsumable} #consumable\n */\n\n/**\n * The {@link module:engine/conversion/mapper~Mapper} instance.\n *\n * @member {module:engine/conversion/mapper~Mapper} #mapper\n */\n\n/**\n * The {@link module:engine/view/downcastwriter~DowncastWriter} instance used to manipulate data during conversion.\n *\n * @member {module:engine/view/downcastwriter~DowncastWriter} #writer\n */","import _typeof from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/typeof.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.regexp.test.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Contains downcast (model-to-view) converters for {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher}.\n *\n * @module engine/conversion/downcasthelpers\n */\n\nimport ModelRange from '../model/range';\nimport ModelSelection from '../model/selection';\nimport ModelElement from '../model/element';\nimport ViewAttributeElement from '../view/attributeelement';\nimport DocumentSelection from '../model/documentselection';\nimport ConversionHelpers from './conversionhelpers';\nimport { cloneDeep } from 'lodash-es';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * Downcast conversion helper functions.\n *\n * @extends module:engine/conversion/conversionhelpers~ConversionHelpers\n */\nvar DowncastHelpers = /*#__PURE__*/function (_ConversionHelpers) {\n  function DowncastHelpers() {\n    _classCallCheck(this, DowncastHelpers);\n    return _callSuper(this, DowncastHelpers, arguments);\n  }\n  _inherits(DowncastHelpers, _ConversionHelpers);\n  return _createClass(DowncastHelpers, [{\n    key: \"elementToElement\",\n    value:\n    /**\n     * Model element to view element conversion helper.\n     *\n     * This conversion results in creating a view element. For example, model `<paragraph>Foo</paragraph>` becomes `<p>Foo</p>` in the view.\n     *\n     *\t\teditor.conversion.for( 'downcast' ).elementToElement( {\n     *\t\t\tmodel: 'paragraph',\n     *\t\t\tview: 'p'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'downcast' ).elementToElement( {\n     *\t\t\tmodel: 'paragraph',\n     *\t\t\tview: 'div',\n     *\t\t\tconverterPriority: 'high'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'downcast' ).elementToElement( {\n     *\t\t\tmodel: 'fancyParagraph',\n     *\t\t\tview: {\n     *\t\t\t\tname: 'p',\n     *\t\t\t\tclasses: 'fancy'\n     *\t\t\t}\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'downcast' ).elementToElement( {\n     *\t\t\tmodel: 'heading',\n     *\t\t\tview: ( modelElement, viewWriter ) => {\n     *\t\t\t\treturn viewWriter.createContainerElement( 'h' + modelElement.getAttribute( 'level' ) )\n     *\t\t\t}\n     *\t\t} );\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @method #elementToElement\n     * @param {Object} config Conversion configuration.\n     * @param {String} config.model The name of the model element to convert.\n     * @param {module:engine/view/elementdefinition~ElementDefinition|Function} config.view A view element definition or a function\n     * that takes the model element and {@link module:engine/view/downcastwriter~DowncastWriter view downcast writer}\n     * as parameters and returns a view container element.\n     * @returns {module:engine/conversion/downcasthelpers~DowncastHelpers}\n     */\n    function elementToElement(config) {\n      return this.add(downcastElementToElement(config));\n    }\n\n    /**\n     * Model attribute to view element conversion helper.\n     *\n     * This conversion results in wrapping view nodes with a view attribute element. For example, a model text node with\n     * `\"Foo\"` as data and the `bold` attribute becomes `<strong>Foo</strong>` in the view.\n     *\n     *\t\teditor.conversion.for( 'downcast' ).attributeToElement( {\n     *\t\t\tmodel: 'bold',\n     *\t\t\tview: 'strong'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'downcast' ).attributeToElement( {\n     *\t\t\tmodel: 'bold',\n     *\t\t\tview: 'b',\n     *\t\t\tconverterPriority: 'high'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'downcast' ).attributeToElement( {\n     *\t\t\tmodel: 'invert',\n     *\t\t\tview: {\n     *\t\t\t\tname: 'span',\n     *\t\t\t\tclasses: [ 'font-light', 'bg-dark' ]\n     *\t\t\t}\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'downcast' ).attributeToElement( {\n     *\t\t\tmodel: {\n     *\t\t\t\tkey: 'fontSize',\n     *\t\t\t\tvalues: [ 'big', 'small' ]\n     *\t\t\t},\n     *\t\t\tview: {\n     *\t\t\t\tbig: {\n     *\t\t\t\t\tname: 'span',\n     *\t\t\t\t\tstyles: {\n     *\t\t\t\t\t\t'font-size': '1.2em'\n     *\t\t\t\t\t}\n     *\t\t\t\t},\n     *\t\t\t\tsmall: {\n     *\t\t\t\t\tname: 'span',\n     *\t\t\t\t\tstyles: {\n     *\t\t\t\t\t\t'font-size': '0.8em'\n     *\t\t\t\t\t}\n     *\t\t\t\t}\n     *\t\t\t}\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'downcast' ).attributeToElement( {\n     *\t\t\tmodel: 'bold',\n     *\t\t\tview: ( modelAttributeValue, viewWriter ) => {\n     *\t\t\t\treturn viewWriter.createAttributeElement( 'span', {\n     *\t\t\t\t\tstyle: 'font-weight:' + modelAttributeValue\n     *\t\t\t\t} );\n     *\t\t\t}\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'downcast' ).attributeToElement( {\n     *\t\t\tmodel: {\n     *\t\t\t\tkey: 'color',\n     *\t\t\t\tname: '$text'\n     *\t\t\t},\n     *\t\t\tview: ( modelAttributeValue, viewWriter ) => {\n     *\t\t\t\treturn viewWriter.createAttributeElement( 'span', {\n     *\t\t\t\t\tstyle: 'color:' + modelAttributeValue\n     *\t\t\t\t} );\n     *\t\t\t}\n     *\t\t} );\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @method #attributeToElement\n     * @param {Object} config Conversion configuration.\n     * @param {String|Object} config.model The key of the attribute to convert from or a `{ key, values }` object. `values` is an array\n     * of `String`s with possible values if the model attribute is an enumerable.\n     * @param {module:engine/view/elementdefinition~ElementDefinition|Function|Object} config.view A view element definition or a function\n     * that takes the model attribute value and {@link module:engine/view/downcastwriter~DowncastWriter view downcast writer}\n     * as parameters and returns a view attribute element. If `config.model.values` is\n     * given, `config.view` should be an object assigning values from `config.model.values` to view element definitions or functions.\n     * @param {module:utils/priorities~PriorityString} [config.converterPriority='normal'] Converter priority.\n     * @returns {module:engine/conversion/downcasthelpers~DowncastHelpers}\n     */\n  }, {\n    key: \"attributeToElement\",\n    value: function attributeToElement(config) {\n      return this.add(downcastAttributeToElement(config));\n    }\n\n    /**\n     * Model attribute to view attribute conversion helper.\n     *\n     * This conversion results in adding an attribute to a view node, basing on an attribute from a model node. For example,\n     * `<image src='foo.jpg'></image>` is converted to `<img src='foo.jpg'></img>`.\n     *\n     *\t\teditor.conversion.for( 'downcast' ).attributeToAttribute( {\n     *\t\t\tmodel: 'source',\n     *\t\t\tview: 'src'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'downcast' ).attributeToAttribute( {\n     *\t\t\tmodel: 'source',\n     *\t\t\tview: 'href',\n     *\t\t\tconverterPriority: 'high'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'downcast' ).attributeToAttribute( {\n     *\t\t\tmodel: {\n     *\t\t\t\tname: 'image',\n     *\t\t\t\tkey: 'source'\n     *\t\t\t},\n     *\t\t\tview: 'src'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'downcast' ).attributeToAttribute( {\n     *\t\t\tmodel: {\n     *\t\t\t\tname: 'styled',\n     *\t\t\t\tvalues: [ 'dark', 'light' ]\n     *\t\t\t},\n     *\t\t\tview: {\n     *\t\t\t\tdark: {\n     *\t\t\t\t\tkey: 'class',\n     *\t\t\t\t\tvalue: [ 'styled', 'styled-dark' ]\n     *\t\t\t\t},\n     *\t\t\t\tlight: {\n     *\t\t\t\t\tkey: 'class',\n     *\t\t\t\t\tvalue: [ 'styled', 'styled-light' ]\n     *\t\t\t\t}\n     *\t\t\t}\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'downcast' ).attributeToAttribute( {\n     *\t\t\tmodel: 'styled',\n     *\t\t\tview: modelAttributeValue => ( { key: 'class', value: 'styled-' + modelAttributeValue } )\n     *\t\t} );\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @method #attributeToAttribute\n     * @param {Object} config Conversion configuration.\n     * @param {String|Object} config.model The key of the attribute to convert from or a `{ key, values, [ name ] }` object describing\n     * the attribute key, possible values and, optionally, an element name to convert from.\n     * @param {String|Object|Function} config.view A view attribute key, or a `{ key, value }` object or a function that takes\n     * the model attribute value and returns a `{ key, value }` object. If `key` is `'class'`, `value` can be a `String` or an\n     * array of `String`s. If `key` is `'style'`, `value` is an object with key-value pairs. In other cases, `value` is a `String`.\n     * If `config.model.values` is set, `config.view` should be an object assigning values from `config.model.values` to\n     * `{ key, value }` objects or a functions.\n     * @param {module:utils/priorities~PriorityString} [config.converterPriority='normal'] Converter priority.\n     * @returns {module:engine/conversion/downcasthelpers~DowncastHelpers}\n     */\n  }, {\n    key: \"attributeToAttribute\",\n    value: function attributeToAttribute(config) {\n      return this.add(downcastAttributeToAttribute(config));\n    }\n\n    /**\n     * Model marker to view element conversion helper.\n     *\n     * This conversion results in creating a view element on the boundaries of the converted marker. If the converted marker\n     * is collapsed, only one element is created. For example, model marker set like this: `<paragraph>F[oo b]ar</paragraph>`\n     * becomes `<p>F<span data-marker=\"search\"></span>oo b<span data-marker=\"search\"></span>ar</p>` in the view.\n     *\n     *\t\teditor.conversion.for( 'downcast' ).markerToElement( {\n     *\t\t\tmodel: 'search',\n     *\t\t\tview: 'marker-search'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'downcast' ).markerToElement( {\n     *\t\t\tmodel: 'search',\n     *\t\t\tview: 'search-result',\n     *\t\t\tconverterPriority: 'high'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'downcast' ).markerToElement( {\n     *\t\t\tmodel: 'search',\n     *\t\t\tview: {\n     *\t\t\t\tname: 'span',\n     *\t\t\t\tattributes: {\n     *\t\t\t\t\t'data-marker': 'search'\n     *\t\t\t\t}\n     *\t\t\t}\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'downcast' ).markerToElement( {\n     *\t\t\tmodel: 'search',\n     *\t\t\tview: ( markerData, viewWriter ) => {\n     *\t\t\t\treturn viewWriter.createUIElement( 'span', {\n     *\t\t\t\t\t'data-marker': 'search',\n     *\t\t\t\t\t'data-start': markerData.isOpening\n     *\t\t\t\t} );\n     *\t\t\t}\n     *\t\t} );\n     *\n     * If a function is passed as the `config.view` parameter, it will be used to generate both boundary elements. The function\n     * receives the `data` object as a parameter and should return an instance of the\n     * {@link module:engine/view/uielement~UIElement view UI element}. The `data` object and\n     * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi `conversionApi`} are passed from\n     * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:addMarker}. Additionally,\n     * the `data.isOpening` parameter is passed, which is set to `true` for the marker start boundary element, and `false` to\n     * the marker end boundary element.\n     *\n     * This kind of conversion is useful for saving data into the database, so it should be used in the data conversion pipeline.\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @method #markerToElement\n     * @param {Object} config Conversion configuration.\n     * @param {String} config.model The name of the model marker (or model marker group) to convert.\n     * @param {module:engine/view/elementdefinition~ElementDefinition|Function} config.view A view element definition or a function\n     * that takes the model marker data as a parameter and returns a view UI element.\n     * @param {module:utils/priorities~PriorityString} [config.converterPriority='normal'] Converter priority.\n     * @returns {module:engine/conversion/downcasthelpers~DowncastHelpers}\n     */\n  }, {\n    key: \"markerToElement\",\n    value: function markerToElement(config) {\n      return this.add(downcastMarkerToElement(config));\n    }\n\n    /**\n     * Model marker to highlight conversion helper.\n     *\n     * This conversion results in creating a highlight on view nodes. For this kind of conversion,\n     * {@link module:engine/conversion/downcasthelpers~HighlightDescriptor} should be provided.\n     *\n     * For text nodes, a `<span>` {@link module:engine/view/attributeelement~AttributeElement} is created and it wraps all text nodes\n     * in the converted marker range. For example, a model marker set like this: `<paragraph>F[oo b]ar</paragraph>` becomes\n     * `<p>F<span class=\"comment\">oo b</span>ar</p>` in the view.\n     *\n     * {@link module:engine/view/containerelement~ContainerElement} may provide a custom way of handling highlight. Most often,\n     * the element itself is given classes and attributes described in the highlight descriptor (instead of being wrapped in `<span>`).\n     * For example, a model marker set like this: `[<image src=\"foo.jpg\"></image>]` becomes `<img src=\"foo.jpg\" class=\"comment\"></img>`\n     * in the view.\n     *\n     * For container elements, the conversion is two-step. While the converter processes the highlight descriptor and passes it\n     * to a container element, it is the container element instance itself that applies values from the highlight descriptor.\n     * So, in a sense, the converter takes care of stating what should be applied on what, while the element decides how to apply that.\n     *\n     *\t\teditor.conversion.for( 'downcast' ).markerToHighlight( { model: 'comment', view: { classes: 'comment' } } );\n     *\n     *\t\teditor.conversion.for( 'downcast' ).markerToHighlight( {\n     *\t\t\tmodel: 'comment',\n     *\t\t\tview: { classes: 'new-comment' },\n     *\t\t\tconverterPriority: 'high'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'downcast' ).markerToHighlight( {\n     *\t\t\tmodel: 'comment',\n     *\t\t\tview: data => {\n     *\t\t\t\t// Assuming that the marker name is in a form of comment:commentType.\n     *\t\t\t\tconst commentType = data.markerName.split( ':' )[ 1 ];\n     *\n     *\t\t\t\treturn {\n     *\t\t\t\t\tclasses: [ 'comment', 'comment-' + commentType ]\n     *\t\t\t\t};\n     *\t\t\t}\n     *\t\t} );\n     *\n     * If a function is passed as the `config.view` parameter, it will be used to generate the highlight descriptor. The function\n     * receives the `data` object as a parameter and should return a\n     * {@link module:engine/conversion/downcasthelpers~HighlightDescriptor highlight descriptor}.\n     * The `data` object properties are passed from {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:addMarker}.\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @method #markerToHighlight\n     * @param {Object} config Conversion configuration.\n     * @param {String} config.model The name of the model marker (or model marker group) to convert.\n     * @param {module:engine/conversion/downcasthelpers~HighlightDescriptor|Function} config.view A highlight descriptor\n     * that will be used for highlighting or a function that takes the model marker data as a parameter and returns a highlight descriptor.\n     * @param {module:utils/priorities~PriorityString} [config.converterPriority='normal'] Converter priority.\n     * @returns {module:engine/conversion/downcasthelpers~DowncastHelpers}\n     */\n  }, {\n    key: \"markerToHighlight\",\n    value: function markerToHighlight(config) {\n      return this.add(downcastMarkerToHighlight(config));\n    }\n  }]);\n}(ConversionHelpers);\n/**\n * Function factory that creates a default downcast converter for text insertion changes.\n *\n * The converter automatically consumes the corresponding value from the consumables list and stops the event (see\n * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher}).\n *\n *\t\tmodelDispatcher.on( 'insert:$text', insertText() );\n *\n * @returns {Function} Insert text event converter.\n */\nexport { DowncastHelpers as default };\nexport function insertText() {\n  return function (evt, data, conversionApi) {\n    if (!conversionApi.consumable.consume(data.item, 'insert')) {\n      return;\n    }\n    var viewWriter = conversionApi.writer;\n    var viewPosition = conversionApi.mapper.toViewPosition(data.range.start);\n    var viewText = viewWriter.createText(data.item.data);\n    viewWriter.insert(viewPosition, viewText);\n  };\n}\n\n/**\n * Function factory that creates a default downcast converter for node remove changes.\n *\n *\t\tmodelDispatcher.on( 'remove', remove() );\n *\n * @returns {Function} Remove event converter.\n */\nexport function remove() {\n  return function (evt, data, conversionApi) {\n    // Find view range start position by mapping model position at which the remove happened.\n    var viewStart = conversionApi.mapper.toViewPosition(data.position);\n    var modelEnd = data.position.getShiftedBy(data.length);\n    var viewEnd = conversionApi.mapper.toViewPosition(modelEnd, {\n      isPhantom: true\n    });\n    var viewRange = conversionApi.writer.createRange(viewStart, viewEnd);\n\n    // Trim the range to remove in case some UI elements are on the view range boundaries.\n    var removed = conversionApi.writer.remove(viewRange.getTrimmed());\n\n    // After the range is removed, unbind all view elements from the model.\n    // Range inside view document fragment is used to unbind deeply.\n    var _iterator = _createForOfIteratorHelper(conversionApi.writer.createRangeIn(removed).getItems()),\n      _step;\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var child = _step.value;\n        conversionApi.mapper.unbindViewElement(child);\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n  };\n}\n\n/**\n * Creates a `<span>` {@link module:engine/view/attributeelement~AttributeElement view attribute element} from the information\n * provided by the {@link module:engine/conversion/downcasthelpers~HighlightDescriptor highlight descriptor} object. If a priority\n * is not provided in the descriptor, the default priority will be used.\n *\n * @param {module:engine/conversion/downcasthelpers~HighlightDescriptor} descriptor\n * @returns {module:engine/view/attributeelement~AttributeElement}\n */\nexport function createViewElementFromHighlightDescriptor(descriptor) {\n  var viewElement = new ViewAttributeElement('span', descriptor.attributes);\n  if (descriptor.classes) {\n    viewElement._addClass(descriptor.classes);\n  }\n  if (descriptor.priority) {\n    viewElement._priority = descriptor.priority;\n  }\n  viewElement._id = descriptor.id;\n  return viewElement;\n}\n\n/**\n * Function factory that creates a converter which converts a non-collapsed {@link module:engine/model/selection~Selection model selection}\n * to a {@link module:engine/view/documentselection~DocumentSelection view selection}. The converter consumes appropriate\n * value from the `consumable` object and maps model positions from the selection to view positions.\n *\n *\t\tmodelDispatcher.on( 'selection', convertRangeSelection() );\n *\n * @returns {Function} Selection converter.\n */\nexport function convertRangeSelection() {\n  return function (evt, data, conversionApi) {\n    var selection = data.selection;\n    if (selection.isCollapsed) {\n      return;\n    }\n    if (!conversionApi.consumable.consume(selection, 'selection')) {\n      return;\n    }\n    var viewRanges = [];\n    var _iterator2 = _createForOfIteratorHelper(selection.getRanges()),\n      _step2;\n    try {\n      for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n        var range = _step2.value;\n        var viewRange = conversionApi.mapper.toViewRange(range);\n        viewRanges.push(viewRange);\n      }\n    } catch (err) {\n      _iterator2.e(err);\n    } finally {\n      _iterator2.f();\n    }\n    conversionApi.writer.setSelection(viewRanges, {\n      backward: selection.isBackward\n    });\n  };\n}\n\n/**\n * Function factory that creates a converter which converts a collapsed {@link module:engine/model/selection~Selection model selection} to\n * a {@link module:engine/view/documentselection~DocumentSelection view selection}. The converter consumes appropriate\n * value from the `consumable` object, maps the model selection position to the view position and breaks\n * {@link module:engine/view/attributeelement~AttributeElement attribute elements} at the selection position.\n *\n *\t\tmodelDispatcher.on( 'selection', convertCollapsedSelection() );\n *\n * An example of the view state before and after converting the collapsed selection:\n *\n *\t\t   <p><strong>f^oo<strong>bar</p>\n *\t\t-> <p><strong>f</strong>^<strong>oo</strong>bar</p>\n *\n * By breaking attribute elements like `<strong>`, the selection is in a correct element. Then, when the selection attribute is\n * converted, broken attributes might be merged again, or the position where the selection is may be wrapped\n * with different, appropriate attribute elements.\n *\n * See also {@link module:engine/conversion/downcasthelpers~clearAttributes} which does a clean-up\n * by merging attributes.\n *\n * @returns {Function} Selection converter.\n */\nexport function convertCollapsedSelection() {\n  return function (evt, data, conversionApi) {\n    var selection = data.selection;\n    if (!selection.isCollapsed) {\n      return;\n    }\n    if (!conversionApi.consumable.consume(selection, 'selection')) {\n      return;\n    }\n    var viewWriter = conversionApi.writer;\n    var modelPosition = selection.getFirstPosition();\n    var viewPosition = conversionApi.mapper.toViewPosition(modelPosition);\n    var brokenPosition = viewWriter.breakAttributes(viewPosition);\n    viewWriter.setSelection(brokenPosition);\n  };\n}\n\n/**\n * Function factory that creates a converter which clears artifacts after the previous\n * {@link module:engine/model/selection~Selection model selection} conversion. It removes all empty\n * {@link module:engine/view/attributeelement~AttributeElement view attribute elements} and merges sibling attributes at all start and end\n * positions of all ranges.\n *\n *\t\t   <p><strong>^</strong></p>\n *\t\t-> <p>^</p>\n *\n *\t\t   <p><strong>foo</strong>^<strong>bar</strong>bar</p>\n *\t\t-> <p><strong>foo^bar<strong>bar</p>\n *\n *\t\t   <p><strong>foo</strong><em>^</em><strong>bar</strong>bar</p>\n *\t\t-> <p><strong>foo^bar<strong>bar</p>\n *\n * This listener should be assigned before any converter for the new selection:\n *\n *\t\tmodelDispatcher.on( 'selection', clearAttributes() );\n *\n * See {@link module:engine/conversion/downcasthelpers~convertCollapsedSelection}\n * which does the opposite by breaking attributes in the selection position.\n *\n * @returns {Function} Selection converter.\n */\nexport function clearAttributes() {\n  return function (evt, data, conversionApi) {\n    var viewWriter = conversionApi.writer;\n    var viewSelection = viewWriter.document.selection;\n    var _iterator3 = _createForOfIteratorHelper(viewSelection.getRanges()),\n      _step3;\n    try {\n      for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n        var range = _step3.value;\n        // Not collapsed selection should not have artifacts.\n        if (range.isCollapsed) {\n          // Position might be in the node removed by the view writer.\n          if (range.end.parent.document) {\n            conversionApi.writer.mergeAttributes(range.start);\n          }\n        }\n      }\n    } catch (err) {\n      _iterator3.e(err);\n    } finally {\n      _iterator3.f();\n    }\n    viewWriter.setSelection(null);\n  };\n}\n\n/**\n * Function factory that creates a converter which converts set/change/remove attribute changes from the model to the view.\n * It can also be used to convert selection attributes. In that case, an empty attribute element will be created and the\n * selection will be put inside it.\n *\n * Attributes from the model are converted to a view element that will be wrapping these view nodes that are bound to\n * model elements having the given attribute. This is useful for attributes like `bold` that may be set on text nodes in the model\n * but are represented as an element in the view:\n *\n *\t\t[paragraph]              MODEL ====> VIEW        <p>\n *\t\t\t|- a {bold: true}                             |- <b>\n *\t\t\t|- b {bold: true}                             |   |- ab\n *\t\t\t|- c                                          |- c\n *\n * Passed `Function` will be provided with the attribute value and then all the parameters of the\n * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:attribute `attribute` event}.\n * It is expected that the function returns an {@link module:engine/view/element~Element}.\n * The result of the function will be the wrapping element.\n * When the provided `Function` does not return any element, no conversion will take place.\n *\n * The converter automatically consumes the corresponding value from the consumables list and stops the event (see\n * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher}).\n *\n *\t\tmodelDispatcher.on( 'attribute:bold', wrap( ( modelAttributeValue, viewWriter ) => {\n *\t\t\treturn viewWriter.createAttributeElement( 'strong' );\n *\t\t} );\n *\n * @protected\n * @param {Function} elementCreator Function returning a view element that will be used for wrapping.\n * @returns {Function} Set/change attribute converter.\n */\nexport function wrap(elementCreator) {\n  return function (evt, data, conversionApi) {\n    // Recreate current wrapping node. It will be used to unwrap view range if the attribute value has changed\n    // or the attribute was removed.\n    var oldViewElement = elementCreator(data.attributeOldValue, conversionApi.writer);\n\n    // Create node to wrap with.\n    var newViewElement = elementCreator(data.attributeNewValue, conversionApi.writer);\n    if (!oldViewElement && !newViewElement) {\n      return;\n    }\n    if (!conversionApi.consumable.consume(data.item, evt.name)) {\n      return;\n    }\n    var viewWriter = conversionApi.writer;\n    var viewSelection = viewWriter.document.selection;\n    if (data.item instanceof ModelSelection || data.item instanceof DocumentSelection) {\n      // Selection attribute conversion.\n      viewWriter.wrap(viewSelection.getFirstRange(), newViewElement);\n    } else {\n      // Node attribute conversion.\n      var viewRange = conversionApi.mapper.toViewRange(data.range);\n\n      // First, unwrap the range from current wrapper.\n      if (data.attributeOldValue !== null && oldViewElement) {\n        viewRange = viewWriter.unwrap(viewRange, oldViewElement);\n      }\n      if (data.attributeNewValue !== null && newViewElement) {\n        viewWriter.wrap(viewRange, newViewElement);\n      }\n    }\n  };\n}\n\n/**\n * Function factory that creates a converter which converts node insertion changes from the model to the view.\n * The function passed will be provided with all the parameters of the dispatcher's\n * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:insert `insert` event}.\n * It is expected that the function returns an {@link module:engine/view/element~Element}.\n * The result of the function will be inserted into the view.\n *\n * The converter automatically consumes the corresponding value from the consumables list, stops the event (see\n * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher}) and binds the model and view elements.\n *\n *\t\tdowncastDispatcher.on(\n *\t\t\t'insert:myElem',\n *\t\t\tinsertElement( ( modelItem, viewWriter ) => {\n *\t\t\t\tconst text = viewWriter.createText( 'myText' );\n *\t\t\t\tconst myElem = viewWriter.createElement( 'myElem', { myAttr: 'my-' + modelItem.getAttribute( 'myAttr' ) }, text );\n *\n *\t\t\t\t// Do something fancy with `myElem` using `modelItem` or other parameters.\n *\n *\t\t\t\treturn myElem;\n *\t\t\t}\n *\t\t) );\n *\n * @protected\n * @param {Function} elementCreator Function returning a view element, which will be inserted.\n * @returns {Function} Insert element event converter.\n */\nexport function insertElement(elementCreator) {\n  return function (evt, data, conversionApi) {\n    var viewElement = elementCreator(data.item, conversionApi.writer);\n    if (!viewElement) {\n      return;\n    }\n    if (!conversionApi.consumable.consume(data.item, 'insert')) {\n      return;\n    }\n    var viewPosition = conversionApi.mapper.toViewPosition(data.range.start);\n    conversionApi.mapper.bindElements(data.item, viewElement);\n    conversionApi.writer.insert(viewPosition, viewElement);\n  };\n}\n\n/**\n * Function factory that creates a converter which converts marker adding change to the\n * {@link module:engine/view/uielement~UIElement view UI element}.\n *\n * The view UI element that will be added to the view depends on the passed parameter. See {@link ~insertElement}.\n * In case of a non-collapsed range, the UI element will not wrap nodes but separate elements will be placed at the beginning\n * and at the end of the range.\n *\n * This converter binds created UI elements with the marker name using {@link module:engine/conversion/mapper~Mapper#bindElementToMarker}.\n *\n * @protected\n * @param {module:engine/view/uielement~UIElement|Function} elementCreator A view UI element or a function returning the view element\n * that will be inserted.\n * @returns {Function} Insert element event converter.\n */\nexport function insertUIElement(elementCreator) {\n  return function (evt, data, conversionApi) {\n    // Create two view elements. One will be inserted at the beginning of marker, one at the end.\n    // If marker is collapsed, only \"opening\" element will be inserted.\n    data.isOpening = true;\n    var viewStartElement = elementCreator(data, conversionApi.writer);\n    data.isOpening = false;\n    var viewEndElement = elementCreator(data, conversionApi.writer);\n    if (!viewStartElement || !viewEndElement) {\n      return;\n    }\n    var markerRange = data.markerRange;\n\n    // Marker that is collapsed has consumable build differently that non-collapsed one.\n    // For more information see `addMarker` event description.\n    // If marker's range is collapsed - check if it can be consumed.\n    if (markerRange.isCollapsed && !conversionApi.consumable.consume(markerRange, evt.name)) {\n      return;\n    }\n\n    // If marker's range is not collapsed - consume all items inside.\n    var _iterator4 = _createForOfIteratorHelper(markerRange),\n      _step4;\n    try {\n      for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n        var value = _step4.value;\n        if (!conversionApi.consumable.consume(value.item, evt.name)) {\n          return;\n        }\n      }\n    } catch (err) {\n      _iterator4.e(err);\n    } finally {\n      _iterator4.f();\n    }\n    var mapper = conversionApi.mapper;\n    var viewWriter = conversionApi.writer;\n\n    // Add \"opening\" element.\n    viewWriter.insert(mapper.toViewPosition(markerRange.start), viewStartElement);\n    conversionApi.mapper.bindElementToMarker(viewStartElement, data.markerName);\n\n    // Add \"closing\" element only if range is not collapsed.\n    if (!markerRange.isCollapsed) {\n      viewWriter.insert(mapper.toViewPosition(markerRange.end), viewEndElement);\n      conversionApi.mapper.bindElementToMarker(viewEndElement, data.markerName);\n    }\n    evt.stop();\n  };\n}\n\n// Function factory that returns a default downcast converter for removing a {@link module:engine/view/uielement~UIElement UI element}\n// basing on marker remove change.\n//\n// This converter unbinds elements from the marker name.\n//\n// @returns {Function} Removed UI element converter.\nfunction removeUIElement() {\n  return function (evt, data, conversionApi) {\n    var elements = conversionApi.mapper.markerNameToElements(data.markerName);\n    if (!elements) {\n      return;\n    }\n    var _iterator5 = _createForOfIteratorHelper(elements),\n      _step5;\n    try {\n      for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n        var element = _step5.value;\n        conversionApi.mapper.unbindElementFromMarkerName(element, data.markerName);\n        conversionApi.writer.clear(conversionApi.writer.createRangeOn(element), element);\n      }\n    } catch (err) {\n      _iterator5.e(err);\n    } finally {\n      _iterator5.f();\n    }\n    conversionApi.writer.clearClonedElementsGroup(data.markerName);\n    evt.stop();\n  };\n}\n\n// Function factory that creates a converter which converts set/change/remove attribute changes from the model to the view.\n//\n// Attributes from the model are converted to the view element attributes in the view. You may provide a custom function to generate\n// a key-value attribute pair to add/change/remove. If not provided, model attributes will be converted to view element\n// attributes on a one-to-one basis.\n//\n// *Note:** The provided attribute creator should always return the same `key` for a given attribute from the model.\n//\n// The converter automatically consumes the corresponding value from the consumables list and stops the event (see\n// {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher}).\n//\n//\t\tmodelDispatcher.on( 'attribute:customAttr:myElem', changeAttribute( ( value, data ) => {\n//\t\t\t// Change attribute key from `customAttr` to `class` in the view.\n//\t\t\tconst key = 'class';\n//\t\t\tlet value = data.attributeNewValue;\n//\n//\t\t\t// Force attribute value to 'empty' if the model element is empty.\n//\t\t\tif ( data.item.childCount === 0 ) {\n//\t\t\t\tvalue = 'empty';\n//\t\t\t}\n//\n//\t\t\t// Return the key-value pair.\n//\t\t\treturn { key, value };\n//\t\t} ) );\n//\n// @param {Function} [attributeCreator] Function returning an object with two properties: `key` and `value`, which\n// represent the attribute key and attribute value to be set on a {@link module:engine/view/element~Element view element}.\n// The function is passed the model attribute value as the first parameter and additional data about the change as the second parameter.\n// @returns {Function} Set/change attribute converter.\nfunction changeAttribute(attributeCreator) {\n  return function (evt, data, conversionApi) {\n    var oldAttribute = attributeCreator(data.attributeOldValue, data);\n    var newAttribute = attributeCreator(data.attributeNewValue, data);\n    if (!oldAttribute && !newAttribute) {\n      return;\n    }\n    if (!conversionApi.consumable.consume(data.item, evt.name)) {\n      return;\n    }\n    var viewElement = conversionApi.mapper.toViewElement(data.item);\n    var viewWriter = conversionApi.writer;\n\n    // If model item cannot be mapped to a view element, it means item is not an `Element` instance but a `TextProxy` node.\n    // Only elements can have attributes in a view so do not proceed for anything else (#1587).\n    if (!viewElement) {\n      /**\n       * This error occurs when a {@link module:engine/model/textproxy~TextProxy text node's} attribute is to be downcasted\n       * by {@link module:engine/conversion/conversion~Conversion#attributeToAttribute `Attribute to Attribute converter`}.\n       * In most cases it is caused by converters misconfiguration when only \"generic\" converter is defined:\n       *\n       *\t\teditor.conversion.for( 'downcast' ).attributeToAttribute( {\n       *\t\t\tmodel: 'attribute-name',\n       *\t\t\tview: 'attribute-name'\n       *\t\t} ) );\n       *\n       * and given attribute is used on text node, for example:\n       *\n       *\t\tmodel.change( writer => {\n       *\t\t\twriter.insertText( 'Foo', { 'attribute-name': 'bar' }, parent, 0 );\n       *\t\t} );\n       *\n       * In such cases, to convert the same attribute for both {@link module:engine/model/element~Element}\n       * and {@link module:engine/model/textproxy~TextProxy `Text`} nodes, text specific\n       * {@link module:engine/conversion/conversion~Conversion#attributeToElement `Attribute to Element converter`}\n       * with higher {@link module:utils/priorities~PriorityString priority} must also be defined:\n       *\n       *\t\teditor.conversion.for( 'downcast' ).attributeToElement( {\n       *\t\t\tmodel: {\n       *\t\t\t\tkey: 'attribute-name',\n       *\t\t\t\tname: '$text'\n       *\t\t\t},\n       *\t\t\tview: ( value, writer ) => {\n       *\t\t\t\treturn writer.createAttributeElement( 'span', { 'attribute-name': value } );\n       *\t\t\t},\n       *\t\t\tconverterPriority: 'high'\n       *\t\t} ) );\n       *\n       * @error conversion-attribute-to-attribute-on-text\n       */\n      throw new CKEditorError('conversion-attribute-to-attribute-on-text: ' + 'Trying to convert text node\\'s attribute with attribute-to-attribute converter.', [data, conversionApi]);\n    }\n\n    // First remove the old attribute if there was one.\n    if (data.attributeOldValue !== null && oldAttribute) {\n      if (oldAttribute.key == 'class') {\n        var classes = Array.isArray(oldAttribute.value) ? oldAttribute.value : [oldAttribute.value];\n        var _iterator6 = _createForOfIteratorHelper(classes),\n          _step6;\n        try {\n          for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n            var className = _step6.value;\n            viewWriter.removeClass(className, viewElement);\n          }\n        } catch (err) {\n          _iterator6.e(err);\n        } finally {\n          _iterator6.f();\n        }\n      } else if (oldAttribute.key == 'style') {\n        var keys = Object.keys(oldAttribute.value);\n        for (var _i = 0, _keys = keys; _i < _keys.length; _i++) {\n          var key = _keys[_i];\n          viewWriter.removeStyle(key, viewElement);\n        }\n      } else {\n        viewWriter.removeAttribute(oldAttribute.key, viewElement);\n      }\n    }\n\n    // Then set the new attribute.\n    if (data.attributeNewValue !== null && newAttribute) {\n      if (newAttribute.key == 'class') {\n        var _classes = Array.isArray(newAttribute.value) ? newAttribute.value : [newAttribute.value];\n        var _iterator7 = _createForOfIteratorHelper(_classes),\n          _step7;\n        try {\n          for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n            var _className = _step7.value;\n            viewWriter.addClass(_className, viewElement);\n          }\n        } catch (err) {\n          _iterator7.e(err);\n        } finally {\n          _iterator7.f();\n        }\n      } else if (newAttribute.key == 'style') {\n        var _keys2 = Object.keys(newAttribute.value);\n        for (var _i2 = 0, _keys3 = _keys2; _i2 < _keys3.length; _i2++) {\n          var _key = _keys3[_i2];\n          viewWriter.setStyle(_key, newAttribute.value[_key], viewElement);\n        }\n      } else {\n        viewWriter.setAttribute(newAttribute.key, newAttribute.value, viewElement);\n      }\n    }\n  };\n}\n\n// Function factory that creates a converter which converts the text inside marker's range. The converter wraps the text with\n// {@link module:engine/view/attributeelement~AttributeElement} created from the provided descriptor.\n// See {link module:engine/conversion/downcasthelpers~createViewElementFromHighlightDescriptor}.\n//\n// It can also be used to convert the selection that is inside a marker. In that case, an empty attribute element will be\n// created and the selection will be put inside it.\n//\n// If the highlight descriptor does not provide the `priority` property, `10` will be used.\n//\n// If the highlight descriptor does not provide the `id` property, the name of the marker will be used.\n//\n// This converter binds the created {@link module:engine/view/attributeelement~AttributeElement attribute elemens} with the marker name\n// using the {@link module:engine/conversion/mapper~Mapper#bindElementToMarker} method.\n//\n// @param {module:engine/conversion/downcasthelpers~HighlightDescriptor|Function} highlightDescriptor\n// @returns {Function}\nfunction highlightText(highlightDescriptor) {\n  return function (evt, data, conversionApi) {\n    if (!data.item) {\n      return;\n    }\n    if (!(data.item instanceof ModelSelection || data.item instanceof DocumentSelection) && !data.item.is('textProxy')) {\n      return;\n    }\n    var descriptor = prepareDescriptor(highlightDescriptor, data, conversionApi);\n    if (!descriptor) {\n      return;\n    }\n    if (!conversionApi.consumable.consume(data.item, evt.name)) {\n      return;\n    }\n    var viewElement = createViewElementFromHighlightDescriptor(descriptor);\n    var viewWriter = conversionApi.writer;\n    var viewSelection = viewWriter.document.selection;\n    if (data.item instanceof ModelSelection || data.item instanceof DocumentSelection) {\n      viewWriter.wrap(viewSelection.getFirstRange(), viewElement, viewSelection);\n    } else {\n      var viewRange = conversionApi.mapper.toViewRange(data.range);\n      var rangeAfterWrap = viewWriter.wrap(viewRange, viewElement);\n      var _iterator8 = _createForOfIteratorHelper(rangeAfterWrap.getItems()),\n        _step8;\n      try {\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n          var element = _step8.value;\n          if (element.is('attributeElement') && element.isSimilar(viewElement)) {\n            conversionApi.mapper.bindElementToMarker(element, data.markerName);\n\n            // One attribute element is enough, because all of them are bound together by the view writer.\n            // Mapper uses this binding to get all the elements no matter how many of them are registered in the mapper.\n            break;\n          }\n        }\n      } catch (err) {\n        _iterator8.e(err);\n      } finally {\n        _iterator8.f();\n      }\n    }\n  };\n}\n\n// Converter function factory. It creates a function which applies the marker's highlight to an element inside the marker's range.\n//\n// The converter checks if an element has the `addHighlight` function stored as a\n// {@link module:engine/view/element~Element#_setCustomProperty custom property} and, if so, uses it to apply the highlight.\n// In such case the converter will consume all element's children, assuming that they were handled by the element itself.\n//\n// When the `addHighlight` custom property is not present, the element is not converted in any special way.\n// This means that converters will proceed to convert the element's child nodes.\n//\n// If the highlight descriptor does not provide the `priority` property, `10` will be used.\n//\n// If the highlight descriptor does not provide the `id` property, the name of the marker will be used.\n//\n// This converter binds altered {@link module:engine/view/containerelement~ContainerElement container elements} with the marker name using\n// the {@link module:engine/conversion/mapper~Mapper#bindElementToMarker} method.\n//\n// @param {module:engine/conversion/downcasthelpers~HighlightDescriptor|Function} highlightDescriptor\n// @returns {Function}\nfunction highlightElement(highlightDescriptor) {\n  return function (evt, data, conversionApi) {\n    if (!data.item) {\n      return;\n    }\n    if (!(data.item instanceof ModelElement)) {\n      return;\n    }\n    var descriptor = prepareDescriptor(highlightDescriptor, data, conversionApi);\n    if (!descriptor) {\n      return;\n    }\n    if (!conversionApi.consumable.test(data.item, evt.name)) {\n      return;\n    }\n    var viewElement = conversionApi.mapper.toViewElement(data.item);\n    if (viewElement && viewElement.getCustomProperty('addHighlight')) {\n      // Consume element itself.\n      conversionApi.consumable.consume(data.item, evt.name);\n\n      // Consume all children nodes.\n      var _iterator9 = _createForOfIteratorHelper(ModelRange._createIn(data.item)),\n        _step9;\n      try {\n        for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n          var value = _step9.value;\n          conversionApi.consumable.consume(value.item, evt.name);\n        }\n      } catch (err) {\n        _iterator9.e(err);\n      } finally {\n        _iterator9.f();\n      }\n      viewElement.getCustomProperty('addHighlight')(viewElement, descriptor, conversionApi.writer);\n      conversionApi.mapper.bindElementToMarker(viewElement, data.markerName);\n    }\n  };\n}\n\n// Function factory that creates a converter which converts the removing model marker to the view.\n//\n// Both text nodes and elements are handled by this converter but they are handled a bit differently.\n//\n// Text nodes are unwrapped using the {@link module:engine/view/attributeelement~AttributeElement attribute element} created from the\n// provided highlight descriptor. See {link module:engine/conversion/downcasthelpers~HighlightDescriptor}.\n//\n// For elements, the converter checks if an element has the `removeHighlight` function stored as a\n// {@link module:engine/view/element~Element#_setCustomProperty custom property}. If so, it uses it to remove the highlight.\n// In such case, the children of that element will not be converted.\n//\n// When `removeHighlight` is not present, the element is not converted in any special way.\n// The converter will proceed to convert the element's child nodes instead.\n//\n// If the highlight descriptor does not provide the `priority` property, `10` will be used.\n//\n// If the highlight descriptor does not provide the `id` property, the name of the marker will be used.\n//\n// This converter unbinds elements from the marker name.\n//\n// @param {module:engine/conversion/downcasthelpers~HighlightDescriptor|Function} highlightDescriptor\n// @returns {Function}\nfunction removeHighlight(highlightDescriptor) {\n  return function (evt, data, conversionApi) {\n    // This conversion makes sense only for non-collapsed range.\n    if (data.markerRange.isCollapsed) {\n      return;\n    }\n    var descriptor = prepareDescriptor(highlightDescriptor, data, conversionApi);\n    if (!descriptor) {\n      return;\n    }\n\n    // View element that will be used to unwrap `AttributeElement`s.\n    var viewHighlightElement = createViewElementFromHighlightDescriptor(descriptor);\n\n    // Get all elements bound with given marker name.\n    var elements = conversionApi.mapper.markerNameToElements(data.markerName);\n    if (!elements) {\n      return;\n    }\n    var _iterator0 = _createForOfIteratorHelper(elements),\n      _step0;\n    try {\n      for (_iterator0.s(); !(_step0 = _iterator0.n()).done;) {\n        var element = _step0.value;\n        conversionApi.mapper.unbindElementFromMarkerName(element, data.markerName);\n        if (element.is('attributeElement')) {\n          conversionApi.writer.unwrap(conversionApi.writer.createRangeOn(element), viewHighlightElement);\n        } else {\n          // if element.is( 'containerElement' ).\n          element.getCustomProperty('removeHighlight')(element, descriptor.id, conversionApi.writer);\n        }\n      }\n    } catch (err) {\n      _iterator0.e(err);\n    } finally {\n      _iterator0.f();\n    }\n    conversionApi.writer.clearClonedElementsGroup(data.markerName);\n    evt.stop();\n  };\n}\n\n// Model element to view element conversion helper.\n//\n// See {@link ~DowncastHelpers#elementToElement `.elementToElement()` downcast helper} for examples.\n//\n// @param {Object} config Conversion configuration.\n// @param {String} config.model The name of the model element to convert.\n// @param {module:engine/view/elementdefinition~ElementDefinition|Function} config.view A view element definition or a function\n// that takes the model element and {@link module:engine/view/downcastwriter~DowncastWriter view downcast writer}\n// as parameters and returns a view container element.\n// @returns {Function} Conversion helper.\nfunction downcastElementToElement(config) {\n  config = cloneDeep(config);\n  config.view = normalizeToElementConfig(config.view, 'container');\n  return function (dispatcher) {\n    dispatcher.on('insert:' + config.model, insertElement(config.view), {\n      priority: config.converterPriority || 'normal'\n    });\n  };\n}\n\n// Model attribute to view element conversion helper.\n//\n// See {@link ~DowncastHelpers#attributeToElement `.attributeToElement()` downcast helper} for examples.\n//\n// @param {Object} config Conversion configuration.\n// @param {String|Object} config.model The key of the attribute to convert from or a `{ key, values }` object. `values` is an array\n// of `String`s with possible values if the model attribute is an enumerable.\n// @param {module:engine/view/elementdefinition~ElementDefinition|Function|Object} config.view A view element definition or a function\n// that takes the model attribute value and {@link module:engine/view/downcastwriter~DowncastWriter view downcast writer}\n// as parameters and returns a view attribute element. If `config.model.values` is\n// given, `config.view` should be an object assigning values from `config.model.values` to view element definitions or functions.\n// @param {module:utils/priorities~PriorityString} [config.converterPriority='normal'] Converter priority.\n// @returns {Function} Conversion helper.\nfunction downcastAttributeToElement(config) {\n  config = cloneDeep(config);\n  var modelKey = config.model.key ? config.model.key : config.model;\n  var eventName = 'attribute:' + modelKey;\n  if (config.model.name) {\n    eventName += ':' + config.model.name;\n  }\n  if (config.model.values) {\n    var _iterator1 = _createForOfIteratorHelper(config.model.values),\n      _step1;\n    try {\n      for (_iterator1.s(); !(_step1 = _iterator1.n()).done;) {\n        var modelValue = _step1.value;\n        config.view[modelValue] = normalizeToElementConfig(config.view[modelValue], 'attribute');\n      }\n    } catch (err) {\n      _iterator1.e(err);\n    } finally {\n      _iterator1.f();\n    }\n  } else {\n    config.view = normalizeToElementConfig(config.view, 'attribute');\n  }\n  var elementCreator = getFromAttributeCreator(config);\n  return function (dispatcher) {\n    dispatcher.on(eventName, wrap(elementCreator), {\n      priority: config.converterPriority || 'normal'\n    });\n  };\n}\n\n// Model attribute to view attribute conversion helper.\n//\n// See {@link ~DowncastHelpers#attributeToAttribute `.attributeToAttribute()` downcast helper} for examples.\n//\n// @param {Object} config Conversion configuration.\n// @param {String|Object} config.model The key of the attribute to convert from or a `{ key, values, [ name ] }` object describing\n// the attribute key, possible values and, optionally, an element name to convert from.\n// @param {String|Object|Function} config.view A view attribute key, or a `{ key, value }` object or a function that takes\n// the model attribute value and returns a `{ key, value }` object. If `key` is `'class'`, `value` can be a `String` or an\n// array of `String`s. If `key` is `'style'`, `value` is an object with key-value pairs. In other cases, `value` is a `String`.\n// If `config.model.values` is set, `config.view` should be an object assigning values from `config.model.values` to\n// `{ key, value }` objects or a functions.\n// @param {module:utils/priorities~PriorityString} [config.converterPriority='normal'] Converter priority.\n// @returns {Function} Conversion helper.\nfunction downcastAttributeToAttribute(config) {\n  config = cloneDeep(config);\n  var modelKey = config.model.key ? config.model.key : config.model;\n  var eventName = 'attribute:' + modelKey;\n  if (config.model.name) {\n    eventName += ':' + config.model.name;\n  }\n  if (config.model.values) {\n    var _iterator10 = _createForOfIteratorHelper(config.model.values),\n      _step10;\n    try {\n      for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n        var modelValue = _step10.value;\n        config.view[modelValue] = normalizeToAttributeConfig(config.view[modelValue]);\n      }\n    } catch (err) {\n      _iterator10.e(err);\n    } finally {\n      _iterator10.f();\n    }\n  } else {\n    config.view = normalizeToAttributeConfig(config.view);\n  }\n  var elementCreator = getFromAttributeCreator(config);\n  return function (dispatcher) {\n    dispatcher.on(eventName, changeAttribute(elementCreator), {\n      priority: config.converterPriority || 'normal'\n    });\n  };\n}\n\n// Model marker to view element conversion helper.\n//\n// See {@link ~DowncastHelpers#markerToElement `.markerToElement()` downcast helper} for examples.\n//\n// @param {Object} config Conversion configuration.\n// @param {String} config.model The name of the model marker (or model marker group) to convert.\n// @param {module:engine/view/elementdefinition~ElementDefinition|Function} config.view A view element definition or a function\n// that takes the model marker data as a parameter and returns a view UI element.\n// @param {module:utils/priorities~PriorityString} [config.converterPriority='normal'] Converter priority.\n// @returns {Function} Conversion helper.\nfunction downcastMarkerToElement(config) {\n  config = cloneDeep(config);\n  config.view = normalizeToElementConfig(config.view, 'ui');\n  return function (dispatcher) {\n    dispatcher.on('addMarker:' + config.model, insertUIElement(config.view), {\n      priority: config.converterPriority || 'normal'\n    });\n    dispatcher.on('removeMarker:' + config.model, removeUIElement(config.view), {\n      priority: config.converterPriority || 'normal'\n    });\n  };\n}\n\n// Model marker to highlight conversion helper.\n//\n// See {@link ~DowncastHelpers#markerToElement `.markerToElement()` downcast helper} for examples.\n//\n// @param {Object} config Conversion configuration.\n// @param {String} config.model The name of the model marker (or model marker group) to convert.\n// @param {module:engine/conversion/downcasthelpers~HighlightDescriptor|Function} config.view A highlight descriptor\n// that will be used for highlighting or a function that takes the model marker data as a parameter and returns a highlight descriptor.\n// @param {module:utils/priorities~PriorityString} [config.converterPriority='normal'] Converter priority.\n// @returns {Function} Conversion helper.\nfunction downcastMarkerToHighlight(config) {\n  return function (dispatcher) {\n    dispatcher.on('addMarker:' + config.model, highlightText(config.view), {\n      priority: config.converterPriority || 'normal'\n    });\n    dispatcher.on('addMarker:' + config.model, highlightElement(config.view), {\n      priority: config.converterPriority || 'normal'\n    });\n    dispatcher.on('removeMarker:' + config.model, removeHighlight(config.view), {\n      priority: config.converterPriority || 'normal'\n    });\n  };\n}\n\n// Takes `config.view`, and if it is an {@link module:engine/view/elementdefinition~ElementDefinition}, converts it\n// to a function (because lower level converters accept only element creator functions).\n//\n// @param {module:engine/view/elementdefinition~ElementDefinition|Function} view View configuration.\n// @param {'container'|'attribute'|'ui'} viewElementType View element type to create.\n// @returns {Function} Element creator function to use in lower level converters.\nfunction normalizeToElementConfig(view, viewElementType) {\n  if (typeof view == 'function') {\n    // If `view` is already a function, don't do anything.\n    return view;\n  }\n  return function (modelData, viewWriter) {\n    return createViewElementFromDefinition(view, viewWriter, viewElementType);\n  };\n}\n\n// Creates a view element instance from the provided {@link module:engine/view/elementdefinition~ElementDefinition} and class.\n//\n// @param {module:engine/view/elementdefinition~ElementDefinition} viewElementDefinition\n// @param {module:engine/view/downcastwriter~DowncastWriter} viewWriter\n// @param {'container'|'attribute'|'ui'} viewElementType\n// @returns {module:engine/view/element~Element}\nfunction createViewElementFromDefinition(viewElementDefinition, viewWriter, viewElementType) {\n  if (typeof viewElementDefinition == 'string') {\n    // If `viewElementDefinition` is given as a `String`, normalize it to an object with `name` property.\n    viewElementDefinition = {\n      name: viewElementDefinition\n    };\n  }\n  var element;\n  var attributes = Object.assign({}, viewElementDefinition.attributes);\n  if (viewElementType == 'container') {\n    element = viewWriter.createContainerElement(viewElementDefinition.name, attributes);\n  } else if (viewElementType == 'attribute') {\n    var options = {\n      priority: viewElementDefinition.priority || ViewAttributeElement.DEFAULT_PRIORITY\n    };\n    element = viewWriter.createAttributeElement(viewElementDefinition.name, attributes, options);\n  } else {\n    // 'ui'.\n    element = viewWriter.createUIElement(viewElementDefinition.name, attributes);\n  }\n  if (viewElementDefinition.styles) {\n    var keys = Object.keys(viewElementDefinition.styles);\n    for (var _i3 = 0, _keys4 = keys; _i3 < _keys4.length; _i3++) {\n      var key = _keys4[_i3];\n      viewWriter.setStyle(key, viewElementDefinition.styles[key], element);\n    }\n  }\n  if (viewElementDefinition.classes) {\n    var classes = viewElementDefinition.classes;\n    if (typeof classes == 'string') {\n      viewWriter.addClass(classes, element);\n    } else {\n      var _iterator11 = _createForOfIteratorHelper(classes),\n        _step11;\n      try {\n        for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n          var className = _step11.value;\n          viewWriter.addClass(className, element);\n        }\n      } catch (err) {\n        _iterator11.e(err);\n      } finally {\n        _iterator11.f();\n      }\n    }\n  }\n  return element;\n}\nfunction getFromAttributeCreator(config) {\n  if (config.model.values) {\n    return function (modelAttributeValue, viewWriter) {\n      var view = config.view[modelAttributeValue];\n      if (view) {\n        return view(modelAttributeValue, viewWriter);\n      }\n      return null;\n    };\n  } else {\n    return config.view;\n  }\n}\n\n// Takes the configuration, adds default parameters if they do not exist and normalizes other parameters to be used in downcast converters\n// for generating a view attribute.\n//\n// @param {Object} view View configuration.\nfunction normalizeToAttributeConfig(view) {\n  if (typeof view == 'string') {\n    return function (modelAttributeValue) {\n      return {\n        key: view,\n        value: modelAttributeValue\n      };\n    };\n  } else if (_typeof(view) == 'object') {\n    // { key, value, ... }\n    if (view.value) {\n      return function () {\n        return view;\n      };\n    }\n    // { key, ... }\n    else {\n      return function (modelAttributeValue) {\n        return {\n          key: view.key,\n          value: modelAttributeValue\n        };\n      };\n    }\n  } else {\n    // function.\n    return view;\n  }\n}\n\n// Helper function for `highlight`. Prepares the actual descriptor object using value passed to the converter.\nfunction prepareDescriptor(highlightDescriptor, data, conversionApi) {\n  // If passed descriptor is a creator function, call it. If not, just use passed value.\n  var descriptor = typeof highlightDescriptor == 'function' ? highlightDescriptor(data, conversionApi) : highlightDescriptor;\n  if (!descriptor) {\n    return null;\n  }\n\n  // Apply default descriptor priority.\n  if (!descriptor.priority) {\n    descriptor.priority = 10;\n  }\n\n  // Default descriptor id is marker name.\n  if (!descriptor.id) {\n    descriptor.id = data.markerName;\n  }\n  return descriptor;\n}\n\n/**\n * An object describing how the marker highlight should be represented in the view.\n *\n * Each text node contained in a highlighted range will be wrapped in a `<span>`\n * {@link module:engine/view/attributeelement~AttributeElement view attribute element} with CSS class(es), attributes and a priority\n * described by this object.\n *\n * Additionally, each {@link module:engine/view/containerelement~ContainerElement container element} can handle displaying the highlight\n * separately by providing the `addHighlight` and `removeHighlight` custom properties. In this case:\n *\n *  * The `HighlightDescriptor` object is passed to the `addHighlight` function upon conversion and should be used to apply the highlight to\n *  the element.\n *  * The descriptor `id` is passed to the `removeHighlight` function upon conversion and should be used to remove the highlight with the\n *  given ID from the element.\n *\n * @typedef {Object} module:engine/conversion/downcasthelpers~HighlightDescriptor\n *\n * @property {String|Array.<String>} classes A CSS class or an array of classes to set. If the descriptor is used to\n * create an {@link module:engine/view/attributeelement~AttributeElement attribute element} over text nodes, these classes will be set\n * on that attribute element. If the descriptor is applied to an element, usually these classes will be set on that element, however,\n * this depends on how the element converts the descriptor.\n *\n * @property {String} [id] Descriptor identifier. If not provided, it defaults to the converted marker's name.\n *\n * @property {Number} [priority] Descriptor priority. If not provided, it defaults to `10`. If the descriptor is used to create\n * an {@link module:engine/view/attributeelement~AttributeElement attribute element}, it will be that element's\n * {@link module:engine/view/attributeelement~AttributeElement#priority priority}. If the descriptor is applied to an element,\n * the priority will be used to determine which descriptor is more important.\n *\n * @property {Object} [attributes] Attributes to set. If the descriptor is used to create\n * an {@link module:engine/view/attributeelement~AttributeElement attribute element} over text nodes, these attributes will be set on that\n * attribute element. If the descriptor is applied to an element, usually these attributes will be set on that element, however,\n * this depends on how the element converts the descriptor.\n */","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/conversion/mapper\n */\n\nimport ModelPosition from '../model/position';\nimport ModelRange from '../model/range';\nimport ViewPosition from '../view/position';\nimport ViewRange from '../view/range';\nimport ViewText from '../view/text';\nimport EmitterMixin from '@ckeditor/ckeditor5-utils/src/emittermixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\n\n/**\n * Maps elements, positions and markers between {@link module:engine/view/document~Document the view} and\n * {@link module:engine/model/model the model}.\n *\n * The instance of the Mapper used for the editing pipeline is available in\n * {@link module:engine/controller/editingcontroller~EditingController#mapper `editor.editing.mapper`}.\n *\n * Mapper uses bound elements to find corresponding elements and positions, so, to get proper results,\n * all model elements should be {@link module:engine/conversion/mapper~Mapper#bindElements bound}.\n *\n * To map complex model to/from view relations, you may provide custom callbacks for\n * {@link module:engine/conversion/mapper~Mapper#event:modelToViewPosition modelToViewPosition event} and\n * {@link module:engine/conversion/mapper~Mapper#event:viewToModelPosition viewToModelPosition event} that are fired whenever\n * a position mapping request occurs.\n * Those events are fired by {@link module:engine/conversion/mapper~Mapper#toViewPosition toViewPosition}\n * and {@link module:engine/conversion/mapper~Mapper#toModelPosition toModelPosition} methods. `Mapper` adds it's own default callbacks\n * with `'lowest'` priority. To override default `Mapper` mapping, add custom callback with higher priority and\n * stop the event.\n */\nvar Mapper = /*#__PURE__*/function () {\n  /**\n   * Creates an instance of the mapper.\n   */\n  function Mapper() {\n    var _this = this;\n    _classCallCheck(this, Mapper);\n    /**\n     * Model element to view element mapping.\n     *\n     * @private\n     * @member {WeakMap}\n     */\n    this._modelToViewMapping = new WeakMap();\n\n    /**\n     * View element to model element mapping.\n     *\n     * @private\n     * @member {WeakMap}\n     */\n    this._viewToModelMapping = new WeakMap();\n\n    /**\n     * A map containing callbacks between view element names and functions evaluating length of view elements\n     * in model.\n     *\n     * @private\n     * @member {Map}\n     */\n    this._viewToModelLengthCallbacks = new Map();\n\n    /**\n     * Model marker name to view elements mapping.\n     *\n     * Keys are `String`s while values are `Set`s with {@link module:engine/view/element~Element view elements}.\n     * One marker (name) can be mapped to multiple elements.\n     *\n     * @private\n     * @member {Map}\n     */\n    this._markerNameToElements = new Map();\n\n    /**\n     * View element to model marker names mapping.\n     *\n     * This is reverse to {@link ~Mapper#_markerNameToElements} map.\n     *\n     * @private\n     * @member {Map}\n     */\n    this._elementToMarkerNames = new Map();\n\n    /**\n     * Stores marker names of markers which has changed due to unbinding a view element (so it is assumed that the view element\n     * has been removed, moved or renamed).\n     *\n     * @private\n     * @member {Set.<module:engine/model/markercollection~Marker>}\n     */\n    this._unboundMarkerNames = new Set();\n\n    // Default mapper algorithm for mapping model position to view position.\n    this.on('modelToViewPosition', function (evt, data) {\n      if (data.viewPosition) {\n        return;\n      }\n      var viewContainer = _this._modelToViewMapping.get(data.modelPosition.parent);\n      data.viewPosition = _this._findPositionIn(viewContainer, data.modelPosition.offset);\n    }, {\n      priority: 'low'\n    });\n\n    // Default mapper algorithm for mapping view position to model position.\n    this.on('viewToModelPosition', function (evt, data) {\n      if (data.modelPosition) {\n        return;\n      }\n      var viewBlock = _this.findMappedViewAncestor(data.viewPosition);\n      var modelParent = _this._viewToModelMapping.get(viewBlock);\n      var modelOffset = _this._toModelOffset(data.viewPosition.parent, data.viewPosition.offset, viewBlock);\n      data.modelPosition = ModelPosition._createAt(modelParent, modelOffset);\n    }, {\n      priority: 'low'\n    });\n  }\n\n  /**\n   * Marks model and view elements as corresponding. Corresponding elements can be retrieved by using\n   * the {@link module:engine/conversion/mapper~Mapper#toModelElement toModelElement} and\n   * {@link module:engine/conversion/mapper~Mapper#toViewElement toViewElement} methods.\n   * The information that elements are bound is also used to translate positions.\n   *\n   * @param {module:engine/model/element~Element} modelElement Model element.\n   * @param {module:engine/view/element~Element} viewElement View element.\n   */\n  return _createClass(Mapper, [{\n    key: \"bindElements\",\n    value: function bindElements(modelElement, viewElement) {\n      this._modelToViewMapping.set(modelElement, viewElement);\n      this._viewToModelMapping.set(viewElement, modelElement);\n    }\n\n    /**\n     * Unbinds given {@link module:engine/view/element~Element view element} from the map.\n     *\n     * **Note:** view-to-model binding will be removed, if it existed. However, corresponding model-to-view binding\n     * will be removed only if model element is still bound to passed `viewElement`.\n     *\n     * This behavior lets for re-binding model element to another view element without fear of losing the new binding\n     * when the previously bound view element is unbound.\n     *\n     * @param {module:engine/view/element~Element} viewElement View element to unbind.\n     */\n  }, {\n    key: \"unbindViewElement\",\n    value: function unbindViewElement(viewElement) {\n      var modelElement = this.toModelElement(viewElement);\n      this._viewToModelMapping.delete(viewElement);\n      if (this._elementToMarkerNames.has(viewElement)) {\n        var _iterator = _createForOfIteratorHelper(this._elementToMarkerNames.get(viewElement)),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var markerName = _step.value;\n            this._unboundMarkerNames.add(markerName);\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      }\n      if (this._modelToViewMapping.get(modelElement) == viewElement) {\n        this._modelToViewMapping.delete(modelElement);\n      }\n    }\n\n    /**\n     * Unbinds given {@link module:engine/model/element~Element model element} from the map.\n     *\n     * **Note:** model-to-view binding will be removed, if it existed. However, corresponding view-to-model binding\n     * will be removed only if view element is still bound to passed `modelElement`.\n     *\n     * This behavior lets for re-binding view element to another model element without fear of losing the new binding\n     * when the previously bound model element is unbound.\n     *\n     * @param {module:engine/model/element~Element} modelElement Model element to unbind.\n     */\n  }, {\n    key: \"unbindModelElement\",\n    value: function unbindModelElement(modelElement) {\n      var viewElement = this.toViewElement(modelElement);\n      this._modelToViewMapping.delete(modelElement);\n      if (this._viewToModelMapping.get(viewElement) == modelElement) {\n        this._viewToModelMapping.delete(viewElement);\n      }\n    }\n\n    /**\n     * Binds given marker name with given {@link module:engine/view/element~Element view element}. The element\n     * will be added to the current set of elements bound with given marker name.\n     *\n     * @param {module:engine/view/element~Element} element Element to bind.\n     * @param {String} name Marker name.\n     */\n  }, {\n    key: \"bindElementToMarker\",\n    value: function bindElementToMarker(element, name) {\n      var elements = this._markerNameToElements.get(name) || new Set();\n      elements.add(element);\n      var names = this._elementToMarkerNames.get(element) || new Set();\n      names.add(name);\n      this._markerNameToElements.set(name, elements);\n      this._elementToMarkerNames.set(element, names);\n    }\n\n    /**\n     * Unbinds an element from given marker name.\n     *\n     * @param {module:engine/view/element~Element} element Element to unbind.\n     * @param {String} name Marker name.\n     */\n  }, {\n    key: \"unbindElementFromMarkerName\",\n    value: function unbindElementFromMarkerName(element, name) {\n      var nameToElements = this._markerNameToElements.get(name);\n      if (nameToElements) {\n        nameToElements.delete(element);\n        if (nameToElements.size == 0) {\n          this._markerNameToElements.delete(name);\n        }\n      }\n      var elementToNames = this._elementToMarkerNames.get(element);\n      if (elementToNames) {\n        elementToNames.delete(name);\n        if (elementToNames.size == 0) {\n          this._elementToMarkerNames.delete(element);\n        }\n      }\n    }\n\n    /**\n     * Returns all marker names of markers which has changed due to unbinding a view element (so it is assumed that the view element\n     * has been removed, moved or renamed) since the last flush. After returning, the marker names list is cleared.\n     *\n     * @returns {Array.<String>}\n     */\n  }, {\n    key: \"flushUnboundMarkerNames\",\n    value: function flushUnboundMarkerNames() {\n      var markerNames = Array.from(this._unboundMarkerNames);\n      this._unboundMarkerNames.clear();\n      return markerNames;\n    }\n\n    /**\n     * Removes all model to view and view to model bindings.\n     */\n  }, {\n    key: \"clearBindings\",\n    value: function clearBindings() {\n      this._modelToViewMapping = new WeakMap();\n      this._viewToModelMapping = new WeakMap();\n      this._markerNameToElements = new Map();\n      this._elementToMarkerNames = new Map();\n      this._unboundMarkerNames = new Set();\n    }\n\n    /**\n     * Gets the corresponding model element.\n     *\n     * **Note:** {@link module:engine/view/uielement~UIElement} does not have corresponding element in model.\n     *\n     * @param {module:engine/view/element~Element} viewElement View element.\n     * @returns {module:engine/model/element~Element|undefined} Corresponding model element or `undefined` if not found.\n     */\n  }, {\n    key: \"toModelElement\",\n    value: function toModelElement(viewElement) {\n      return this._viewToModelMapping.get(viewElement);\n    }\n\n    /**\n     * Gets the corresponding view element.\n     *\n     * @param {module:engine/model/element~Element} modelElement Model element.\n     * @returns {module:engine/view/element~Element|undefined} Corresponding view element or `undefined` if not found.\n     */\n  }, {\n    key: \"toViewElement\",\n    value: function toViewElement(modelElement) {\n      return this._modelToViewMapping.get(modelElement);\n    }\n\n    /**\n     * Gets the corresponding model range.\n     *\n     * @param {module:engine/view/range~Range} viewRange View range.\n     * @returns {module:engine/model/range~Range} Corresponding model range.\n     */\n  }, {\n    key: \"toModelRange\",\n    value: function toModelRange(viewRange) {\n      return new ModelRange(this.toModelPosition(viewRange.start), this.toModelPosition(viewRange.end));\n    }\n\n    /**\n     * Gets the corresponding view range.\n     *\n     * @param {module:engine/model/range~Range} modelRange Model range.\n     * @returns {module:engine/view/range~Range} Corresponding view range.\n     */\n  }, {\n    key: \"toViewRange\",\n    value: function toViewRange(modelRange) {\n      return new ViewRange(this.toViewPosition(modelRange.start), this.toViewPosition(modelRange.end));\n    }\n\n    /**\n     * Gets the corresponding model position.\n     *\n     * @fires viewToModelPosition\n     * @param {module:engine/view/position~Position} viewPosition View position.\n     * @returns {module:engine/model/position~Position} Corresponding model position.\n     */\n  }, {\n    key: \"toModelPosition\",\n    value: function toModelPosition(viewPosition) {\n      var data = {\n        viewPosition: viewPosition,\n        mapper: this\n      };\n      this.fire('viewToModelPosition', data);\n      return data.modelPosition;\n    }\n\n    /**\n     * Gets the corresponding view position.\n     *\n     * @fires modelToViewPosition\n     * @param {module:engine/model/position~Position} modelPosition Model position.\n     * @param {Object} [options] Additional options for position mapping process.\n     * @param {Boolean} [options.isPhantom=false] Should be set to `true` if the model position to map is pointing to a place\n     * in model tree which no longer exists. For example, it could be an end of a removed model range.\n     * @returns {module:engine/view/position~Position} Corresponding view position.\n     */\n  }, {\n    key: \"toViewPosition\",\n    value: function toViewPosition(modelPosition) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n        isPhantom: false\n      };\n      var data = {\n        modelPosition: modelPosition,\n        mapper: this,\n        isPhantom: options.isPhantom\n      };\n      this.fire('modelToViewPosition', data);\n      return data.viewPosition;\n    }\n\n    /**\n     * Gets all view elements bound to the given marker name.\n     *\n     * @param {String} name Marker name.\n     * @returns {Set.<module:engine/view/element~Element>|null} View elements bound with given marker name or `null`\n     * if no elements are bound to given marker name.\n     */\n  }, {\n    key: \"markerNameToElements\",\n    value: function markerNameToElements(name) {\n      var boundElements = this._markerNameToElements.get(name);\n      if (!boundElements) {\n        return null;\n      }\n      var elements = new Set();\n      var _iterator2 = _createForOfIteratorHelper(boundElements),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var element = _step2.value;\n          if (element.is('attributeElement')) {\n            var _iterator3 = _createForOfIteratorHelper(element.getElementsWithSameId()),\n              _step3;\n            try {\n              for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n                var clone = _step3.value;\n                elements.add(clone);\n              }\n            } catch (err) {\n              _iterator3.e(err);\n            } finally {\n              _iterator3.f();\n            }\n          } else {\n            elements.add(element);\n          }\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      return elements;\n    }\n\n    /**\n     * Registers a callback that evaluates the length in the model of a view element with given name.\n     *\n     * The callback is fired with one argument, which is a view element instance. The callback is expected to return\n     * a number representing the length of view element in model.\n     *\n     *\t\t// List item in view may contain nested list, which have other list items. In model though,\n     *\t\t// the lists are represented by flat structure. Because of those differences, length of list view element\n     *\t\t// may be greater than one. In the callback it's checked how many nested list items are in evaluated list item.\n     *\n     *\t\tfunction getViewListItemLength( element ) {\n     *\t\t\tlet length = 1;\n     *\n     *\t\t\tfor ( let child of element.getChildren() ) {\n     *\t\t\t\tif ( child.name == 'ul' || child.name == 'ol' ) {\n     *\t\t\t\t\tfor ( let item of child.getChildren() ) {\n     *\t\t\t\t\t\tlength += getViewListItemLength( item );\n     *\t\t\t\t\t}\n     *\t\t\t\t}\n     *\t\t\t}\n     *\n     *\t\t\treturn length;\n     *\t\t}\n     *\n     *\t\tmapper.registerViewToModelLength( 'li', getViewListItemLength );\n     *\n     * @param {String} viewElementName Name of view element for which callback is registered.\n     * @param {Function} lengthCallback Function return a length of view element instance in model.\n     */\n  }, {\n    key: \"registerViewToModelLength\",\n    value: function registerViewToModelLength(viewElementName, lengthCallback) {\n      this._viewToModelLengthCallbacks.set(viewElementName, lengthCallback);\n    }\n\n    /**\n     * For given `viewPosition`, finds and returns the closest ancestor of this position that has a mapping to\n     * the model.\n     *\n     * @param {module:engine/view/position~Position} viewPosition Position for which mapped ancestor should be found.\n     * @returns {module:engine/view/element~Element}\n     */\n  }, {\n    key: \"findMappedViewAncestor\",\n    value: function findMappedViewAncestor(viewPosition) {\n      var parent = viewPosition.parent;\n      while (!this._viewToModelMapping.has(parent)) {\n        parent = parent.parent;\n      }\n      return parent;\n    }\n\n    /**\n     * Calculates model offset based on the view position and the block element.\n     *\n     * Example:\n     *\n     *\t\t<p>foo<b>ba|r</b></p> // _toModelOffset( b, 2, p ) -> 5\n     *\n     * Is a sum of:\n     *\n     *\t\t<p>foo|<b>bar</b></p> // _toModelOffset( p, 3, p ) -> 3\n     *\t\t<p>foo<b>ba|r</b></p> // _toModelOffset( b, 2, b ) -> 2\n     *\n     * @private\n     * @param {module:engine/view/element~Element} viewParent Position parent.\n     * @param {Number} viewOffset Position offset.\n     * @param {module:engine/view/element~Element} viewBlock Block used as a base to calculate offset.\n     * @returns {Number} Offset in the model.\n     */\n  }, {\n    key: \"_toModelOffset\",\n    value: function _toModelOffset(viewParent, viewOffset, viewBlock) {\n      if (viewBlock != viewParent) {\n        // See example.\n        var offsetToParentStart = this._toModelOffset(viewParent.parent, viewParent.index, viewBlock);\n        var offsetInParent = this._toModelOffset(viewParent, viewOffset, viewParent);\n        return offsetToParentStart + offsetInParent;\n      }\n\n      // viewBlock == viewParent, so we need to calculate the offset in the parent element.\n\n      // If the position is a text it is simple (\"ba|r\" -> 2).\n      if (viewParent.is('text')) {\n        return viewOffset;\n      }\n\n      // If the position is in an element we need to sum lengths of siblings ( <b> bar </b> foo | -> 3 + 3 = 6 ).\n      var modelOffset = 0;\n      for (var i = 0; i < viewOffset; i++) {\n        modelOffset += this.getModelLength(viewParent.getChild(i));\n      }\n      return modelOffset;\n    }\n\n    /**\n     * Gets the length of the view element in the model.\n     *\n     * The length is calculated as follows:\n     * * if {@link #registerViewToModelLength length mapping callback} is provided for given `viewNode` it is used to\n     * evaluate model length (`viewNode` is used as first and only parameter passed to the callback),\n     * * length of a {@link module:engine/view/text~Text text node} is equal to the length of it's\n     * {@link module:engine/view/text~Text#data data},\n     * * length of a {@link module:engine/view/uielement~UIElement ui element} is equal to 0,\n     * * length of a mapped {@link module:engine/view/element~Element element} is equal to 1,\n     * * length of a not-mapped {@link module:engine/view/element~Element element} is equal to the length of it's children.\n     *\n     * Examples:\n     *\n     *\t\tfoo                          -> 3 // Text length is equal to it's data length.\n     *\t\t<p>foo</p>                   -> 1 // Length of an element which is mapped is by default equal to 1.\n     *\t\t<b>foo</b>                   -> 3 // Length of an element which is not mapped is a length of its children.\n     *\t\t<div><p>x</p><p>y</p></div>  -> 2 // Assuming that <div> is not mapped and <p> are mapped.\n     *\n     * @param {module:engine/view/element~Element} viewNode View node.\n     * @returns {Number} Length of the node in the tree model.\n     */\n  }, {\n    key: \"getModelLength\",\n    value: function getModelLength(viewNode) {\n      if (this._viewToModelLengthCallbacks.get(viewNode.name)) {\n        var callback = this._viewToModelLengthCallbacks.get(viewNode.name);\n        return callback(viewNode);\n      } else if (this._viewToModelMapping.has(viewNode)) {\n        return 1;\n      } else if (viewNode.is('text')) {\n        return viewNode.data.length;\n      } else if (viewNode.is('uiElement')) {\n        return 0;\n      } else {\n        var len = 0;\n        var _iterator4 = _createForOfIteratorHelper(viewNode.getChildren()),\n          _step4;\n        try {\n          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n            var child = _step4.value;\n            len += this.getModelLength(child);\n          }\n        } catch (err) {\n          _iterator4.e(err);\n        } finally {\n          _iterator4.f();\n        }\n        return len;\n      }\n    }\n\n    /**\n     * Finds the position in the view node (or its children) with the expected model offset.\n     *\n     * Example:\n     *\n     *\t\t<p>fo<b>bar</b>bom</p> -> expected offset: 4\n     *\n     *\t\t_findPositionIn( p, 4 ):\n     *\t\t<p>|fo<b>bar</b>bom</p> -> expected offset: 4, actual offset: 0\n     *\t\t<p>fo|<b>bar</b>bom</p> -> expected offset: 4, actual offset: 2\n     *\t\t<p>fo<b>bar</b>|bom</p> -> expected offset: 4, actual offset: 5 -> we are too far\n     *\n     *\t\t_findPositionIn( b, 4 - ( 5 - 3 ) ):\n     *\t\t<p>fo<b>|bar</b>bom</p> -> expected offset: 2, actual offset: 0\n     *\t\t<p>fo<b>bar|</b>bom</p> -> expected offset: 2, actual offset: 3 -> we are too far\n     *\n     *\t\t_findPositionIn( bar, 2 - ( 3 - 3 ) ):\n     *\t\tWe are in the text node so we can simple find the offset.\n     *\t\t<p>fo<b>ba|r</b>bom</p> -> expected offset: 2, actual offset: 2 -> position found\n     *\n     * @private\n     * @param {module:engine/view/element~Element} viewParent Tree view element in which we are looking for the position.\n     * @param {Number} expectedOffset Expected offset.\n     * @returns {module:engine/view/position~Position} Found position.\n     */\n  }, {\n    key: \"_findPositionIn\",\n    value: function _findPositionIn(viewParent, expectedOffset) {\n      // Last scanned view node.\n      var viewNode;\n      // Length of the last scanned view node.\n      var lastLength = 0;\n      var modelOffset = 0;\n      var viewOffset = 0;\n\n      // In the text node it is simple: offset in the model equals offset in the text.\n      if (viewParent.is('text')) {\n        return new ViewPosition(viewParent, expectedOffset);\n      }\n\n      // In other cases we add lengths of child nodes to find the proper offset.\n\n      // If it is smaller we add the length.\n      while (modelOffset < expectedOffset) {\n        viewNode = viewParent.getChild(viewOffset);\n        lastLength = this.getModelLength(viewNode);\n        modelOffset += lastLength;\n        viewOffset++;\n      }\n\n      // If it equals we found the position.\n      if (modelOffset == expectedOffset) {\n        return this._moveViewPositionToTextNode(new ViewPosition(viewParent, viewOffset));\n      }\n      // If it is higher we need to enter last child.\n      else {\n        // ( modelOffset - lastLength ) is the offset to the child we enter,\n        // so we subtract it from the expected offset to fine the offset in the child.\n        return this._findPositionIn(viewNode, expectedOffset - (modelOffset - lastLength));\n      }\n    }\n\n    /**\n     * Because we prefer positions in text nodes over positions next to text node moves view position to the text node\n     * if it was next to it.\n     *\n     *\t\t<p>[]<b>foo</b></p> -> <p>[]<b>foo</b></p> // do not touch if position is not directly next to text\n     *\t\t<p>foo[]<b>foo</b></p> -> <p>foo{}<b>foo</b></p> // move to text node\n     *\t\t<p><b>[]foo</b></p> -> <p><b>{}foo</b></p> // move to text node\n     *\n     * @private\n     * @param {module:engine/view/position~Position} viewPosition Position potentially next to text node.\n     * @returns {module:engine/view/position~Position} Position in text node if possible.\n     */\n  }, {\n    key: \"_moveViewPositionToTextNode\",\n    value: function _moveViewPositionToTextNode(viewPosition) {\n      // If the position is just after text node, put it at the end of that text node.\n      // If the position is just before text node, put it at the beginning of that text node.\n      var nodeBefore = viewPosition.nodeBefore;\n      var nodeAfter = viewPosition.nodeAfter;\n      if (nodeBefore instanceof ViewText) {\n        return new ViewPosition(nodeBefore, nodeBefore.data.length);\n      } else if (nodeAfter instanceof ViewText) {\n        return new ViewPosition(nodeAfter, 0);\n      }\n\n      // Otherwise, just return the given position.\n      return viewPosition;\n    }\n\n    /**\n     * Fired for each model-to-view position mapping request. The purpose of this event is to enable custom model-to-view position\n     * mapping. Callbacks added to this event take {@link module:engine/model/position~Position model position} and are expected to\n     * calculate {@link module:engine/view/position~Position view position}. Calculated view position should be added as `viewPosition`\n     * value in `data` object that is passed as one of parameters to the event callback.\n     *\n     * \t\t// Assume that \"captionedImage\" model element is converted to <img> and following <span> elements in view,\n     * \t\t// and the model element is bound to <img> element. Force mapping model positions inside \"captionedImage\" to that\n     * \t\t// <span> element.\n     *\t\tmapper.on( 'modelToViewPosition', ( evt, data ) => {\n     *\t\t\tconst positionParent = modelPosition.parent;\n     *\n     *\t\t\tif ( positionParent.name == 'captionedImage' ) {\n     *\t\t\t\tconst viewImg = data.mapper.toViewElement( positionParent );\n     *\t\t\t\tconst viewCaption = viewImg.nextSibling; // The <span> element.\n     *\n     *\t\t\t\tdata.viewPosition = new ViewPosition( viewCaption, modelPosition.offset );\n     *\n     *\t\t\t\t// Stop the event if other callbacks should not modify calculated value.\n     *\t\t\t\tevt.stop();\n     *\t\t\t}\n     *\t\t} );\n     *\n     * **Note:** keep in mind that sometimes a \"phantom\" model position is being converted. \"Phantom\" model position is\n     * a position that points to a non-existing place in model. Such position might still be valid for conversion, though\n     * (it would point to a correct place in view when converted). One example of such situation is when a range is\n     * removed from model, there may be a need to map the range's end (which is no longer valid model position). To\n     * handle such situation, check `data.isPhantom` flag:\n     *\n     * \t\t// Assume that there is \"customElement\" model element and whenever position is before it, we want to move it\n     * \t\t// to the inside of the view element bound to \"customElement\".\n     *\t\tmapper.on( 'modelToViewPosition', ( evt, data ) => {\n     *\t\t\tif ( data.isPhantom ) {\n     *\t\t\t\treturn;\n     *\t\t\t}\n     *\n     *\t\t\t// Below line might crash for phantom position that does not exist in model.\n     *\t\t\tconst sibling = data.modelPosition.nodeBefore;\n     *\n     *\t\t\t// Check if this is the element we are interested in.\n     *\t\t\tif ( !sibling.is( 'customElement' ) ) {\n     *\t\t\t\treturn;\n     *\t\t\t}\n     *\n     *\t\t\tconst viewElement = data.mapper.toViewElement( sibling );\n     *\n     *\t\t\tdata.viewPosition = new ViewPosition( sibling, 0 );\n     *\n     *\t\t\tevt.stop();\n     *\t\t} );\n     *\n     * **Note:** default mapping callback is provided with `low` priority setting and does not cancel the event, so it is possible to\n     * attach a custom callback after default callback and also use `data.viewPosition` calculated by default callback\n     * (for example to fix it).\n     *\n     * **Note:** default mapping callback will not fire if `data.viewPosition` is already set.\n     *\n     * **Note:** these callbacks are called **very often**. For efficiency reasons, it is advised to use them only when position\n     * mapping between given model and view elements is unsolvable using just elements mapping and default algorithm. Also,\n     * the condition that checks if special case scenario happened should be as simple as possible.\n     *\n     * @event modelToViewPosition\n     * @param {Object} data Data pipeline object that can store and pass data between callbacks. The callback should add\n     * `viewPosition` value to that object with calculated {@link module:engine/view/position~Position view position}.\n     * @param {module:engine/conversion/mapper~Mapper} data.mapper Mapper instance that fired the event.\n     */\n\n    /**\n     * Fired for each view-to-model position mapping request. See {@link module:engine/conversion/mapper~Mapper#event:modelToViewPosition}.\n     *\n     * \t\t// See example in `modelToViewPosition` event description.\n     * \t\t// This custom mapping will map positions from <span> element next to <img> to the \"captionedImage\" element.\n     *\t\tmapper.on( 'viewToModelPosition', ( evt, data ) => {\n     *\t\t\tconst positionParent = viewPosition.parent;\n     *\n     *\t\t\tif ( positionParent.hasClass( 'image-caption' ) ) {\n     *\t\t\t\tconst viewImg = positionParent.previousSibling;\n     *\t\t\t\tconst modelImg = data.mapper.toModelElement( viewImg );\n     *\n     *\t\t\t\tdata.modelPosition = new ModelPosition( modelImg, viewPosition.offset );\n     *\t\t\t\tevt.stop();\n     *\t\t\t}\n     *\t\t} );\n     *\n     * **Note:** default mapping callback is provided with `low` priority setting and does not cancel the event, so it is possible to\n     * attach a custom callback after default callback and also use `data.modelPosition` calculated by default callback\n     * (for example to fix it).\n     *\n     * **Note:** default mapping callback will not fire if `data.modelPosition` is already set.\n     *\n     * **Note:** these callbacks are called **very often**. For efficiency reasons, it is advised to use them only when position\n     * mapping between given model and view elements is unsolvable using just elements mapping and default algorithm. Also,\n     * the condition that checks if special case scenario happened should be as simple as possible.\n     *\n     * @event viewToModelPosition\n     * @param {Object} data Data pipeline object that can store and pass data between callbacks. The callback should add\n     * `modelPosition` value to that object with calculated {@link module:engine/model/position~Position model position}.\n     * @param {module:engine/conversion/mapper~Mapper} data.mapper Mapper instance that fired the event.\n     */\n  }]);\n}();\nexport { Mapper as default };\nmix(Mapper, EmitterMixin);","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.regexp.test.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/conversion/modelconsumable\n */\n\nimport TextProxy from '../model/textproxy';\n\n/**\n * Manages a list of consumable values for {@link module:engine/model/item~Item model items}.\n *\n * Consumables are various aspects of the model. A model item can be broken down into singular properties that might be\n * taken into consideration when converting that item.\n *\n * `ModelConsumable` is used by {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher} while analyzing changed\n * parts of {@link module:engine/model/document~Document the document}. The added / changed / removed model items are broken down\n * into singular properties (the item itself and it's attributes). All those parts are saved in `ModelConsumable`. Then,\n * during conversion, when given part of model item is converted (i.e. the view element has been inserted into the view,\n * but without attributes), consumable value is removed from `ModelConsumable`.\n *\n * For model items, `ModelConsumable` stores consumable values of one of following types: `insert`, `addattribute:<attributeKey>`,\n * `changeattributes:<attributeKey>`, `removeattributes:<attributeKey>`.\n *\n * In most cases, it is enough to let {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher}\n * gather consumable values, so there is no need to use\n * {@link module:engine/conversion/modelconsumable~ModelConsumable#add add method} directly.\n * However, it is important to understand how consumable values can be\n * {@link module:engine/conversion/modelconsumable~ModelConsumable#consume consumed}.\n * See {@link module:engine/conversion/downcasthelpers default downcast converters} for more information.\n *\n * Keep in mind, that one conversion event may have multiple callbacks (converters) attached to it. Each of those is\n * able to convert one or more parts of the model. However, when one of those callbacks actually converts\n * something, other should not, because they would duplicate the results. Using `ModelConsumable` helps avoiding\n * this situation, because callbacks should only convert those values, which were not yet consumed from `ModelConsumable`.\n *\n * Consuming multiple values in a single callback:\n *\n *\t\t// Converter for custom `image` element that might have a `caption` element inside which changes\n *\t\t// how the image is displayed in the view:\n *\t\t//\n *\t\t// Model:\n *\t\t//\n *\t\t// [image]\n *\t\t//   └─ [caption]\n *\t\t//       └─ foo\n *\t\t//\n *\t\t// View:\n *\t\t//\n *\t\t// <figure>\n *\t\t//   ├─ <img />\n *\t\t//   └─ <caption>\n *\t\t//       └─ foo\n *\t\tmodelConversionDispatcher.on( 'insert:image', ( evt, data, conversionApi ) => {\n *\t\t\t// First, consume the `image` element.\n *\t\t\tconversionApi.consumable.consume( data.item, 'insert' );\n *\n *\t\t\t// Just create normal image element for the view.\n *\t\t\t// Maybe it will be \"decorated\" later.\n *\t\t\tconst viewImage = new ViewElement( 'img' );\n *\t\t\tconst insertPosition = conversionApi.mapper.toViewPosition( data.range.start );\n *\t\t\tconst viewWriter = conversionApi.writer;\n *\n *\t\t\t// Check if the `image` element has children.\n *\t\t\tif ( data.item.childCount > 0 ) {\n *\t\t\t\tconst modelCaption = data.item.getChild( 0 );\n *\n *\t\t\t\t// `modelCaption` insertion change is consumed from consumable values.\n *\t\t\t\t// It will not be converted by other converters, but it's children (probably some text) will be.\n *\t\t\t\t// Through mapping, converters for text will know where to insert contents of `modelCaption`.\n *\t\t\t\tif ( conversionApi.consumable.consume( modelCaption, 'insert' ) ) {\n *\t\t\t\t\tconst viewCaption = new ViewElement( 'figcaption' );\n *\n *\t\t\t\t\tconst viewImageHolder = new ViewElement( 'figure', null, [ viewImage, viewCaption ] );\n *\n *\t\t\t\t\tconversionApi.mapper.bindElements( modelCaption, viewCaption );\n *\t\t\t\t\tconversionApi.mapper.bindElements( data.item, viewImageHolder );\n *\t\t\t\t\tviewWriter.insert( insertPosition, viewImageHolder );\n *\t\t\t\t}\n *\t\t\t} else {\n *\t\t\t\tconversionApi.mapper.bindElements( data.item, viewImage );\n *\t\t\t\tviewWriter.insert( insertPosition, viewImage );\n *\t\t\t}\n *\n *\t\t\tevt.stop();\n *\t\t} );\n */\nvar ModelConsumable = /*#__PURE__*/function () {\n  /**\n   * Creates an empty consumables list.\n   */\n  function ModelConsumable() {\n    _classCallCheck(this, ModelConsumable);\n    /**\n     * Contains list of consumable values.\n     *\n     * @private\n     * @member {Map} module:engine/conversion/modelconsumable~ModelConsumable#_consumable\n     */\n    this._consumable = new Map();\n\n    /**\n     * For each {@link module:engine/model/textproxy~TextProxy} added to `ModelConsumable`, this registry holds parent\n     * of that `TextProxy` and start and end indices of that `TextProxy`. This allows identification of `TextProxy`\n     * instances that points to the same part of the model but are different instances. Each distinct `TextProxy`\n     * is given unique `Symbol` which is then registered as consumable. This process is transparent for `ModelConsumable`\n     * API user because whenever `TextProxy` is added, tested, consumed or reverted, internal mechanisms of\n     * `ModelConsumable` translates `TextProxy` to that unique `Symbol`.\n     *\n     * @private\n     * @member {Map} module:engine/conversion/modelconsumable~ModelConsumable#_textProxyRegistry\n     */\n    this._textProxyRegistry = new Map();\n  }\n\n  /**\n   * Adds a consumable value to the consumables list and links it with given model item.\n   *\n   *\t\tmodelConsumable.add( modelElement, 'insert' ); // Add `modelElement` insertion change to consumable values.\n   *\t\tmodelConsumable.add( modelElement, 'addAttribute:bold' ); // Add `bold` attribute insertion on `modelElement` change.\n   *\t\tmodelConsumable.add( modelElement, 'removeAttribute:bold' ); // Add `bold` attribute removal on `modelElement` change.\n   *\t\tmodelConsumable.add( modelSelection, 'selection' ); // Add `modelSelection` to consumable values.\n   *\t\tmodelConsumable.add( modelRange, 'range' ); // Add `modelRange` to consumable values.\n   *\n   * @param {module:engine/model/item~Item|module:engine/model/selection~Selection|module:engine/model/range~Range} item\n   * Model item, range or selection that has the consumable.\n   * @param {String} type Consumable type. Will be normalized to a proper form, that is either `<word>` or `<part>:<part>`.\n   * Second colon and everything after will be cut. Passing event name is a safe and good practice.\n   */\n  return _createClass(ModelConsumable, [{\n    key: \"add\",\n    value: function add(item, type) {\n      type = _normalizeConsumableType(type);\n      if (item instanceof TextProxy) {\n        item = this._getSymbolForTextProxy(item);\n      }\n      if (!this._consumable.has(item)) {\n        this._consumable.set(item, new Map());\n      }\n      this._consumable.get(item).set(type, true);\n    }\n\n    /**\n     * Removes given consumable value from given model item.\n     *\n     *\t\tmodelConsumable.consume( modelElement, 'insert' ); // Remove `modelElement` insertion change from consumable values.\n     *\t\tmodelConsumable.consume( modelElement, 'addAttribute:bold' ); // Remove `bold` attribute insertion on `modelElement` change.\n     *\t\tmodelConsumable.consume( modelElement, 'removeAttribute:bold' ); // Remove `bold` attribute removal on `modelElement` change.\n     *\t\tmodelConsumable.consume( modelSelection, 'selection' ); // Remove `modelSelection` from consumable values.\n     *\t\tmodelConsumable.consume( modelRange, 'range' ); // Remove 'modelRange' from consumable values.\n     *\n     * @param {module:engine/model/item~Item|module:engine/model/selection~Selection|module:engine/model/range~Range} item\n     * Model item, range or selection from which consumable will be consumed.\n     * @param {String} type Consumable type. Will be normalized to a proper form, that is either `<word>` or `<part>:<part>`.\n     * Second colon and everything after will be cut. Passing event name is a safe and good practice.\n     * @returns {Boolean} `true` if consumable value was available and was consumed, `false` otherwise.\n     */\n  }, {\n    key: \"consume\",\n    value: function consume(item, type) {\n      type = _normalizeConsumableType(type);\n      if (item instanceof TextProxy) {\n        item = this._getSymbolForTextProxy(item);\n      }\n      if (this.test(item, type)) {\n        this._consumable.get(item).set(type, false);\n        return true;\n      } else {\n        return false;\n      }\n    }\n\n    /**\n     * Tests whether there is a consumable value of given type connected with given model item.\n     *\n     *\t\tmodelConsumable.test( modelElement, 'insert' ); // Check for `modelElement` insertion change.\n     *\t\tmodelConsumable.test( modelElement, 'addAttribute:bold' ); // Check for `bold` attribute insertion on `modelElement` change.\n     *\t\tmodelConsumable.test( modelElement, 'removeAttribute:bold' ); // Check for `bold` attribute removal on `modelElement` change.\n     *\t\tmodelConsumable.test( modelSelection, 'selection' ); // Check if `modelSelection` is consumable.\n     *\t\tmodelConsumable.test( modelRange, 'range' ); // Check if `modelRange` is consumable.\n     *\n     * @param {module:engine/model/item~Item|module:engine/model/selection~Selection|module:engine/model/range~Range} item\n     * Model item, range or selection to be tested.\n     * @param {String} type Consumable type. Will be normalized to a proper form, that is either `<word>` or `<part>:<part>`.\n     * Second colon and everything after will be cut. Passing event name is a safe and good practice.\n     * @returns {null|Boolean} `null` if such consumable was never added, `false` if the consumable values was\n     * already consumed or `true` if it was added and not consumed yet.\n     */\n  }, {\n    key: \"test\",\n    value: function test(item, type) {\n      type = _normalizeConsumableType(type);\n      if (item instanceof TextProxy) {\n        item = this._getSymbolForTextProxy(item);\n      }\n      var itemConsumables = this._consumable.get(item);\n      if (itemConsumables === undefined) {\n        return null;\n      }\n      var value = itemConsumables.get(type);\n      if (value === undefined) {\n        return null;\n      }\n      return value;\n    }\n\n    /**\n     * Reverts consuming of consumable value.\n     *\n     *\t\tmodelConsumable.revert( modelElement, 'insert' ); // Revert consuming `modelElement` insertion change.\n     *\t\tmodelConsumable.revert( modelElement, 'addAttribute:bold' ); // Revert consuming `bold` attribute insert from `modelElement`.\n     *\t\tmodelConsumable.revert( modelElement, 'removeAttribute:bold' ); // Revert consuming `bold` attribute remove from `modelElement`.\n     *\t\tmodelConsumable.revert( modelSelection, 'selection' ); // Revert consuming `modelSelection`.\n     *\t\tmodelConsumable.revert( modelRange, 'range' ); // Revert consuming `modelRange`.\n     *\n     * @param {module:engine/model/item~Item|module:engine/model/selection~Selection|module:engine/model/range~Range} item\n     * Model item, range or selection to be reverted.\n     * @param {String} type Consumable type.\n     * @returns {null|Boolean} `true` if consumable has been reversed, `false` otherwise. `null` if the consumable has\n     * never been added.\n     */\n  }, {\n    key: \"revert\",\n    value: function revert(item, type) {\n      type = _normalizeConsumableType(type);\n      if (item instanceof TextProxy) {\n        item = this._getSymbolForTextProxy(item);\n      }\n      var test = this.test(item, type);\n      if (test === false) {\n        this._consumable.get(item).set(type, true);\n        return true;\n      } else if (test === true) {\n        return false;\n      }\n      return null;\n    }\n\n    /**\n     * Gets a unique symbol for passed {@link module:engine/model/textproxy~TextProxy} instance. All `TextProxy` instances that\n     * have same parent, same start index and same end index will get the same symbol.\n     *\n     * Used internally to correctly consume `TextProxy` instances.\n     *\n     * @private\n     * @param {module:engine/model/textproxy~TextProxy} textProxy `TextProxy` instance to get a symbol for.\n     * @returns {Symbol} Symbol representing all equal instances of `TextProxy`.\n     */\n  }, {\n    key: \"_getSymbolForTextProxy\",\n    value: function _getSymbolForTextProxy(textProxy) {\n      var symbol = null;\n      var startMap = this._textProxyRegistry.get(textProxy.startOffset);\n      if (startMap) {\n        var endMap = startMap.get(textProxy.endOffset);\n        if (endMap) {\n          symbol = endMap.get(textProxy.parent);\n        }\n      }\n      if (!symbol) {\n        symbol = this._addSymbolForTextProxy(textProxy.startOffset, textProxy.endOffset, textProxy.parent);\n      }\n      return symbol;\n    }\n\n    /**\n     * Adds a symbol for given properties that characterizes a {@link module:engine/model/textproxy~TextProxy} instance.\n     *\n     * Used internally to correctly consume `TextProxy` instances.\n     *\n     * @private\n     * @param {Number} startIndex Text proxy start index in it's parent.\n     * @param {Number} endIndex Text proxy end index in it's parent.\n     * @param {module:engine/model/element~Element} parent Text proxy parent.\n     * @returns {Symbol} Symbol generated for given properties.\n     */\n  }, {\n    key: \"_addSymbolForTextProxy\",\n    value: function _addSymbolForTextProxy(start, end, parent) {\n      var symbol = Symbol('textProxySymbol');\n      var startMap, endMap;\n      startMap = this._textProxyRegistry.get(start);\n      if (!startMap) {\n        startMap = new Map();\n        this._textProxyRegistry.set(start, startMap);\n      }\n      endMap = startMap.get(end);\n      if (!endMap) {\n        endMap = new Map();\n        startMap.set(end, endMap);\n      }\n      endMap.set(parent, symbol);\n      return symbol;\n    }\n  }]);\n}(); // Returns a normalized consumable type name from given string. A normalized consumable type name is a string that has\n// at most one colon, for example: `insert` or `addMarker:highlight`. If string to normalize has more \"parts\" (more colons),\n// the other parts are dropped, for example: `addattribute:bold:$text` -> `addattributes:bold`.\n//\n// @param {String} type Consumable type.\n// @returns {String} Normalized consumable type.\nexport { ModelConsumable as default };\nfunction _normalizeConsumableType(type) {\n  var parts = type.split(':');\n  return parts.length > 1 ? parts[0] + ':' + parts[1] : parts[0];\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/conversion/upcastdispatcher\n */\n\nimport ViewConsumable from './viewconsumable';\nimport ModelRange from '../model/range';\nimport ModelPosition from '../model/position';\nimport { SchemaContext } from '../model/schema';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport EmitterMixin from '@ckeditor/ckeditor5-utils/src/emittermixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\n\n/**\n * `UpcastDispatcher` is a central point of {@link module:engine/view/view view} conversion, which is a process of\n * converting given {@link module:engine/view/documentfragment~DocumentFragment view document fragment} or\n * {@link module:engine/view/element~Element} into another structure.\n * In default application, {@link module:engine/view/view view} is converted to {@link module:engine/model/model}.\n *\n * During conversion process, for all {@link module:engine/view/node~Node view nodes} from the converted view document fragment,\n * `UpcastDispatcher` fires corresponding events. Special callbacks called \"converters\" should listen to\n * `UpcastDispatcher` for those events.\n *\n * Each callback, as the second argument, is passed a special object `data` that has `viewItem`, `modelCursor` and\n * `modelRange` properties. `viewItem` property contains {@link module:engine/view/node~Node view node} or\n * {@link module:engine/view/documentfragment~DocumentFragment view document fragment}\n * that is converted at the moment and might be handled by the callback. `modelRange` property should be used to save the result\n * of conversion and is always a {@link module:engine/model/range~Range} when conversion result is correct.\n * `modelCursor` property is a {@link module:engine/model/position~Position position} on which conversion result will be inserted\n * and is a context according to {@link module:engine/model/schema~Schema schema} will be checked before the conversion.\n * See also {@link ~UpcastDispatcher#convert}. It is also shared by reference by all callbacks listening to given event.\n *\n * The third parameter passed to a callback is an instance of {@link ~UpcastDispatcher}\n * which provides additional tools for converters.\n *\n * Examples of providing callbacks for `UpcastDispatcher`:\n *\n *\t\t// Converter for links (<a>).\n *\t\teditor.data.upcastDispatcher.on( 'element:a', ( evt, data, conversionApi ) => {\n *\t\t\tif ( conversionApi.consumable.consume( data.viewItem, { name: true, attributes: [ 'href' ] } ) ) {\n *\t\t\t\t// <a> element is inline and is represented by an attribute in the model.\n *\t\t\t\t// This is why we need to convert only children.\n *\t\t\t\tconst { modelRange } = conversionApi.convertChildren( data.viewItem, data.modelCursor );\n *\n *\t\t\t\tfor ( let item of modelRange.getItems() ) {\n *\t\t\t\t\tif ( conversionApi.schema.checkAttribute( item, 'linkHref' ) ) {\n *\t\t\t\t\t\tconversionApi.writer.setAttribute( 'linkHref', data.viewItem.getAttribute( 'href' ), item );\n *\t\t\t\t\t}\n *\t\t\t\t}\n *\t\t\t}\n *\t\t} );\n *\n *\t\t// Convert <p>'s font-size style.\n *\t\t// Note: You should use a low-priority observer in order to ensure that\n *\t\t// it's executed after the element-to-element converter.\n *\t\teditor.data.upcastDispatcher.on( 'element:p', ( evt, data, conversionApi ) => {\n *\t\t\tconst { consumable, schema, writer } = conversionApi;\n *\n *\t\t\tif ( !consumable.consume( data.viewItem, { style: 'font-size' } ) ) {\n *\t\t\t\treturn;\n *\t\t\t}\n *\n *\t\t\tconst fontSize = data.viewItem.getStyle( 'font-size' );\n *\n *\t\t\t// Don't go for the model element after data.modelCursor because it might happen\n *\t\t\t// that a single view element was converted to multiple model elements. Get all of them.\n *\t\t\tfor ( const item of data.modelRange.getItems( { shallow: true } ) ) {\n *\t\t\t\tif ( schema.checkAttribute( item, 'fontSize' ) ) {\n *\t\t\t\t\twriter.setAttribute( 'fontSize', fontSize, item );\n *\t\t\t\t}\n *\t\t\t}\n *\t\t}, { priority: 'low' } );\n *\n *\t\t// Convert all elements which have no custom converter into paragraph (autoparagraphing).\n *  \teditor.data.upcastDispatcher.on( 'element', ( evt, data, conversionApi ) => {\n *  \t \t// When element is already consumed by higher priority converters then do nothing.\n *  \t \tif ( conversionApi.consumable.test( data.viewItem, { name: data.viewItem.name } ) ) {\n *  \t \t\t\tconst paragraph = conversionApi.writer.createElement( 'paragraph' );\n *\n *  \t \t\t\t// Find allowed parent for paragraph that we are going to insert. If current parent does not allow\n *  \t \t\t\t// to insert paragraph but one of the ancestors does then split nodes to allowed parent.\n *  \t \t\t\tconst splitResult = conversionApi.splitToAllowedParent( paragraph, data.modelCursor );\n *\n *  \t \t\t\t// When there is no split result it means that we can't insert paragraph in this position.\n *  \t \t\t\tif ( splitResult ) {\n *  \t \t\t\t\t// Insert paragraph in allowed position.\n *  \t \t\t\t\tconversionApi.writer.insert( paragraph, splitResult.position );\n *\n *  \t \t\t\t\t// Convert children to paragraph.\n *  \t \t\t\t\tconst { modelRange } = conversionApi.convertChildren(\n *  \t \t\t\t\t\tdata.viewItem,\n *  \t \t\t\t\t\tconversionApi.writer.createPositionAt( paragraph, 0 )\n *  \t \t\t\t\t);\n *\n * \t\t\t\t\t\t// Set as conversion result, attribute converters may use this property.\n *  \t \t\t\t\tdata.modelRange = conversionApi.writer.createRange(\n *  \t \t\t\t\t\tconversionApi.writer.createPositionBefore( paragraph ),\n *  \t \t\t\t\t\tmodelRange.end\n *  \t \t\t\t\t);\n *\n *  \t \t\t\t\t// Continue conversion inside paragraph.\n *  \t \t\t\t\tdata.modelCursor = data.modelRange.end;\n *  \t \t\t\t}\n *  \t \t\t}\n *  \t \t}\n *  \t }, { priority: 'low' } );\n *\n * Before each conversion process, `UpcastDispatcher` fires {@link ~UpcastDispatcher#event:viewCleanup}\n * event which can be used to prepare tree view for conversion.\n *\n * @mixes module:utils/emittermixin~EmitterMixin\n * @fires viewCleanup\n * @fires element\n * @fires text\n * @fires documentFragment\n */\nvar UpcastDispatcher = /*#__PURE__*/function () {\n  /**\n   * Creates a `UpcastDispatcher` that operates using passed API.\n   *\n   * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi\n   * @param {Object} [conversionApi] Additional properties for interface that will be passed to events fired\n   * by `UpcastDispatcher`.\n   */\n  function UpcastDispatcher() {\n    var conversionApi = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _classCallCheck(this, UpcastDispatcher);\n    /**\n     * List of the elements that were created during splitting.\n     *\n     * After conversion process the list is cleared.\n     *\n     * @private\n     * @type {Map.<module:engine/model/element~Element,Array.<module:engine/model/element~Element>>}\n     */\n    this._splitParts = new Map();\n\n    /**\n     * Position in the temporary structure where the converted content is inserted. The structure reflect the context of\n     * the target position where the content will be inserted. This property is build based on the context parameter of the\n     * convert method.\n     *\n     * @private\n     * @type {module:engine/model/position~Position|null}\n     */\n    this._modelCursor = null;\n\n    /**\n     * Interface passed by dispatcher to the events callbacks.\n     *\n     * @member {module:engine/conversion/upcastdispatcher~UpcastConversionApi}\n     */\n    this.conversionApi = Object.assign({}, conversionApi);\n\n    // `convertItem`, `convertChildren` and `splitToAllowedParent` are bound to this `UpcastDispatcher`\n    // instance and set on `conversionApi`. This way only a part of `UpcastDispatcher` API is exposed.\n    this.conversionApi.convertItem = this._convertItem.bind(this);\n    this.conversionApi.convertChildren = this._convertChildren.bind(this);\n    this.conversionApi.splitToAllowedParent = this._splitToAllowedParent.bind(this);\n    this.conversionApi.getSplitParts = this._getSplitParts.bind(this);\n  }\n\n  /**\n   * Starts the conversion process. The entry point for the conversion.\n   *\n   * @fires element\n   * @fires text\n   * @fires documentFragment\n   * @param {module:engine/view/documentfragment~DocumentFragment|module:engine/view/element~Element} viewItem\n   * Part of the view to be converted.\n   * @param {module:engine/model/writer~Writer} writer Instance of model writer.\n   * @param {module:engine/model/schema~SchemaContextDefinition} [context=['$root']] Elements will be converted according to this context.\n   * @returns {module:engine/model/documentfragment~DocumentFragment} Model data that is a result of the conversion process\n   * wrapped in `DocumentFragment`. Converted marker elements will be set as that document fragment's\n   * {@link module:engine/model/documentfragment~DocumentFragment#markers static markers map}.\n   */\n  return _createClass(UpcastDispatcher, [{\n    key: \"convert\",\n    value: function convert(viewItem, writer) {\n      var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ['$root'];\n      this.fire('viewCleanup', viewItem);\n\n      // Create context tree and set position in the top element.\n      // Items will be converted according to this position.\n      this._modelCursor = createContextTree(context, writer);\n\n      // Store writer in conversion as a conversion API\n      // to be sure that conversion process will use the same batch.\n      this.conversionApi.writer = writer;\n\n      // Create consumable values list for conversion process.\n      this.conversionApi.consumable = ViewConsumable.createFrom(viewItem);\n\n      // Custom data stored by converter for conversion process.\n      this.conversionApi.store = {};\n\n      // Do the conversion.\n      var _this$_convertItem = this._convertItem(viewItem, this._modelCursor),\n        modelRange = _this$_convertItem.modelRange;\n\n      // Conversion result is always a document fragment so let's create it.\n      var documentFragment = writer.createDocumentFragment();\n\n      // When there is a conversion result.\n      if (modelRange) {\n        // Remove all empty elements that were create while splitting.\n        this._removeEmptyElements();\n\n        // Move all items that were converted in context tree to the document fragment.\n        for (var _i = 0, _Array$from = Array.from(this._modelCursor.parent.getChildren()); _i < _Array$from.length; _i++) {\n          var item = _Array$from[_i];\n          writer.append(item, documentFragment);\n        }\n\n        // Extract temporary markers elements from model and set as static markers collection.\n        documentFragment.markers = extractMarkersFromModelFragment(documentFragment, writer);\n      }\n\n      // Clear context position.\n      this._modelCursor = null;\n\n      // Clear split elements lists.\n      this._splitParts.clear();\n\n      // Clear conversion API.\n      this.conversionApi.writer = null;\n      this.conversionApi.store = null;\n\n      // Return fragment as conversion result.\n      return documentFragment;\n    }\n\n    /**\n     * @private\n     * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi#convertItem\n     */\n  }, {\n    key: \"_convertItem\",\n    value: function _convertItem(viewItem, modelCursor) {\n      var data = Object.assign({\n        viewItem: viewItem,\n        modelCursor: modelCursor,\n        modelRange: null\n      });\n      if (viewItem.is('element')) {\n        this.fire('element:' + viewItem.name, data, this.conversionApi);\n      } else if (viewItem.is('text')) {\n        this.fire('text', data, this.conversionApi);\n      } else {\n        this.fire('documentFragment', data, this.conversionApi);\n      }\n\n      // Handle incorrect conversion result.\n      if (data.modelRange && !(data.modelRange instanceof ModelRange)) {\n        /**\n         * Incorrect conversion result was dropped.\n         *\n         * {@link module:engine/model/range~Range Model range} should be a conversion result.\n         *\n         * @error view-conversion-dispatcher-incorrect-result\n         */\n        throw new CKEditorError('view-conversion-dispatcher-incorrect-result: Incorrect conversion result was dropped.', this);\n      }\n      return {\n        modelRange: data.modelRange,\n        modelCursor: data.modelCursor\n      };\n    }\n\n    /**\n     * @private\n     * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi#convertChildren\n     */\n  }, {\n    key: \"_convertChildren\",\n    value: function _convertChildren(viewItem, modelCursor) {\n      var modelRange = new ModelRange(modelCursor);\n      var nextModelCursor = modelCursor;\n      for (var _i2 = 0, _Array$from2 = Array.from(viewItem.getChildren()); _i2 < _Array$from2.length; _i2++) {\n        var viewChild = _Array$from2[_i2];\n        var result = this._convertItem(viewChild, nextModelCursor);\n        if (result.modelRange instanceof ModelRange) {\n          modelRange.end = result.modelRange.end;\n          nextModelCursor = result.modelCursor;\n        }\n      }\n      return {\n        modelRange: modelRange,\n        modelCursor: nextModelCursor\n      };\n    }\n\n    /**\n     * @private\n     * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi#splitToAllowedParent\n     */\n  }, {\n    key: \"_splitToAllowedParent\",\n    value: function _splitToAllowedParent(node, modelCursor) {\n      // Try to find allowed parent.\n      var allowedParent = this.conversionApi.schema.findAllowedParent(modelCursor, node);\n\n      // When there is no parent that allows to insert node then return `null`.\n      if (!allowedParent) {\n        return null;\n      }\n\n      // When current position parent allows to insert node then return this position.\n      if (allowedParent === modelCursor.parent) {\n        return {\n          position: modelCursor\n        };\n      }\n\n      // When allowed parent is in context tree.\n      if (this._modelCursor.parent.getAncestors().includes(allowedParent)) {\n        return null;\n      }\n\n      // Split element to allowed parent.\n      var splitResult = this.conversionApi.writer.split(modelCursor, allowedParent);\n\n      // Using the range returned by `model.Writer#split`, we will pair original elements with their split parts.\n      //\n      // The range returned from the writer spans \"over the split\" or, precisely saying, from the end of the original element (the one\n      // that got split) to the beginning of the other part of that element:\n      //\n      // <limit><a><b><c>X[]Y</c></b><a></limit> ->\n      // <limit><a><b><c>X[</c></b></a><a><b><c>]Y</c></b></a>\n      //\n      // After the split there cannot be any full node between the positions in `splitRange`. The positions are touching.\n      // Also, because of how splitting works, it is easy to notice, that \"closing tags\" are in the reverse order than \"opening tags\".\n      // Also, since we split all those elements, each of them has to have the other part.\n      //\n      // With those observations in mind, we will pair the original elements with their split parts by saving \"closing tags\" and matching\n      // them with \"opening tags\" in the reverse order. For that we can use a stack.\n      var stack = [];\n      var _iterator = _createForOfIteratorHelper(splitResult.range.getWalker()),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var treeWalkerValue = _step.value;\n          if (treeWalkerValue.type == 'elementEnd') {\n            stack.push(treeWalkerValue.item);\n          } else {\n            // There should not be any text nodes after the element is split, so the only other value is `elementStart`.\n            var originalPart = stack.pop();\n            var splitPart = treeWalkerValue.item;\n            this._registerSplitPair(originalPart, splitPart);\n          }\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      return {\n        position: splitResult.position,\n        cursorParent: splitResult.range.end.parent\n      };\n    }\n\n    /**\n     * Registers that `splitPart` element is a split part of the `originalPart` element.\n     *\n     * Data set by this method is used by {@link #_getSplitParts} and {@link #_removeEmptyElements}.\n     *\n     * @private\n     * @param {module:engine/model/element~Element} originalPart\n     * @param {module:engine/model/element~Element} splitPart\n     */\n  }, {\n    key: \"_registerSplitPair\",\n    value: function _registerSplitPair(originalPart, splitPart) {\n      if (!this._splitParts.has(originalPart)) {\n        this._splitParts.set(originalPart, [originalPart]);\n      }\n      var list = this._splitParts.get(originalPart);\n      this._splitParts.set(splitPart, list);\n      list.push(splitPart);\n    }\n\n    /**\n     * @private\n     * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi#getSplitParts\n     */\n  }, {\n    key: \"_getSplitParts\",\n    value: function _getSplitParts(element) {\n      var parts;\n      if (!this._splitParts.has(element)) {\n        parts = [element];\n      } else {\n        parts = this._splitParts.get(element);\n      }\n      return parts;\n    }\n\n    /**\n     * Checks if there are any empty elements created while splitting and removes them.\n     *\n     * This method works recursively to re-check empty elements again after at least one element was removed in the initial call,\n     * as some elements might have become empty after other empty elements were removed from them.\n     *\n     * @private\n     */\n  }, {\n    key: \"_removeEmptyElements\",\n    value: function _removeEmptyElements() {\n      var anyRemoved = false;\n      var _iterator2 = _createForOfIteratorHelper(this._splitParts.keys()),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var element = _step2.value;\n          if (element.isEmpty) {\n            this.conversionApi.writer.remove(element);\n            this._splitParts.delete(element);\n            anyRemoved = true;\n          }\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      if (anyRemoved) {\n        this._removeEmptyElements();\n      }\n    }\n\n    /**\n     * Fired before the first conversion event, at the beginning of upcast (view to model conversion) process.\n     *\n     * @event viewCleanup\n     * @param {module:engine/view/documentfragment~DocumentFragment|module:engine/view/element~Element}\n     * viewItem Part of the view to be converted.\n     */\n\n    /**\n     * Fired when {@link module:engine/view/element~Element} is converted.\n     *\n     * `element` is a namespace event for a class of events. Names of actually called events follow this pattern:\n     * `element:<elementName>` where `elementName` is the name of converted element. This way listeners may listen to\n     * all elements conversion or to conversion of specific elements.\n     *\n     * @event element\n     * @param {Object} data Conversion data. Keep in mind that this object is shared by reference between all\n     * callbacks that will be called. This means that callbacks can override values if needed, and those values will\n     * be available in other callbacks.\n     * @param {module:engine/view/item~Item} data.viewItem Converted item.\n     * @param {module:engine/model/position~Position} data.modelCursor Position where a converter should start changes.\n     * Change this value for the next converter to tell where the conversion should continue.\n     * @param {module:engine/model/range~Range} data.modelRange The current state of conversion result. Every change to\n     * converted element should be reflected by setting or modifying this property.\n     * @param {module:engine/conversion/upcastdispatcher~UpcastConversionApi} conversionApi Conversion utilities to be used by callback.\n     */\n\n    /**\n     * Fired when {@link module:engine/view/text~Text} is converted.\n     *\n     * @event text\n     * @see #event:element\n     */\n\n    /**\n     * Fired when {@link module:engine/view/documentfragment~DocumentFragment} is converted.\n     *\n     * @event documentFragment\n     * @see #event:element\n     */\n  }]);\n}();\nexport { UpcastDispatcher as default };\nmix(UpcastDispatcher, EmitterMixin);\n\n// Traverses given model item and searches elements which marks marker range. Found element is removed from\n// DocumentFragment but path of this element is stored in a Map which is then returned.\n//\n// @param {module:engine/view/documentfragment~DocumentFragment|module:engine/view/node~Node} modelItem Fragment of model.\n// @returns {Map<String, module:engine/model/range~Range>} List of static markers.\nfunction extractMarkersFromModelFragment(modelItem, writer) {\n  var markerElements = new Set();\n  var markers = new Map();\n\n  // Create ModelTreeWalker.\n  var range = ModelRange._createIn(modelItem).getItems();\n\n  // Walk through DocumentFragment and collect marker elements.\n  var _iterator3 = _createForOfIteratorHelper(range),\n    _step3;\n  try {\n    for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n      var item = _step3.value;\n      // Check if current element is a marker.\n      if (item.name == '$marker') {\n        markerElements.add(item);\n      }\n    }\n\n    // Walk through collected marker elements store its path and remove its from the DocumentFragment.\n  } catch (err) {\n    _iterator3.e(err);\n  } finally {\n    _iterator3.f();\n  }\n  var _iterator4 = _createForOfIteratorHelper(markerElements),\n    _step4;\n  try {\n    for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n      var markerElement = _step4.value;\n      var markerName = markerElement.getAttribute('data-name');\n      var currentPosition = writer.createPositionBefore(markerElement);\n\n      // When marker of given name is not stored it means that we have found the beginning of the range.\n      if (!markers.has(markerName)) {\n        markers.set(markerName, new ModelRange(currentPosition.clone()));\n        // Otherwise is means that we have found end of the marker range.\n      } else {\n        markers.get(markerName).end = currentPosition.clone();\n      }\n\n      // Remove marker element from DocumentFragment.\n      writer.remove(markerElement);\n    }\n  } catch (err) {\n    _iterator4.e(err);\n  } finally {\n    _iterator4.f();\n  }\n  return markers;\n}\n\n// Creates model fragment according to given context and returns position in the bottom (the deepest) element.\nfunction createContextTree(contextDefinition, writer) {\n  var position;\n  var _iterator5 = _createForOfIteratorHelper(new SchemaContext(contextDefinition)),\n    _step5;\n  try {\n    for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n      var item = _step5.value;\n      var attributes = {};\n      var _iterator6 = _createForOfIteratorHelper(item.getAttributeKeys()),\n        _step6;\n      try {\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n          var key = _step6.value;\n          attributes[key] = item.getAttribute(key);\n        }\n      } catch (err) {\n        _iterator6.e(err);\n      } finally {\n        _iterator6.f();\n      }\n      var current = writer.createElement(item.name, attributes);\n      if (position) {\n        writer.append(current, position);\n      }\n      position = ModelPosition._createAt(current, 0);\n    }\n  } catch (err) {\n    _iterator5.e(err);\n  } finally {\n    _iterator5.f();\n  }\n  return position;\n}\n\n/**\n * Conversion interface that is registered for given {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher}\n * and is passed as one of parameters when {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher dispatcher}\n * fires it's events.\n *\n * @interface module:engine/conversion/upcastdispatcher~UpcastConversionApi\n */\n\n/**\n * Starts conversion of given item by firing an appropriate event.\n *\n * Every fired event is passed (as first parameter) an object with `modelRange` property. Every event may set and/or\n * modify that property. When all callbacks are done, the final value of `modelRange` property is returned by this method.\n * The `modelRange` must be {@link module:engine/model/range~Range model range} or `null` (as set by default).\n *\n * @method #convertItem\n * @fires module:engine/conversion/upcastdispatcher~UpcastDispatcher#event:element\n * @fires module:engine/conversion/upcastdispatcher~UpcastDispatcher#event:text\n * @fires module:engine/conversion/upcastdispatcher~UpcastDispatcher#event:documentFragment\n * @param {module:engine/view/item~Item} viewItem Item to convert.\n * @param {module:engine/model/position~Position} modelCursor Position of conversion.\n * @returns {Object} result Conversion result.\n * @returns {module:engine/model/range~Range|null} result.modelRange Model range containing result of item conversion,\n * created and modified by callbacks attached to fired event, or `null` if the conversion result was incorrect.\n * @returns {module:engine/model/position~Position} result.modelCursor Position where conversion should be continued.\n */\n\n/**\n * Starts conversion of all children of given item by firing appropriate events for all those children.\n *\n * @method #convertChildren\n * @fires module:engine/conversion/upcastdispatcher~UpcastDispatcher#event:element\n * @fires module:engine/conversion/upcastdispatcher~UpcastDispatcher#event:text\n * @fires module:engine/conversion/upcastdispatcher~UpcastDispatcher#event:documentFragment\n * @param {module:engine/view/item~Item} viewItem Element which children should be converted.\n * @param {module:engine/model/position~Position} modelCursor Position of conversion.\n * @returns {Object} result Conversion result.\n * @returns {module:engine/model/range~Range} result.modelRange Model range containing results of conversion of all children of given item.\n * When no children was converted then range is collapsed.\n * @returns {module:engine/model/position~Position} result.modelCursor Position where conversion should be continued.\n */\n\n/**\n * Checks {@link module:engine/model/schema~Schema schema} to find allowed parent for element that we are going to insert\n * starting from given position. If current parent does not allow to insert element but one of the ancestors does then\n * split nodes to allowed parent.\n *\n * If schema allows to insert node in given position, nothing is split and object with that position is returned.\n *\n * If it was not possible to find allowed parent, `null` is returned, nothing is split.\n *\n * Otherwise, ancestors are split and object with position and the copy of the split element is returned.\n *\n * For instance, if `<image>` is not allowed in `<paragraph>` but is allowed in `$root`:\n *\n *\t\t<paragraph>foo[]bar</paragraph>\n *\n *  \t-> split for `<image>` ->\n *\n *  \t<paragraph>foo</paragraph>[]<paragraph>bar</paragraph>\n *\n * In the sample above position between `<paragraph>` elements will be returned as `position` and the second `paragraph`\n * as `cursorParent`.\n *\n * @method #splitToAllowedParent\n * @param {module:engine/model/position~Position} position Position on which element is going to be inserted.\n * @param {module:engine/model/node~Node} node Node to insert.\n * @returns {Object|null} Split result. If it was not possible to find allowed position `null` is returned.\n * @returns {module:engine/model/position~Position} position between split elements.\n * @returns {module:engine/model/element~Element} [cursorParent] Element inside which cursor should be placed to\n * continue conversion. When element is not defined it means that there was no split.\n */\n\n/**\n * Returns all the split parts of given `element` that were created during upcasting through using {@link #splitToAllowedParent}.\n * It enables you to easily track those elements and continue processing them after they are split during their children conversion.\n *\n *\t\t<paragraph>Foo<image />bar<image />baz</paragraph> ->\n *\t\t<paragraph>Foo</paragraph><image /><paragraph>bar</paragraph><image /><paragraph>baz</paragraph>\n *\n * For a reference to any of above paragraphs, the function will return all three paragraphs (the original element included),\n * sorted in the order of their creation (the original element is the first one).\n *\n * If given `element` was not split, an array with single element is returned.\n *\n * Example of a usage in a converter code:\n *\n *\t\tconst myElement = conversionApi.writer.createElement( 'myElement' );\n *\n *\t\t// Children conversion may split `myElement`.\n *\t\tconversionApi.convertChildren( myElement, modelCursor );\n *\n *\t\tconst splitParts = conversionApi.getSplitParts( myElement );\n *\t\tconst lastSplitPart = splitParts[ splitParts.length - 1 ];\n *\n *\t\t// Setting `data.modelRange` basing on split parts:\n *\t\tdata.modelRange = conversionApi.writer.createRange(\n *\t\t\tconversionApi.writer.createPositionBefore( myElement ),\n *\t\t\tconversionApi.writer.createPositionAfter( lastSplitPart )\n *\t\t);\n *\n *\t\t// Setting `data.modelCursor` to continue after the last split element:\n *\t\tdata.modelCursor = conversionApi.writer.createPositionAfter( lastSplitPart );\n *\n * **Tip:** if you are unable to get a reference to the original element (for example because the code is split into multiple converters\n * or even classes) but it was already converted, you might want to check first element in `data.modelRange`. This is a common situation\n * if an attribute converter is separated from an element converter.\n *\n * @method #getSplitParts\n * @param {module:engine/model/element~Element} element\n * @returns {Array.<module:engine/model/element~Element>}\n */\n\n/**\n * Stores information about what parts of processed view item are still waiting to be handled. After a piece of view item\n * was converted, appropriate consumable value should be {@link module:engine/conversion/viewconsumable~ViewConsumable#consume consumed}.\n *\n * @member {module:engine/conversion/viewconsumable~ViewConsumable} #consumable\n */\n\n/**\n * Custom data stored by converters for conversion process. Custom properties of this object can be defined and use to\n * pass parameters between converters.\n *\n * The difference between this property and `data` parameter of\n * {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher#event:element} is that `data` parameters allows you\n * to pass parameters within a single event and `store` within the whole conversion.\n *\n * @member {Object} #store\n */\n\n/**\n * The model's schema instance.\n *\n * @member {module:engine/model/schema~Schema} #schema\n */\n\n/**\n * The {@link module:engine/model/writer~Writer} instance used to manipulate data during conversion.\n *\n * @member {module:engine/model/writer~Writer} #writer\n */","import _defineProperty from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/defineProperty.js\";\nimport _typeof from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/typeof.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.regexp.test.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.match.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\nimport Matcher from '../view/matcher';\nimport ModelRange from '../model/range';\nimport ConversionHelpers from './conversionhelpers';\nimport { cloneDeep } from 'lodash-es';\nimport ModelSelection from '../model/selection';\n\n/**\n * Contains {@link module:engine/view/view view} to {@link module:engine/model/model model} converters for\n * {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher}.\n *\n * @module engine/conversion/upcasthelpers\n */\n\n/**\n * Upcast conversion helper functions.\n *\n * @extends module:engine/conversion/conversionhelpers~ConversionHelpers\n */\nvar UpcastHelpers = /*#__PURE__*/function (_ConversionHelpers) {\n  function UpcastHelpers() {\n    _classCallCheck(this, UpcastHelpers);\n    return _callSuper(this, UpcastHelpers, arguments);\n  }\n  _inherits(UpcastHelpers, _ConversionHelpers);\n  return _createClass(UpcastHelpers, [{\n    key: \"elementToElement\",\n    value:\n    /**\n     * View element to model element conversion helper.\n     *\n     * This conversion results in creating a model element. For example,\n     * view `<p>Foo</p>` becomes `<paragraph>Foo</paragraph>` in the model.\n     *\n     * Keep in mind that the element will be inserted only if it is allowed\n     * by {@link module:engine/model/schema~Schema schema} configuration.\n     *\n     *\t\teditor.conversion.for( 'upcast' ).elementToElement( {\n     *\t\t\tview: 'p',\n     *\t\t\tmodel: 'paragraph'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'upcast' ).elementToElement( {\n     *\t\t\tview: 'p',\n     *\t\t\tmodel: 'paragraph',\n     *\t\t\tconverterPriority: 'high'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'upcast' ).elementToElement( {\n     *\t\t\tview: {\n     *\t\t\t\tname: 'p',\n     *\t\t\t\tclasses: 'fancy'\n     *\t\t\t},\n     *\t\t\tmodel: 'fancyParagraph'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'upcast' ).elementToElement( {\n     * \t\t\tview: {\n     *\t\t\t\tname: 'p',\n     *\t\t\t\tclasses: 'heading'\n     * \t\t\t},\n     * \t\t\tmodel: ( viewElement, modelWriter ) => {\n     * \t\t\t\treturn modelWriter.createElement( 'heading', { level: viewElement.getAttribute( 'data-level' ) } );\n     * \t\t\t}\n     * \t\t} );\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @method #elementToElement\n     * @param {Object} config Conversion configuration.\n     * @param {module:engine/view/matcher~MatcherPattern} [config.view] Pattern matching all view elements which should be converted. If not\n     * set, the converter will fire for every view element.\n     * @param {String|module:engine/model/element~Element|Function} config.model Name of the model element, a model element\n     * instance or a function that takes a view element and returns a model element. The model element will be inserted in the model.\n     * @param {module:utils/priorities~PriorityString} [config.converterPriority='normal'] Converter priority.\n     * @returns {module:engine/conversion/upcasthelpers~UpcastHelpers}\n     */\n    function elementToElement(config) {\n      return this.add(upcastElementToElement(config));\n    }\n\n    /**\n     * View element to model attribute conversion helper.\n     *\n     * This conversion results in setting an attribute on a model node. For example, view `<strong>Foo</strong>` becomes\n     * `Foo` {@link module:engine/model/text~Text model text node} with `bold` attribute set to `true`.\n     *\n     * This helper is meant to set a model attribute on all the elements that are inside the converted element:\n     *\n     *\t\t<strong>Foo</strong>   -->   <strong><p>Foo</p></strong>   -->   <paragraph><$text bold=\"true\">Foo</$text></paragraph>\n     *\n     * Above is a sample of HTML code, that goes through autoparagraphing (first step) and then is converted (second step).\n     * Even though `<strong>` is over `<p>` element, `bold=\"true\"` was added to the text. See\n     * {@link module:engine/conversion/upcasthelpers~UpcastHelpers#attributeToAttribute} for comparison.\n     *\n     * Keep in mind that the attribute will be set only if it is allowed by {@link module:engine/model/schema~Schema schema} configuration.\n     *\n     *\t\teditor.conversion.for( 'upcast' ).elementToAttribute( {\n     *\t\t\tview: 'strong',\n     *\t\t\tmodel: 'bold'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'upcast' ).elementToAttribute( {\n     *\t\t\tview: 'strong',\n     *\t\t\tmodel: 'bold',\n     *\t\t\tconverterPriority: 'high'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'upcast' ).elementToAttribute( {\n     *\t\t\tview: {\n     *\t\t\t\tname: 'span',\n     *\t\t\t\tclasses: 'bold'\n     *\t\t\t},\n     *\t\t\tmodel: 'bold'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'upcast' ).elementToAttribute( {\n     *\t\t\tview: {\n     *\t\t\t\tname: 'span',\n     *\t\t\t\tclasses: [ 'styled', 'styled-dark' ]\n     *\t\t\t},\n     *\t\t\tmodel: {\n     *\t\t\t\tkey: 'styled',\n     *\t\t\t\tvalue: 'dark'\n     *\t\t\t}\n     *\t\t} );\n     *\n     * \t\teditor.conversion.for( 'upcast' ).elementToAttribute( {\n     *\t\t\tview: {\n     *\t\t\t\tname: 'span',\n     *\t\t\t\tstyles: {\n     *\t\t\t\t\t'font-size': /[\\s\\S]+/\n     *\t\t\t\t}\n     *\t\t\t},\n     *\t\t\tmodel: {\n     *\t\t\t\tkey: 'fontSize',\n     *\t\t\t\tvalue: viewElement => {\n     *\t\t\t\t\tconst fontSize = viewElement.getStyle( 'font-size' );\n     *\t\t\t\t\tconst value = fontSize.substr( 0, fontSize.length - 2 );\n     *\n     *\t\t\t\t\tif ( value <= 10 ) {\n     *\t\t\t\t\t\treturn 'small';\n     *\t\t\t\t\t} else if ( value > 12 ) {\n     *\t\t\t\t\t\treturn 'big';\n     *\t\t\t\t\t}\n     *\n     *\t\t\t\t\treturn null;\n     *\t\t\t\t}\n     *\t\t\t}\n     *\t\t} );\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @method #elementToAttribute\n     * @param {Object} config Conversion configuration.\n     * @param {module:engine/view/matcher~MatcherPattern} config.view Pattern matching all view elements which should be converted.\n     * @param {String|Object} config.model Model attribute key or an object with `key` and `value` properties, describing\n     * the model attribute. `value` property may be set as a function that takes a view element and returns the value.\n     * If `String` is given, the model attribute value will be set to `true`.\n     * @param {module:utils/priorities~PriorityString} [config.converterPriority='low'] Converter priority.\n     * @returns {module:engine/conversion/upcasthelpers~UpcastHelpers}\n     */\n  }, {\n    key: \"elementToAttribute\",\n    value: function elementToAttribute(config) {\n      return this.add(upcastElementToAttribute(config));\n    }\n\n    /**\n     * View attribute to model attribute conversion helper.\n     *\n     * This conversion results in setting an attribute on a model node. For example, view `<img src=\"foo.jpg\"></img>` becomes\n     * `<image source=\"foo.jpg\"></image>` in the model.\n     *\n     * This helper is meant to convert view attributes from view elements which got converted to the model, so the view attribute\n     * is set only on the corresponding model node:\n     *\n     *\t\t<div class=\"dark\"><div>foo</div></div>    -->    <div dark=\"true\"><div>foo</div></div>\n     *\n     * Above, `class=\"dark\"` attribute is added only to the `<div>` elements that has it. This is in contrary to\n     * {@link module:engine/conversion/upcasthelpers~UpcastHelpers#elementToAttribute} which sets attributes for\n     * all the children in the model:\n     *\n     *\t\t<strong>Foo</strong>   -->   <strong><p>Foo</p></strong>   -->   <paragraph><$text bold=\"true\">Foo</$text></paragraph>\n     *\n     * Above is a sample of HTML code, that goes through autoparagraphing (first step) and then is converted (second step).\n     * Even though `<strong>` is over `<p>` element, `bold=\"true\"` was added to the text.\n     *\n     * Keep in mind that the attribute will be set only if it is allowed by {@link module:engine/model/schema~Schema schema} configuration.\n     *\n     *\t\teditor.conversion.for( 'upcast' ).attributeToAttribute( {\n     *\t\t\tview: 'src',\n     *\t\t\tmodel: 'source'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'upcast' ).attributeToAttribute( {\n     *\t\t\tview: { key: 'src' },\n     *\t\t\tmodel: 'source'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'upcast' ).attributeToAttribute( {\n     *\t\t\tview: { key: 'src' },\n     *\t\t\tmodel: 'source',\n     *\t\t\tconverterPriority: 'normal'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'upcast' ).attributeToAttribute( {\n     *\t\t\tview: {\n     *\t\t\t\tkey: 'data-style',\n     *\t\t\t\tvalue: /[\\s\\S]+/\n     *\t\t\t},\n     *\t\t\tmodel: 'styled'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'upcast' ).attributeToAttribute( {\n     *\t\t\tview: {\n     *\t\t\t\tname: 'img',\n     *\t\t\t\tkey: 'class',\n     *\t\t\t\tvalue: 'styled-dark'\n     *\t\t\t},\n     *\t\t\tmodel: {\n     *\t\t\t\tkey: 'styled',\n     *\t\t\t\tvalue: 'dark'\n     *\t\t\t}\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'upcast' ).attributeToAttribute( {\n     *\t\t\tview: {\n     *\t\t\t\tkey: 'class',\n     *\t\t\t\tvalue: /styled-[\\S]+/\n     *\t\t\t},\n     *\t\t\tmodel: {\n     *\t\t\t\tkey: 'styled'\n     *\t\t\t\tvalue: viewElement => {\n     *\t\t\t\t\tconst regexp = /styled-([\\S]+)/;\n     *\t\t\t\t\tconst match = viewElement.getAttribute( 'class' ).match( regexp );\n     *\n     *\t\t\t\t\treturn match[ 1 ];\n     *\t\t\t\t}\n     *\t\t\t}\n     *\t\t} );\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @method #attributeToAttribute\n     * @param {Object} config Conversion configuration.\n     * @param {String|Object} config.view Specifies which view attribute will be converted. If a `String` is passed,\n     * attributes with given key will be converted. If an `Object` is passed, it must have a required `key` property,\n     * specifying view attribute key, and may have an optional `value` property, specifying view attribute value and optional `name`\n     * property specifying a view element name from/on which the attribute should be converted. `value` can be given as a `String`,\n     * a `RegExp` or a function callback, that takes view attribute value as the only parameter and returns `Boolean`.\n     * @param {String|Object} config.model Model attribute key or an object with `key` and `value` properties, describing\n     * the model attribute. `value` property may be set as a function that takes a view element and returns the value.\n     * If `String` is given, the model attribute value will be same as view attribute value.\n     * @param {module:utils/priorities~PriorityString} [config.converterPriority='low'] Converter priority.\n     * @returns {module:engine/conversion/upcasthelpers~UpcastHelpers}\n     */\n  }, {\n    key: \"attributeToAttribute\",\n    value: function attributeToAttribute(config) {\n      return this.add(upcastAttributeToAttribute(config));\n    }\n\n    /**\n     * View element to model marker conversion helper.\n     *\n     * This conversion results in creating a model marker. For example, if the marker was stored in a view as an element:\n     * `<p>Fo<span data-marker=\"comment\" data-comment-id=\"7\"></span>o</p><p>B<span data-marker=\"comment\" data-comment-id=\"7\"></span>ar</p>`,\n     * after the conversion is done, the marker will be available in\n     * {@link module:engine/model/model~Model#markers model document markers}.\n     *\n     *\t\teditor.conversion.for( 'upcast' ).elementToMarker( {\n     *\t\t\tview: 'marker-search',\n     *\t\t\tmodel: 'search'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'upcast' ).elementToMarker( {\n     *\t\t\tview: 'marker-search',\n     *\t\t\tmodel: 'search',\n     *\t\t\tconverterPriority: 'high'\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'upcast' ).elementToMarker( {\n     *\t\t\tview: 'marker-search',\n     *\t\t\tmodel: viewElement => 'comment:' + viewElement.getAttribute( 'data-comment-id' )\n     *\t\t} );\n     *\n     *\t\teditor.conversion.for( 'upcast' ).elementToMarker( {\n     *\t\t\tview: {\n     *\t\t\t\tname: 'span',\n     *\t\t\t\tattributes: {\n     *\t\t\t\t\t'data-marker': 'search'\n     *\t\t\t\t}\n     *\t\t\t},\n     *\t\t\tmodel: 'search'\n     *\t\t} );\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @method #elementToMarker\n     * @param {Object} config Conversion configuration.\n     * @param {module:engine/view/matcher~MatcherPattern} config.view Pattern matching all view elements which should be converted.\n     * @param {String|Function} config.model Name of the model marker, or a function that takes a view element and returns\n     * a model marker name.\n     * @param {module:utils/priorities~PriorityString} [config.converterPriority='normal'] Converter priority.\n     * @returns {module:engine/conversion/upcasthelpers~UpcastHelpers}\n     */\n  }, {\n    key: \"elementToMarker\",\n    value: function elementToMarker(config) {\n      return this.add(upcastElementToMarker(config));\n    }\n  }]);\n}(ConversionHelpers);\n/**\n * Function factory, creates a converter that converts {@link module:engine/view/documentfragment~DocumentFragment view document fragment}\n * or all children of {@link module:engine/view/element~Element} into\n * {@link module:engine/model/documentfragment~DocumentFragment model document fragment}.\n * This is the \"entry-point\" converter for upcast (view to model conversion). This converter starts the conversion of all children\n * of passed view document fragment. Those children {@link module:engine/view/node~Node view nodes} are then handled by other converters.\n *\n * This also a \"default\", last resort converter for all view elements that has not been converted by other converters.\n * When a view element is being converted to the model but it does not have converter specified, that view element\n * will be converted to {@link module:engine/model/documentfragment~DocumentFragment model document fragment} and returned.\n *\n * @returns {Function} Universal converter for view {@link module:engine/view/documentfragment~DocumentFragment fragments} and\n * {@link module:engine/view/element~Element elements} that returns\n * {@link module:engine/model/documentfragment~DocumentFragment model fragment} with children of converted view item.\n */\nexport { UpcastHelpers as default };\nexport function convertToModelFragment() {\n  return function (evt, data, conversionApi) {\n    // Second argument in `consumable.consume` is discarded for ViewDocumentFragment but is needed for ViewElement.\n    if (!data.modelRange && conversionApi.consumable.consume(data.viewItem, {\n      name: true\n    })) {\n      var _conversionApi$conver = conversionApi.convertChildren(data.viewItem, data.modelCursor),\n        modelRange = _conversionApi$conver.modelRange,\n        modelCursor = _conversionApi$conver.modelCursor;\n      data.modelRange = modelRange;\n      data.modelCursor = modelCursor;\n    }\n  };\n}\n\n/**\n * Function factory, creates a converter that converts {@link module:engine/view/text~Text} to {@link module:engine/model/text~Text}.\n *\n * @returns {Function} {@link module:engine/view/text~Text View text} converter.\n */\nexport function convertText() {\n  return function (evt, data, conversionApi) {\n    if (conversionApi.schema.checkChild(data.modelCursor, '$text')) {\n      if (conversionApi.consumable.consume(data.viewItem)) {\n        var text = conversionApi.writer.createText(data.viewItem.data);\n        conversionApi.writer.insert(text, data.modelCursor);\n        data.modelRange = ModelRange._createFromPositionAndShift(data.modelCursor, text.offsetSize);\n        data.modelCursor = data.modelRange.end;\n      }\n    }\n  };\n}\n\n/**\n * Function factory, creates a callback function which converts a {@link module:engine/view/selection~Selection\n * view selection} taken from the {@link module:engine/view/document~Document#event:selectionChange} event\n * and sets in on the {@link module:engine/model/document~Document#selection model}.\n *\n * **Note**: because there is no view selection change dispatcher nor any other advanced view selection to model\n * conversion mechanism, the callback should be set directly on view document.\n *\n *\t\tview.document.on( 'selectionChange', convertSelectionChange( modelDocument, mapper ) );\n *\n * @param {module:engine/model/model~Model} model Data model.\n * @param {module:engine/conversion/mapper~Mapper} mapper Conversion mapper.\n * @returns {Function} {@link module:engine/view/document~Document#event:selectionChange} callback function.\n */\nexport function convertSelectionChange(model, mapper) {\n  return function (evt, data) {\n    var viewSelection = data.newSelection;\n    var modelSelection = new ModelSelection();\n    var ranges = [];\n    var _iterator = _createForOfIteratorHelper(viewSelection.getRanges()),\n      _step;\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var viewRange = _step.value;\n        ranges.push(mapper.toModelRange(viewRange));\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n    modelSelection.setTo(ranges, {\n      backward: viewSelection.isBackward\n    });\n    if (!modelSelection.isEqual(model.document.selection)) {\n      model.change(function (writer) {\n        writer.setSelection(modelSelection);\n      });\n    }\n  };\n}\n\n// View element to model element conversion helper.\n//\n// See {@link ~UpcastHelpers#elementToElement `.elementToElement()` upcast helper} for examples.\n//\n// @param {Object} config Conversion configuration.\n// @param {module:engine/view/matcher~MatcherPattern} [config.view] Pattern matching all view elements which should be converted. If not\n// set, the converter will fire for every view element.\n// @param {String|module:engine/model/element~Element|Function} config.model Name of the model element, a model element\n// instance or a function that takes a view element and returns a model element. The model element will be inserted in the model.\n// @param {module:utils/priorities~PriorityString} [config.converterPriority='normal'] Converter priority.\n// @returns {Function} Conversion helper.\nfunction upcastElementToElement(config) {\n  config = cloneDeep(config);\n  var converter = prepareToElementConverter(config);\n  var elementName = getViewElementNameFromConfig(config.view);\n  var eventName = elementName ? 'element:' + elementName : 'element';\n  return function (dispatcher) {\n    dispatcher.on(eventName, converter, {\n      priority: config.converterPriority || 'normal'\n    });\n  };\n}\n\n// View element to model attribute conversion helper.\n//\n// See {@link ~UpcastHelpers#elementToAttribute `.elementToAttribute()` upcast helper} for examples.\n//\n// @param {Object} config Conversion configuration.\n// @param {module:engine/view/matcher~MatcherPattern} config.view Pattern matching all view elements which should be converted.\n// @param {String|Object} config.model Model attribute key or an object with `key` and `value` properties, describing\n// the model attribute. `value` property may be set as a function that takes a view element and returns the value.\n// If `String` is given, the model attribute value will be set to `true`.\n// @param {module:utils/priorities~PriorityString} [config.converterPriority='low'] Converter priority.\n// @returns {Function} Conversion helper.\nfunction upcastElementToAttribute(config) {\n  config = cloneDeep(config);\n  normalizeModelAttributeConfig(config);\n  var converter = prepareToAttributeConverter(config, false);\n  var elementName = getViewElementNameFromConfig(config.view);\n  var eventName = elementName ? 'element:' + elementName : 'element';\n  return function (dispatcher) {\n    dispatcher.on(eventName, converter, {\n      priority: config.converterPriority || 'low'\n    });\n  };\n}\n\n// View attribute to model attribute conversion helper.\n//\n// See {@link ~UpcastHelpers#attributeToAttribute `.attributeToAttribute()` upcast helper} for examples.\n//\n// @param {Object} config Conversion configuration.\n// @param {String|Object} config.view Specifies which view attribute will be converted. If a `String` is passed,\n// attributes with given key will be converted. If an `Object` is passed, it must have a required `key` property,\n// specifying view attribute key, and may have an optional `value` property, specifying view attribute value and optional `name`\n// property specifying a view element name from/on which the attribute should be converted. `value` can be given as a `String`,\n// a `RegExp` or a function callback, that takes view attribute value as the only parameter and returns `Boolean`.\n// @param {String|Object} config.model Model attribute key or an object with `key` and `value` properties, describing\n// the model attribute. `value` property may be set as a function that takes a view element and returns the value.\n// If `String` is given, the model attribute value will be same as view attribute value.\n// @param {module:utils/priorities~PriorityString} [config.converterPriority='low'] Converter priority.\n// @returns {Function} Conversion helper.\nfunction upcastAttributeToAttribute(config) {\n  config = cloneDeep(config);\n  var viewKey = null;\n  if (typeof config.view == 'string' || config.view.key) {\n    viewKey = normalizeViewAttributeKeyValueConfig(config);\n  }\n  normalizeModelAttributeConfig(config, viewKey);\n  var converter = prepareToAttributeConverter(config, true);\n  return function (dispatcher) {\n    dispatcher.on('element', converter, {\n      priority: config.converterPriority || 'low'\n    });\n  };\n}\n\n// View element to model marker conversion helper.\n//\n// See {@link ~UpcastHelpers#elementToMarker `.elementToMarker()` upcast helper} for examples.\n//\n// @param {Object} config Conversion configuration.\n// @param {module:engine/view/matcher~MatcherPattern} config.view Pattern matching all view elements which should be converted.\n// @param {String|Function} config.model Name of the model marker, or a function that takes a view element and returns\n// a model marker name.\n// @param {module:utils/priorities~PriorityString} [config.converterPriority='normal'] Converter priority.\n// @returns {Function} Conversion helper.\nfunction upcastElementToMarker(config) {\n  config = cloneDeep(config);\n  normalizeToMarkerConfig(config);\n  return upcastElementToElement(config);\n}\n\n// Helper function for from-view-element conversion. Checks if `config.view` directly specifies converted view element's name\n// and if so, returns it.\n//\n// @param {Object} config Conversion view config.\n// @returns {String|null} View element name or `null` if name is not directly set.\nfunction getViewElementNameFromConfig(viewConfig) {\n  if (typeof viewConfig == 'string') {\n    return viewConfig;\n  }\n  if (_typeof(viewConfig) == 'object' && typeof viewConfig.name == 'string') {\n    return viewConfig.name;\n  }\n  return null;\n}\n\n// Helper for to-model-element conversion. Takes a config object and returns a proper converter function.\n//\n// @param {Object} config Conversion configuration.\n// @returns {Function} View to model converter.\nfunction prepareToElementConverter(config) {\n  var matcher = config.view ? new Matcher(config.view) : null;\n  return function (evt, data, conversionApi) {\n    var match = {};\n\n    // If `config.view` has not been passed do not try matching. In this case, the converter should fire for all elements.\n    if (matcher) {\n      // This will be usually just one pattern but we support matchers with many patterns too.\n      var matcherResult = matcher.match(data.viewItem);\n\n      // If there is no match, this callback should not do anything.\n      if (!matcherResult) {\n        return;\n      }\n      match = matcherResult.match;\n    }\n\n    // Force consuming element's name.\n    match.name = true;\n\n    // Create model element basing on config.\n    var modelElement = getModelElement(config.model, data.viewItem, conversionApi.writer);\n\n    // Do not convert if element building function returned falsy value.\n    if (!modelElement) {\n      return;\n    }\n\n    // When element was already consumed then skip it.\n    if (!conversionApi.consumable.test(data.viewItem, match)) {\n      return;\n    }\n\n    // Find allowed parent for element that we are going to insert.\n    // If current parent does not allow to insert element but one of the ancestors does\n    // then split nodes to allowed parent.\n    var splitResult = conversionApi.splitToAllowedParent(modelElement, data.modelCursor);\n\n    // When there is no split result it means that we can't insert element to model tree, so let's skip it.\n    if (!splitResult) {\n      return;\n    }\n\n    // Insert element on allowed position.\n    conversionApi.writer.insert(modelElement, splitResult.position);\n\n    // Convert children and insert to element.\n    conversionApi.convertChildren(data.viewItem, conversionApi.writer.createPositionAt(modelElement, 0));\n\n    // Consume appropriate value from consumable values list.\n    conversionApi.consumable.consume(data.viewItem, match);\n    var parts = conversionApi.getSplitParts(modelElement);\n\n    // Set conversion result range.\n    data.modelRange = new ModelRange(conversionApi.writer.createPositionBefore(modelElement), conversionApi.writer.createPositionAfter(parts[parts.length - 1]));\n\n    // Now we need to check where the `modelCursor` should be.\n    if (splitResult.cursorParent) {\n      // If we split parent to insert our element then we want to continue conversion in the new part of the split parent.\n      //\n      // before: <allowed><notAllowed>foo[]</notAllowed></allowed>\n      // after:  <allowed><notAllowed>foo</notAllowed><converted></converted><notAllowed>[]</notAllowed></allowed>\n\n      data.modelCursor = conversionApi.writer.createPositionAt(splitResult.cursorParent, 0);\n    } else {\n      // Otherwise just continue after inserted element.\n\n      data.modelCursor = data.modelRange.end;\n    }\n  };\n}\n\n// Helper function for upcasting-to-element converter. Takes the model configuration, the converted view element\n// and a writer instance and returns a model element instance to be inserted in the model.\n//\n// @param {String|Function|module:engine/model/element~Element} model Model conversion configuration.\n// @param {module:engine/view/node~Node} input The converted view node.\n// @param {module:engine/model/writer~Writer} writer A writer instance to use to create the model element.\nfunction getModelElement(model, input, writer) {\n  if (model instanceof Function) {\n    return model(input, writer);\n  } else {\n    return writer.createElement(model);\n  }\n}\n\n// Helper function view-attribute-to-model-attribute helper. Normalizes `config.view` which was set as `String` or\n// as an `Object` with `key`, `value` and `name` properties. Normalized `config.view` has is compatible with\n// {@link module:engine/view/matcher~MatcherPattern}.\n//\n// @param {Object} config Conversion config.\n// @returns {String} Key of the converted view attribute.\nfunction normalizeViewAttributeKeyValueConfig(config) {\n  if (typeof config.view == 'string') {\n    config.view = {\n      key: config.view\n    };\n  }\n  var key = config.view.key;\n  var normalized;\n  if (key == 'class' || key == 'style') {\n    var keyName = key == 'class' ? 'classes' : 'styles';\n    normalized = _defineProperty({}, keyName, config.view.value);\n  } else {\n    var value = typeof config.view.value == 'undefined' ? /[\\s\\S]*/ : config.view.value;\n    normalized = {\n      attributes: _defineProperty({}, key, value)\n    };\n  }\n  if (config.view.name) {\n    normalized.name = config.view.name;\n  }\n  config.view = normalized;\n  return key;\n}\n\n// Helper function that normalizes `config.model` in from-model-attribute conversion. `config.model` can be set\n// as a `String`, an `Object` with only `key` property or an `Object` with `key` and `value` properties. Normalized\n// `config.model` is an `Object` with `key` and `value` properties.\n//\n// @param {Object} config Conversion config.\n// @param {String} viewAttributeKeyToCopy Key of the converted view attribute. If it is set, model attribute value\n// will be equal to view attribute value.\nfunction normalizeModelAttributeConfig(config) {\n  var viewAttributeKeyToCopy = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  var defaultModelValue = viewAttributeKeyToCopy === null ? true : function (viewElement) {\n    return viewElement.getAttribute(viewAttributeKeyToCopy);\n  };\n  var key = _typeof(config.model) != 'object' ? config.model : config.model.key;\n  var value = _typeof(config.model) != 'object' || typeof config.model.value == 'undefined' ? defaultModelValue : config.model.value;\n  config.model = {\n    key: key,\n    value: value\n  };\n}\n\n// Helper for to-model-attribute conversion. Takes the model attribute name and conversion configuration and returns\n// a proper converter function.\n//\n// @param {String} modelAttributeKey The key of the model attribute to set on a model node.\n// @param {Object|Array.<Object>} config Conversion configuration. It is possible to provide multiple configurations in an array.\n// @param {Boolean} shallow If set to `true` the attribute will be set only on top-level nodes. Otherwise, it will be set\n// on all elements in the range.\nfunction prepareToAttributeConverter(config, shallow) {\n  var matcher = new Matcher(config.view);\n  return function (evt, data, conversionApi) {\n    var match = matcher.match(data.viewItem);\n\n    // If there is no match, this callback should not do anything.\n    if (!match) {\n      return;\n    }\n    var modelKey = config.model.key;\n    var modelValue = typeof config.model.value == 'function' ? config.model.value(data.viewItem) : config.model.value;\n\n    // Do not convert if attribute building function returned falsy value.\n    if (modelValue === null) {\n      return;\n    }\n    if (onlyViewNameIsDefined(config.view, data.viewItem)) {\n      match.match.name = true;\n    } else {\n      // Do not test or consume `name` consumable.\n      delete match.match.name;\n    }\n\n    // Try to consume appropriate values from consumable values list.\n    if (!conversionApi.consumable.test(data.viewItem, match.match)) {\n      return;\n    }\n\n    // Since we are converting to attribute we need an range on which we will set the attribute.\n    // If the range is not created yet, we will create it.\n    if (!data.modelRange) {\n      // Convert children and set conversion result as a current data.\n      data = Object.assign(data, conversionApi.convertChildren(data.viewItem, data.modelCursor));\n    }\n\n    // Set attribute on current `output`. `Schema` is checked inside this helper function.\n    var attributeWasSet = setAttributeOn(data.modelRange, {\n      key: modelKey,\n      value: modelValue\n    }, shallow, conversionApi);\n    if (attributeWasSet) {\n      conversionApi.consumable.consume(data.viewItem, match.match);\n    }\n  };\n}\n\n// Helper function that checks if element name should be consumed in attribute converters.\n//\n// @param {Object} config Conversion view config.\n// @returns {Boolean}\nfunction onlyViewNameIsDefined(viewConfig, viewItem) {\n  // https://github.com/ckeditor/ckeditor5-engine/issues/1786\n  var configToTest = typeof viewConfig == 'function' ? viewConfig(viewItem) : viewConfig;\n  if (_typeof(configToTest) == 'object' && !getViewElementNameFromConfig(configToTest)) {\n    return false;\n  }\n  return !configToTest.classes && !configToTest.attributes && !configToTest.styles;\n}\n\n// Helper function for to-model-attribute converter. Sets model attribute on given range. Checks {@link module:engine/model/schema~Schema}\n// to ensure proper model structure.\n//\n// @param {module:engine/model/range~Range} modelRange Model range on which attribute should be set.\n// @param {Object} modelAttribute Model attribute to set.\n// @param {module:engine/conversion/upcastdispatcher~UpcastConversionApi} conversionApi Conversion API.\n// @param {Boolean} shallow If set to `true` the attribute will be set only on top-level nodes. Otherwise, it will be set\n// on all elements in the range.\n// @returns {Boolean} `true` if attribute was set on at least one node from given `modelRange`.\nfunction setAttributeOn(modelRange, modelAttribute, shallow, conversionApi) {\n  var result = false;\n\n  // Set attribute on each item in range according to Schema.\n  for (var _i = 0, _Array$from = Array.from(modelRange.getItems({\n      shallow: shallow\n    })); _i < _Array$from.length; _i++) {\n    var node = _Array$from[_i];\n    if (conversionApi.schema.checkAttribute(node, modelAttribute.key)) {\n      conversionApi.writer.setAttribute(modelAttribute.key, modelAttribute.value, node);\n      result = true;\n    }\n  }\n  return result;\n}\n\n// Helper function for upcasting-to-marker conversion. Takes the config in a format requested by `upcastElementToMarker()`\n// function and converts it to a format that is supported by `_upcastElementToElement()` function.\n//\n// @param {Object} config Conversion configuration.\nfunction normalizeToMarkerConfig(config) {\n  var oldModel = config.model;\n  config.model = function (viewElement, modelWriter) {\n    var markerName = typeof oldModel == 'string' ? oldModel : oldModel(viewElement);\n    return modelWriter.createElement('$marker', {\n      'data-name': markerName\n    });\n  };\n}","import _toConsumableArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.regexp.test.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/conversion/viewconsumable\n */\n\nimport { isArray } from 'lodash-es';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * Class used for handling consumption of view {@link module:engine/view/element~Element elements},\n * {@link module:engine/view/text~Text text nodes} and {@link module:engine/view/documentfragment~DocumentFragment document fragments}.\n * Element's name and its parts (attributes, classes and styles) can be consumed separately. Consuming an element's name\n * does not consume its attributes, classes and styles.\n * To add items for consumption use {@link module:engine/conversion/viewconsumable~ViewConsumable#add add method}.\n * To test items use {@link module:engine/conversion/viewconsumable~ViewConsumable#test test method}.\n * To consume items use {@link module:engine/conversion/viewconsumable~ViewConsumable#consume consume method}.\n * To revert already consumed items use {@link module:engine/conversion/viewconsumable~ViewConsumable#revert revert method}.\n *\n *\t\tviewConsumable.add( element, { name: true } ); // Adds element's name as ready to be consumed.\n *\t\tviewConsumable.add( textNode ); // Adds text node for consumption.\n *\t\tviewConsumable.add( docFragment ); // Adds document fragment for consumption.\n *\t\tviewConsumable.test( element, { name: true }  ); // Tests if element's name can be consumed.\n *\t\tviewConsumable.test( textNode ); // Tests if text node can be consumed.\n *\t\tviewConsumable.test( docFragment ); // Tests if document fragment can be consumed.\n *\t\tviewConsumable.consume( element, { name: true }  ); // Consume element's name.\n *\t\tviewConsumable.consume( textNode ); // Consume text node.\n *\t\tviewConsumable.consume( docFragment ); // Consume document fragment.\n *\t\tviewConsumable.revert( element, { name: true }  ); // Revert already consumed element's name.\n *\t\tviewConsumable.revert( textNode ); // Revert already consumed text node.\n *\t\tviewConsumable.revert( docFragment ); // Revert already consumed document fragment.\n */\nvar ViewConsumable = /*#__PURE__*/function () {\n  /**\n   * Creates new ViewConsumable.\n   */\n  function ViewConsumable() {\n    _classCallCheck(this, ViewConsumable);\n    /**\n     * Map of consumable elements. If {@link module:engine/view/element~Element element} is used as a key,\n     * {@link module:engine/conversion/viewconsumable~ViewElementConsumables ViewElementConsumables} instance is stored as value.\n     * For {@link module:engine/view/text~Text text nodes} and\n     * {@link module:engine/view/documentfragment~DocumentFragment document fragments} boolean value is stored as value.\n     *\n     * @protected\n     * @member {Map.<module:engine/conversion/viewconsumable~ViewElementConsumables|Boolean>}\n    */\n    this._consumables = new Map();\n  }\n\n  /**\n   * Adds {@link module:engine/view/element~Element view element}, {@link module:engine/view/text~Text text node} or\n   * {@link module:engine/view/documentfragment~DocumentFragment document fragment} as ready to be consumed.\n   *\n   *\t\tviewConsumable.add( p, { name: true } ); // Adds element's name to consume.\n   *\t\tviewConsumable.add( p, { attributes: 'name' } ); // Adds element's attribute.\n   *\t\tviewConsumable.add( p, { classes: 'foobar' } ); // Adds element's class.\n   *\t\tviewConsumable.add( p, { styles: 'color' } ); // Adds element's style\n   *\t\tviewConsumable.add( p, { attributes: 'name', styles: 'color' } ); // Adds attribute and style.\n   *\t\tviewConsumable.add( p, { classes: [ 'baz', 'bar' ] } ); // Multiple consumables can be provided.\n   *\t\tviewConsumable.add( textNode ); // Adds text node to consume.\n   *\t\tviewConsumable.add( docFragment ); // Adds document fragment to consume.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `viewconsumable-invalid-attribute` when `class` or `style`\n   * attribute is provided - it should be handled separately by providing actual style/class.\n   *\n   *\t\tviewConsumable.add( p, { attributes: 'style' } ); // This call will throw an exception.\n   *\t\tviewConsumable.add( p, { styles: 'color' } ); // This is properly handled style.\n   *\n   * @param {module:engine/view/element~Element|module:engine/view/text~Text|module:engine/view/documentfragment~DocumentFragment} element\n   * @param {Object} [consumables] Used only if first parameter is {@link module:engine/view/element~Element view element} instance.\n   * @param {Boolean} consumables.name If set to true element's name will be included.\n   * @param {String|Array.<String>} consumables.attributes Attribute name or array of attribute names.\n   * @param {String|Array.<String>} consumables.classes Class name or array of class names.\n   * @param {String|Array.<String>} consumables.styles Style name or array of style names.\n   */\n  return _createClass(ViewConsumable, [{\n    key: \"add\",\n    value: function add(element, consumables) {\n      var elementConsumables;\n\n      // For text nodes and document fragments just mark them as consumable.\n      if (element.is('text') || element.is('documentFragment')) {\n        this._consumables.set(element, true);\n        return;\n      }\n\n      // For elements create new ViewElementConsumables or update already existing one.\n      if (!this._consumables.has(element)) {\n        elementConsumables = new ViewElementConsumables();\n        this._consumables.set(element, elementConsumables);\n      } else {\n        elementConsumables = this._consumables.get(element);\n      }\n      elementConsumables.add(consumables);\n    }\n\n    /**\n     * Tests if {@link module:engine/view/element~Element view element}, {@link module:engine/view/text~Text text node} or\n     * {@link module:engine/view/documentfragment~DocumentFragment document fragment} can be consumed.\n     * It returns `true` when all items included in method's call can be consumed. Returns `false` when\n     * first already consumed item is found and `null` when first non-consumable item is found.\n     *\n     *\t\tviewConsumable.test( p, { name: true } ); // Tests element's name.\n     *\t\tviewConsumable.test( p, { attributes: 'name' } ); // Tests attribute.\n     *\t\tviewConsumable.test( p, { classes: 'foobar' } ); // Tests class.\n     *\t\tviewConsumable.test( p, { styles: 'color' } ); // Tests style.\n     *\t\tviewConsumable.test( p, { attributes: 'name', styles: 'color' } ); // Tests attribute and style.\n     *\t\tviewConsumable.test( p, { classes: [ 'baz', 'bar' ] } ); // Multiple consumables can be tested.\n     *\t\tviewConsumable.test( textNode ); // Tests text node.\n     *\t\tviewConsumable.test( docFragment ); // Tests document fragment.\n     *\n     * Testing classes and styles as attribute will test if all added classes/styles can be consumed.\n     *\n     *\t\tviewConsumable.test( p, { attributes: 'class' } ); // Tests if all added classes can be consumed.\n     *\t\tviewConsumable.test( p, { attributes: 'style' } ); // Tests if all added styles can be consumed.\n     *\n     * @param {module:engine/view/element~Element|module:engine/view/text~Text|module:engine/view/documentfragment~DocumentFragment} element\n     * @param {Object} [consumables] Used only if first parameter is {@link module:engine/view/element~Element view element} instance.\n     * @param {Boolean} consumables.name If set to true element's name will be included.\n     * @param {String|Array.<String>} consumables.attributes Attribute name or array of attribute names.\n     * @param {String|Array.<String>} consumables.classes Class name or array of class names.\n     * @param {String|Array.<String>} consumables.styles Style name or array of style names.\n     * @returns {Boolean|null} Returns `true` when all items included in method's call can be consumed. Returns `false`\n     * when first already consumed item is found and `null` when first non-consumable item is found.\n     */\n  }, {\n    key: \"test\",\n    value: function test(element, consumables) {\n      var elementConsumables = this._consumables.get(element);\n      if (elementConsumables === undefined) {\n        return null;\n      }\n\n      // For text nodes and document fragments return stored boolean value.\n      if (element.is('text') || element.is('documentFragment')) {\n        return elementConsumables;\n      }\n\n      // For elements test consumables object.\n      return elementConsumables.test(consumables);\n    }\n\n    /**\n     * Consumes {@link module:engine/view/element~Element view element}, {@link module:engine/view/text~Text text node} or\n     * {@link module:engine/view/documentfragment~DocumentFragment document fragment}.\n     * It returns `true` when all items included in method's call can be consumed, otherwise returns `false`.\n     *\n     *\t\tviewConsumable.consume( p, { name: true } ); // Consumes element's name.\n     *\t\tviewConsumable.consume( p, { attributes: 'name' } ); // Consumes element's attribute.\n     *\t\tviewConsumable.consume( p, { classes: 'foobar' } ); // Consumes element's class.\n     *\t\tviewConsumable.consume( p, { styles: 'color' } ); // Consumes element's style.\n     *\t\tviewConsumable.consume( p, { attributes: 'name', styles: 'color' } ); // Consumes attribute and style.\n     *\t\tviewConsumable.consume( p, { classes: [ 'baz', 'bar' ] } ); // Multiple consumables can be consumed.\n     *\t\tviewConsumable.consume( textNode ); // Consumes text node.\n     *\t\tviewConsumable.consume( docFragment ); // Consumes document fragment.\n     *\n     * Consuming classes and styles as attribute will test if all added classes/styles can be consumed.\n     *\n     *\t\tviewConsumable.consume( p, { attributes: 'class' } ); // Consume only if all added classes can be consumed.\n     *\t\tviewConsumable.consume( p, { attributes: 'style' } ); // Consume only if all added styles can be consumed.\n     *\n     * @param {module:engine/view/element~Element|module:engine/view/text~Text|module:engine/view/documentfragment~DocumentFragment} element\n     * @param {Object} [consumables] Used only if first parameter is {@link module:engine/view/element~Element view element} instance.\n     * @param {Boolean} consumables.name If set to true element's name will be included.\n     * @param {String|Array.<String>} consumables.attributes Attribute name or array of attribute names.\n     * @param {String|Array.<String>} consumables.classes Class name or array of class names.\n     * @param {String|Array.<String>} consumables.styles Style name or array of style names.\n     * @returns {Boolean} Returns `true` when all items included in method's call can be consumed,\n     * otherwise returns `false`.\n     */\n  }, {\n    key: \"consume\",\n    value: function consume(element, consumables) {\n      if (this.test(element, consumables)) {\n        if (element.is('text') || element.is('documentFragment')) {\n          // For text nodes and document fragments set value to false.\n          this._consumables.set(element, false);\n        } else {\n          // For elements - consume consumables object.\n          this._consumables.get(element).consume(consumables);\n        }\n        return true;\n      }\n      return false;\n    }\n\n    /**\n     * Reverts {@link module:engine/view/element~Element view element}, {@link module:engine/view/text~Text text node} or\n     * {@link module:engine/view/documentfragment~DocumentFragment document fragment} so they can be consumed once again.\n     * Method does not revert items that were never previously added for consumption, even if they are included in\n     * method's call.\n     *\n     *\t\tviewConsumable.revert( p, { name: true } ); // Reverts element's name.\n     *\t\tviewConsumable.revert( p, { attributes: 'name' } ); // Reverts element's attribute.\n     *\t\tviewConsumable.revert( p, { classes: 'foobar' } ); // Reverts element's class.\n     *\t\tviewConsumable.revert( p, { styles: 'color' } ); // Reverts element's style.\n     *\t\tviewConsumable.revert( p, { attributes: 'name', styles: 'color' } ); // Reverts attribute and style.\n     *\t\tviewConsumable.revert( p, { classes: [ 'baz', 'bar' ] } ); // Multiple names can be reverted.\n     *\t\tviewConsumable.revert( textNode ); // Reverts text node.\n     *\t\tviewConsumable.revert( docFragment ); // Reverts document fragment.\n     *\n     * Reverting classes and styles as attribute will revert all classes/styles that were previously added for\n     * consumption.\n     *\n     *\t\tviewConsumable.revert( p, { attributes: 'class' } ); // Reverts all classes added for consumption.\n     *\t\tviewConsumable.revert( p, { attributes: 'style' } ); // Reverts all styles added for consumption.\n     *\n     * @param {module:engine/view/element~Element|module:engine/view/text~Text|module:engine/view/documentfragment~DocumentFragment} element\n     * @param {Object} [consumables] Used only if first parameter is {@link module:engine/view/element~Element view element} instance.\n     * @param {Boolean} consumables.name If set to true element's name will be included.\n     * @param {String|Array.<String>} consumables.attributes Attribute name or array of attribute names.\n     * @param {String|Array.<String>} consumables.classes Class name or array of class names.\n     * @param {String|Array.<String>} consumables.styles Style name or array of style names.\n     */\n  }, {\n    key: \"revert\",\n    value: function revert(element, consumables) {\n      var elementConsumables = this._consumables.get(element);\n      if (elementConsumables !== undefined) {\n        if (element.is('text') || element.is('documentFragment')) {\n          // For text nodes and document fragments - set consumable to true.\n          this._consumables.set(element, true);\n        } else {\n          // For elements - revert items from consumables object.\n          elementConsumables.revert(consumables);\n        }\n      }\n    }\n\n    /**\n     * Creates consumable object from {@link module:engine/view/element~Element view element}. Consumable object will include\n     * element's name and all its attributes, classes and styles.\n     *\n     * @static\n     * @param {module:engine/view/element~Element} element\n     * @returns {Object} consumables\n     */\n  }], [{\n    key: \"consumablesFromElement\",\n    value: function consumablesFromElement(element) {\n      var consumables = {\n        name: true,\n        attributes: [],\n        classes: [],\n        styles: []\n      };\n      var attributes = element.getAttributeKeys();\n      var _iterator = _createForOfIteratorHelper(attributes),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var attribute = _step.value;\n          // Skip classes and styles - will be added separately.\n          if (attribute == 'style' || attribute == 'class') {\n            continue;\n          }\n          consumables.attributes.push(attribute);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      var classes = element.getClassNames();\n      var _iterator2 = _createForOfIteratorHelper(classes),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var className = _step2.value;\n          consumables.classes.push(className);\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      var styles = element.getStyleNames();\n      var _iterator3 = _createForOfIteratorHelper(styles),\n        _step3;\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var style = _step3.value;\n          consumables.styles.push(style);\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n      return consumables;\n    }\n\n    /**\n     * Creates {@link module:engine/conversion/viewconsumable~ViewConsumable ViewConsumable} instance from\n     * {@link module:engine/view/node~Node node} or {@link module:engine/view/documentfragment~DocumentFragment document fragment}.\n     * Instance will contain all elements, child nodes, attributes, styles and classes added for consumption.\n     *\n     * @static\n     * @param {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment} from View node or document fragment\n     * from which `ViewConsumable` will be created.\n     * @param {module:engine/conversion/viewconsumable~ViewConsumable} [instance] If provided, given `ViewConsumable` instance will be used\n     * to add all consumables. It will be returned instead of a new instance.\n     */\n  }, {\n    key: \"createFrom\",\n    value: function createFrom(from, instance) {\n      if (!instance) {\n        instance = new ViewConsumable();\n      }\n      if (from.is('text')) {\n        instance.add(from);\n        return instance;\n      }\n\n      // Add `from` itself, if it is an element.\n      if (from.is('element')) {\n        instance.add(from, ViewConsumable.consumablesFromElement(from));\n      }\n      if (from.is('documentFragment')) {\n        instance.add(from);\n      }\n      var _iterator4 = _createForOfIteratorHelper(from.getChildren()),\n        _step4;\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var child = _step4.value;\n          instance = ViewConsumable.createFrom(child, instance);\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n      return instance;\n    }\n  }]);\n}();\n/**\n * This is a private helper-class for {@link module:engine/conversion/viewconsumable~ViewConsumable}.\n * It represents and manipulates consumable parts of a single {@link module:engine/view/element~Element}.\n *\n * @private\n */\nexport { ViewConsumable as default };\nvar ViewElementConsumables = /*#__PURE__*/function () {\n  /**\n   * Creates ViewElementConsumables instance.\n   */\n  function ViewElementConsumables() {\n    _classCallCheck(this, ViewElementConsumables);\n    /**\n     * Flag indicating if name of the element can be consumed.\n     *\n     * @private\n     * @member {Boolean}\n     */\n    this._canConsumeName = null;\n\n    /**\n     * Contains maps of element's consumables: attributes, classes and styles.\n     *\n     * @private\n     * @member {Object}\n     */\n    this._consumables = {\n      attributes: new Map(),\n      styles: new Map(),\n      classes: new Map()\n    };\n  }\n\n  /**\n   * Adds consumable parts of the {@link module:engine/view/element~Element view element}.\n   * Element's name itself can be marked to be consumed (when element's name is consumed its attributes, classes and\n   * styles still could be consumed):\n   *\n   *\t\tconsumables.add( { name: true } );\n   *\n   * Attributes classes and styles:\n   *\n   *\t\tconsumables.add( { attributes: 'title', classes: 'foo', styles: 'color' } );\n   *\t\tconsumables.add( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `viewconsumable-invalid-attribute` when `class` or `style`\n   * attribute is provided - it should be handled separately by providing `style` and `class` in consumables object.\n   *\n   * @param {Object} consumables Object describing which parts of the element can be consumed.\n   * @param {Boolean} consumables.name If set to `true` element's name will be added as consumable.\n   * @param {String|Array.<String>} consumables.attributes Attribute name or array of attribute names to add as consumable.\n   * @param {String|Array.<String>} consumables.classes Class name or array of class names to add as consumable.\n   * @param {String|Array.<String>} consumables.styles Style name or array of style names to add as consumable.\n   */\n  return _createClass(ViewElementConsumables, [{\n    key: \"add\",\n    value: function add(consumables) {\n      if (consumables.name) {\n        this._canConsumeName = true;\n      }\n      for (var type in this._consumables) {\n        if (type in consumables) {\n          this._add(type, consumables[type]);\n        }\n      }\n    }\n\n    /**\n     * Tests if parts of the {@link module:engine/view/node~Node view node} can be consumed.\n     *\n     * Element's name can be tested:\n     *\n     *\t\tconsumables.test( { name: true } );\n     *\n     * Attributes classes and styles:\n     *\n     *\t\tconsumables.test( { attributes: 'title', classes: 'foo', styles: 'color' } );\n     *\t\tconsumables.test( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );\n     *\n     * @param {Object} consumables Object describing which parts of the element should be tested.\n     * @param {Boolean} consumables.name If set to `true` element's name will be tested.\n     * @param {String|Array.<String>} consumables.attributes Attribute name or array of attribute names to test.\n     * @param {String|Array.<String>} consumables.classes Class name or array of class names to test.\n     * @param {String|Array.<String>} consumables.styles Style name or array of style names to test.\n     * @returns {Boolean|null} `true` when all tested items can be consumed, `null` when even one of the items\n     * was never marked for consumption and `false` when even one of the items was already consumed.\n     */\n  }, {\n    key: \"test\",\n    value: function test(consumables) {\n      // Check if name can be consumed.\n      if (consumables.name && !this._canConsumeName) {\n        return this._canConsumeName;\n      }\n      for (var type in this._consumables) {\n        if (type in consumables) {\n          var value = this._test(type, consumables[type]);\n          if (value !== true) {\n            return value;\n          }\n        }\n      }\n\n      // Return true only if all can be consumed.\n      return true;\n    }\n\n    /**\n     * Consumes parts of {@link module:engine/view/element~Element view element}. This function does not check if consumable item\n     * is already consumed - it consumes all consumable items provided.\n     * Element's name can be consumed:\n     *\n     *\t\tconsumables.consume( { name: true } );\n     *\n     * Attributes classes and styles:\n     *\n     *\t\tconsumables.consume( { attributes: 'title', classes: 'foo', styles: 'color' } );\n     *\t\tconsumables.consume( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );\n     *\n     * @param {Object} consumables Object describing which parts of the element should be consumed.\n     * @param {Boolean} consumables.name If set to `true` element's name will be consumed.\n     * @param {String|Array.<String>} consumables.attributes Attribute name or array of attribute names to consume.\n     * @param {String|Array.<String>} consumables.classes Class name or array of class names to consume.\n     * @param {String|Array.<String>} consumables.styles Style name or array of style names to consume.\n     */\n  }, {\n    key: \"consume\",\n    value: function consume(consumables) {\n      if (consumables.name) {\n        this._canConsumeName = false;\n      }\n      for (var type in this._consumables) {\n        if (type in consumables) {\n          this._consume(type, consumables[type]);\n        }\n      }\n    }\n\n    /**\n     * Revert already consumed parts of {@link module:engine/view/element~Element view Element}, so they can be consumed once again.\n     * Element's name can be reverted:\n     *\n     *\t\tconsumables.revert( { name: true } );\n     *\n     * Attributes classes and styles:\n     *\n     *\t\tconsumables.revert( { attributes: 'title', classes: 'foo', styles: 'color' } );\n     *\t\tconsumables.revert( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );\n     *\n     * @param {Object} consumables Object describing which parts of the element should be reverted.\n     * @param {Boolean} consumables.name If set to `true` element's name will be reverted.\n     * @param {String|Array.<String>} consumables.attributes Attribute name or array of attribute names to revert.\n     * @param {String|Array.<String>} consumables.classes Class name or array of class names to revert.\n     * @param {String|Array.<String>} consumables.styles Style name or array of style names to revert.\n     */\n  }, {\n    key: \"revert\",\n    value: function revert(consumables) {\n      if (consumables.name) {\n        this._canConsumeName = true;\n      }\n      for (var type in this._consumables) {\n        if (type in consumables) {\n          this._revert(type, consumables[type]);\n        }\n      }\n    }\n\n    /**\n     * Helper method that adds consumables of a given type: attribute, class or style.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `viewconsumable-invalid-attribute` when `class` or `style`\n     * type is provided - it should be handled separately by providing actual style/class type.\n     *\n     * @private\n     * @param {String} type Type of the consumable item: `attributes`, `classes` or `styles`.\n     * @param {String|Array.<String>} item Consumable item or array of items.\n     */\n  }, {\n    key: \"_add\",\n    value: function _add(type, item) {\n      var items = isArray(item) ? item : [item];\n      var consumables = this._consumables[type];\n      var _iterator5 = _createForOfIteratorHelper(items),\n        _step5;\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var name = _step5.value;\n          if (type === 'attributes' && (name === 'class' || name === 'style')) {\n            /**\n             * Class and style attributes should be handled separately in\n             * {@link module:engine/conversion/viewconsumable~ViewConsumable#add `ViewConsumable#add()`}.\n             *\n             * What you have done is trying to use:\n             *\n             *\t\tconsumables.add( { attributes: [ 'class', 'style' ] } );\n             *\n             * While each class and style should be registered separately:\n             *\n             *\t\tconsumables.add( { classes: 'some-class', styles: 'font-weight' } );\n             *\n             * @error viewconsumable-invalid-attribute\n             */\n            throw new CKEditorError('viewconsumable-invalid-attribute: Classes and styles should be handled separately.', this);\n          }\n          consumables.set(name, true);\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n    }\n\n    /**\n     * Helper method that tests consumables of a given type: attribute, class or style.\n     *\n     * @private\n     * @param {String} type Type of the consumable item: `attributes`, `classes` or `styles`.\n     * @param {String|Array.<String>} item Consumable item or array of items.\n     * @returns {Boolean|null} Returns `true` if all items can be consumed, `null` when one of the items cannot be\n     * consumed and `false` when one of the items is already consumed.\n     */\n  }, {\n    key: \"_test\",\n    value: function _test(type, item) {\n      var items = isArray(item) ? item : [item];\n      var consumables = this._consumables[type];\n      var _iterator6 = _createForOfIteratorHelper(items),\n        _step6;\n      try {\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n          var name = _step6.value;\n          if (type === 'attributes' && (name === 'class' || name === 'style')) {\n            var consumableName = name == 'class' ? 'classes' : 'styles';\n\n            // Check all classes/styles if class/style attribute is tested.\n            var value = this._test(consumableName, _toConsumableArray(this._consumables[consumableName].keys()));\n            if (value !== true) {\n              return value;\n            }\n          } else {\n            var _value = consumables.get(name);\n            // Return null if attribute is not found.\n            if (_value === undefined) {\n              return null;\n            }\n            if (!_value) {\n              return false;\n            }\n          }\n        }\n      } catch (err) {\n        _iterator6.e(err);\n      } finally {\n        _iterator6.f();\n      }\n      return true;\n    }\n\n    /**\n     * Helper method that consumes items of a given type: attribute, class or style.\n     *\n     * @private\n     * @param {String} type Type of the consumable item: `attributes`, `classes` or `styles`.\n     * @param {String|Array.<String>} item Consumable item or array of items.\n     */\n  }, {\n    key: \"_consume\",\n    value: function _consume(type, item) {\n      var items = isArray(item) ? item : [item];\n      var consumables = this._consumables[type];\n      var _iterator7 = _createForOfIteratorHelper(items),\n        _step7;\n      try {\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n          var name = _step7.value;\n          if (type === 'attributes' && (name === 'class' || name === 'style')) {\n            var consumableName = name == 'class' ? 'classes' : 'styles';\n\n            // If class or style is provided for consumption - consume them all.\n            this._consume(consumableName, _toConsumableArray(this._consumables[consumableName].keys()));\n          } else {\n            consumables.set(name, false);\n          }\n        }\n      } catch (err) {\n        _iterator7.e(err);\n      } finally {\n        _iterator7.f();\n      }\n    }\n\n    /**\n     * Helper method that reverts items of a given type: attribute, class or style.\n     *\n     * @private\n     * @param {String} type Type of the consumable item: `attributes`, `classes` or , `styles`.\n     * @param {String|Array.<String>} item Consumable item or array of items.\n     */\n  }, {\n    key: \"_revert\",\n    value: function _revert(type, item) {\n      var items = isArray(item) ? item : [item];\n      var consumables = this._consumables[type];\n      var _iterator8 = _createForOfIteratorHelper(items),\n        _step8;\n      try {\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n          var name = _step8.value;\n          if (type === 'attributes' && (name === 'class' || name === 'style')) {\n            var consumableName = name == 'class' ? 'classes' : 'styles';\n\n            // If class or style is provided for reverting - revert them all.\n            this._revert(consumableName, _toConsumableArray(this._consumables[consumableName].keys()));\n          } else {\n            var value = consumables.get(name);\n            if (value === false) {\n              consumables.set(name, true);\n            }\n          }\n        }\n      } catch (err) {\n        _iterator8.e(err);\n      } finally {\n        _iterator8.f();\n      }\n    }\n  }]);\n}();","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/dataprocessor/basichtmlwriter\n */\n/* globals document */\n/**\n * Basic HTML writer. It uses the native `innerHTML` property for basic conversion\n * from a document fragment to an HTML string.\n *\n * @implements module:engine/dataprocessor/htmlwriter~HtmlWriter\n */\nvar BasicHtmlWriter = /*#__PURE__*/function () {\n  function BasicHtmlWriter() {\n    _classCallCheck(this, BasicHtmlWriter);\n  }\n  return _createClass(BasicHtmlWriter, [{\n    key: \"getHtml\",\n    value:\n    /**\n     * Returns an HTML string created from the document fragment.\n     *\n     * @param {DocumentFragment} fragment\n     * @returns {String}\n     */\n    function getHtml(fragment) {\n      var doc = document.implementation.createHTMLDocument('');\n      var container = doc.createElement('div');\n      container.appendChild(fragment);\n      return container.innerHTML;\n    }\n  }]);\n}();\nexport { BasicHtmlWriter as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/dataprocessor/htmldataprocessor\n */\n\n/* globals document, DOMParser */\n\nimport BasicHtmlWriter from './basichtmlwriter';\nimport DomConverter from '../view/domconverter';\n\n/**\n * The HTML data processor class.\n * This data processor implementation uses HTML as input and output data.\n *\n * @implements module:engine/dataprocessor/dataprocessor~DataProcessor\n */\nvar HtmlDataProcessor = /*#__PURE__*/function () {\n  /**\n   * Creates a new instance of the HTML data processor class.\n   */\n  function HtmlDataProcessor() {\n    _classCallCheck(this, HtmlDataProcessor);\n    /**\n     * A DOM parser instance used to parse an HTML string to an HTML document.\n     *\n     * @private\n     * @member {DOMParser}\n     */\n    this._domParser = new DOMParser();\n\n    /**\n     * A DOM converter used to convert DOM elements to view elements.\n     *\n     * @private\n     * @member {module:engine/view/domconverter~DomConverter}\n     */\n    this._domConverter = new DomConverter({\n      blockFillerMode: 'nbsp'\n    });\n\n    /**\n     * A basic HTML writer instance used to convert DOM elements to an HTML string.\n     *\n     * @private\n     * @member {module:engine/dataprocessor/basichtmlwriter~BasicHtmlWriter}\n     */\n    this._htmlWriter = new BasicHtmlWriter();\n  }\n\n  /**\n   * Converts a provided {@link module:engine/view/documentfragment~DocumentFragment document fragment}\n   * to data format &mdash; in this case to an HTML string.\n   *\n   * @param {module:engine/view/documentfragment~DocumentFragment} viewFragment\n   * @returns {String} HTML string.\n   */\n  return _createClass(HtmlDataProcessor, [{\n    key: \"toData\",\n    value: function toData(viewFragment) {\n      // Convert view DocumentFragment to DOM DocumentFragment.\n      var domFragment = this._domConverter.viewToDom(viewFragment, document);\n\n      // Convert DOM DocumentFragment to HTML output.\n      return this._htmlWriter.getHtml(domFragment);\n    }\n\n    /**\n     * Converts the provided HTML string to a view tree.\n     *\n     * @param {String} data An HTML string.\n     * @returns {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment|null} A converted view element.\n     */\n  }, {\n    key: \"toView\",\n    value: function toView(data) {\n      // Convert input HTML data to DOM DocumentFragment.\n      var domFragment = this._toDom(data);\n\n      // Convert DOM DocumentFragment to view DocumentFragment.\n      return this._domConverter.domToView(domFragment);\n    }\n\n    /**\n     * Converts an HTML string to its DOM representation. Returns a document fragment containing nodes parsed from\n     * the provided data.\n     *\n     * @private\n     * @param {String} data\n     * @returns {DocumentFragment}\n     */\n  }, {\n    key: \"_toDom\",\n    value: function _toDom(data) {\n      var document = this._domParser.parseFromString(data, 'text/html');\n      var fragment = document.createDocumentFragment();\n      var nodes = document.body.childNodes;\n      while (nodes.length > 0) {\n        fragment.appendChild(nodes[0]);\n      }\n      return fragment;\n    }\n  }]);\n}();\nexport { HtmlDataProcessor as default };","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.push.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/batch\n */\n/**\n * A batch instance groups model changes ({@link module:engine/model/operation/operation~Operation operations}). All operations\n * grouped in a single batch can be reverted together, so you can also think about a batch as of a single undo step. If you want\n * to extend a given undo step, you can add more changes to the batch using {@link module:engine/model/model~Model#enqueueChange}:\n *\n *\t\tmodel.enqueueChange( batch, writer => {\n *\t\t\twriter.insertText( 'foo', paragraph, 'end' );\n *\t\t} );\n *\n * @see module:engine/model/model~Model#enqueueChange\n * @see module:engine/model/model~Model#change\n */\nvar Batch = /*#__PURE__*/function () {\n  /**\n   * Creates a batch instance.\n   *\n   * @see module:engine/model/model~Model#enqueueChange\n   * @see module:engine/model/model~Model#change\n   * @param {'transparent'|'default'} [type='default'] The type of the batch.\n   */\n  function Batch() {\n    var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'default';\n    _classCallCheck(this, Batch);\n    /**\n     * An array of operations that compose this batch.\n     *\n     * @readonly\n     * @type {Array.<module:engine/model/operation/operation~Operation>}\n     */\n    this.operations = [];\n\n    /**\n     * The type of the batch.\n     *\n     * It can be one of the following values:\n     * * `'default'` &ndash; All \"normal\" batches. This is the most commonly used type.\n     * * `'transparent'` &ndash; A batch that should be ignored by other features, i.e. an initial batch or collaborative editing\n     * changes.\n     *\n     * @readonly\n     * @type {'transparent'|'default'}\n     */\n    this.type = type;\n  }\n\n  /**\n   * Returns the base version of this batch, which is equal to the base version of the first operation in the batch.\n   * If there are no operations in the batch or neither operation has the base version set, it returns `null`.\n   *\n   * @readonly\n   * @type {Number|null}\n   */\n  return _createClass(Batch, [{\n    key: \"baseVersion\",\n    get: function get() {\n      var _iterator = _createForOfIteratorHelper(this.operations),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var op = _step.value;\n          if (op.baseVersion !== null) {\n            return op.baseVersion;\n          }\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      return null;\n    }\n\n    /**\n     * Adds an operation to the batch instance.\n     *\n     * @param {module:engine/model/operation/operation~Operation} operation An operation to add.\n     * @returns {module:engine/model/operation/operation~Operation} The added operation.\n     */\n  }, {\n    key: \"addOperation\",\n    value: function addOperation(operation) {\n      operation.batch = this;\n      this.operations.push(operation);\n      return operation;\n    }\n  }]);\n}();\nexport { Batch as default };","import _toConsumableArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\";\nimport _slicedToArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.repeat.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/differ\n */\n\nimport Position from './position';\nimport Range from './range';\n\n/**\n * Calculates the difference between two model states.\n *\n * Receives operations that are to be applied on the model document. Marks parts of the model document tree which\n * are changed and saves the state of these elements before the change. Then, it compares saved elements with the\n * changed elements, after all changes are applied on the model document. Calculates the diff between saved\n * elements and new ones and returns a change set.\n */\nvar Differ = /*#__PURE__*/function () {\n  /**\n   * Creates a `Differ` instance.\n   *\n   * @param {module:engine/model/markercollection~MarkerCollection} markerCollection Model's marker collection.\n   */\n  function Differ(markerCollection) {\n    _classCallCheck(this, Differ);\n    /**\n     * Reference to the model's marker collection.\n     *\n     * @private\n     * @type {module:engine/model/markercollection~MarkerCollection}\n     */\n    this._markerCollection = markerCollection;\n\n    /**\n     * A map that stores changes that happened in a given element.\n     *\n     * The keys of the map are references to the model elements.\n     * The values of the map are arrays with changes that were done on this element.\n     *\n     * @private\n     * @type {Map}\n     */\n    this._changesInElement = new Map();\n\n    /**\n     * A map that stores \"element's children snapshots\". A snapshot is representing children of a given element before\n     * the first change was applied on that element. Snapshot items are objects with two properties: `name`,\n     * containing the element name (or `'$text'` for a text node) and `attributes` which is a map of the node's attributes.\n     *\n     * @private\n     * @type {Map}\n     */\n    this._elementSnapshots = new Map();\n\n    /**\n     * A map that stores all changed markers.\n     *\n     * The keys of the map are marker names.\n     * The values of the map are objects with the `oldRange` and `newRange` properties. They store the marker range\n     * state before and after the change.\n     *\n     * @private\n     * @type {Map}\n     */\n    this._changedMarkers = new Map();\n\n    /**\n     * Stores the number of changes that were processed. Used to order the changes chronologically. It is important\n     * when changes are sorted.\n     *\n     * @private\n     * @type {Number}\n     */\n    this._changeCount = 0;\n\n    /**\n     * For efficiency purposes, `Differ` stores the change set returned by the differ after {@link #getChanges} call.\n     * Cache is reset each time a new operation is buffered. If the cache has not been reset, {@link #getChanges} will\n     * return the cached value instead of calculating it again.\n     *\n     * This property stores those changes that did not take place in graveyard root.\n     *\n     * @private\n     * @type {Array.<Object>|null}\n     */\n    this._cachedChanges = null;\n\n    /**\n     * For efficiency purposes, `Differ` stores the change set returned by the differ after the {@link #getChanges} call.\n     * The cache is reset each time a new operation is buffered. If the cache has not been reset, {@link #getChanges} will\n     * return the cached value instead of calculating it again.\n     *\n     * This property stores all changes evaluated by `Differ`, including those that took place in the graveyard.\n     *\n     * @private\n     * @type {Array.<Object>|null}\n     */\n    this._cachedChangesWithGraveyard = null;\n  }\n\n  /**\n   * Informs whether there are any changes buffered in `Differ`.\n   *\n   * @readonly\n   * @type {Boolean}\n   */\n  return _createClass(Differ, [{\n    key: \"isEmpty\",\n    get: function get() {\n      return this._changesInElement.size == 0 && this._changedMarkers.size == 0;\n    }\n\n    /**\n     * Marks given `item` in differ to be \"refreshed\". It means that the item will be marked as removed and inserted in the differ changes\n     * set, so it will be effectively re-converted when differ changes will be handled by a dispatcher.\n     *\n     * @param {module:engine/model/item~Item} item Item to refresh.\n     */\n  }, {\n    key: \"refreshItem\",\n    value: function refreshItem(item) {\n      if (this._isInInsertedElement(item.parent)) {\n        return;\n      }\n      this._markRemove(item.parent, item.startOffset, item.offsetSize);\n      this._markInsert(item.parent, item.startOffset, item.offsetSize);\n      var range = Range._createOn(item);\n      var _iterator = _createForOfIteratorHelper(this._markerCollection.getMarkersIntersectingRange(range)),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var marker = _step.value;\n          var markerRange = marker.getRange();\n          this.bufferMarkerChange(marker.name, markerRange, markerRange, marker.affectsData);\n        }\n\n        // Clear cache after each buffered operation as it is no longer valid.\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      this._cachedChanges = null;\n    }\n\n    /**\n     * Buffers the given operation. An operation has to be buffered before it is executed.\n     *\n     * Operation type is checked and it is checked which nodes it will affect. These nodes are then stored in `Differ`\n     * in the state before the operation is executed.\n     *\n     * @param {module:engine/model/operation/operation~Operation} operation An operation to buffer.\n     */\n  }, {\n    key: \"bufferOperation\",\n    value: function bufferOperation(operation) {\n      // Below we take an operation, check its type, then use its parameters in marking (private) methods.\n      // The general rule is to not mark elements inside inserted element. All inserted elements are re-rendered.\n      // Marking changes in them would cause a \"double\" changing then.\n      //\n      switch (operation.type) {\n        case 'insert':\n          {\n            if (this._isInInsertedElement(operation.position.parent)) {\n              return;\n            }\n            this._markInsert(operation.position.parent, operation.position.offset, operation.nodes.maxOffset);\n            break;\n          }\n        case 'addAttribute':\n        case 'removeAttribute':\n        case 'changeAttribute':\n          {\n            var _iterator2 = _createForOfIteratorHelper(operation.range.getItems({\n                shallow: true\n              })),\n              _step2;\n            try {\n              for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n                var item = _step2.value;\n                if (this._isInInsertedElement(item.parent)) {\n                  continue;\n                }\n                this._markAttribute(item);\n              }\n            } catch (err) {\n              _iterator2.e(err);\n            } finally {\n              _iterator2.f();\n            }\n            break;\n          }\n        case 'remove':\n        case 'move':\n        case 'reinsert':\n          {\n            // When range is moved to the same position then not mark it as a change.\n            // See: https://github.com/ckeditor/ckeditor5-engine/issues/1664.\n            if (operation.sourcePosition.isEqual(operation.targetPosition) || operation.sourcePosition.getShiftedBy(operation.howMany).isEqual(operation.targetPosition)) {\n              return;\n            }\n            var sourceParentInserted = this._isInInsertedElement(operation.sourcePosition.parent);\n            var targetParentInserted = this._isInInsertedElement(operation.targetPosition.parent);\n            if (!sourceParentInserted) {\n              this._markRemove(operation.sourcePosition.parent, operation.sourcePosition.offset, operation.howMany);\n            }\n            if (!targetParentInserted) {\n              this._markInsert(operation.targetPosition.parent, operation.getMovedRangeStart().offset, operation.howMany);\n            }\n            break;\n          }\n        case 'rename':\n          {\n            if (this._isInInsertedElement(operation.position.parent)) {\n              return;\n            }\n            this._markRemove(operation.position.parent, operation.position.offset, 1);\n            this._markInsert(operation.position.parent, operation.position.offset, 1);\n            var range = Range._createFromPositionAndShift(operation.position, 1);\n            var _iterator3 = _createForOfIteratorHelper(this._markerCollection.getMarkersIntersectingRange(range)),\n              _step3;\n            try {\n              for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n                var marker = _step3.value;\n                var markerRange = marker.getRange();\n                this.bufferMarkerChange(marker.name, markerRange, markerRange, marker.affectsData);\n              }\n            } catch (err) {\n              _iterator3.e(err);\n            } finally {\n              _iterator3.f();\n            }\n            break;\n          }\n        case 'split':\n          {\n            var splitElement = operation.splitPosition.parent;\n\n            // Mark that children of the split element were removed.\n            if (!this._isInInsertedElement(splitElement)) {\n              this._markRemove(splitElement, operation.splitPosition.offset, operation.howMany);\n            }\n\n            // Mark that the new element (split copy) was inserted.\n            if (!this._isInInsertedElement(operation.insertionPosition.parent)) {\n              this._markInsert(operation.insertionPosition.parent, operation.insertionPosition.offset, 1);\n            }\n\n            // If the split took the element from the graveyard, mark that the element from the graveyard was removed.\n            if (operation.graveyardPosition) {\n              this._markRemove(operation.graveyardPosition.parent, operation.graveyardPosition.offset, 1);\n            }\n            break;\n          }\n        case 'merge':\n          {\n            // Mark that the merged element was removed.\n            var mergedElement = operation.sourcePosition.parent;\n            if (!this._isInInsertedElement(mergedElement.parent)) {\n              this._markRemove(mergedElement.parent, mergedElement.startOffset, 1);\n            }\n\n            // Mark that the merged element was inserted into graveyard.\n            var graveyardParent = operation.graveyardPosition.parent;\n            this._markInsert(graveyardParent, operation.graveyardPosition.offset, 1);\n\n            // Mark that children of merged element were inserted at new parent.\n            var mergedIntoElement = operation.targetPosition.parent;\n            if (!this._isInInsertedElement(mergedIntoElement)) {\n              this._markInsert(mergedIntoElement, operation.targetPosition.offset, mergedElement.maxOffset);\n            }\n            break;\n          }\n      }\n\n      // Clear cache after each buffered operation as it is no longer valid.\n      this._cachedChanges = null;\n    }\n\n    /**\n     * Buffers a marker change.\n     *\n     * @param {String} markerName The name of the marker that changed.\n     * @param {module:engine/model/range~Range|null} oldRange Marker range before the change or `null` if the marker has just\n     * been created.\n     * @param {module:engine/model/range~Range|null} newRange Marker range after the change or `null` if the marker was removed.\n     * @param {Boolean} affectsData Flag indicating whether marker affects the editor data.\n     */\n  }, {\n    key: \"bufferMarkerChange\",\n    value: function bufferMarkerChange(markerName, oldRange, newRange, affectsData) {\n      var buffered = this._changedMarkers.get(markerName);\n      if (!buffered) {\n        this._changedMarkers.set(markerName, {\n          oldRange: oldRange,\n          newRange: newRange,\n          affectsData: affectsData\n        });\n      } else {\n        buffered.newRange = newRange;\n        buffered.affectsData = affectsData;\n        if (buffered.oldRange == null && buffered.newRange == null) {\n          // The marker is going to be removed (`newRange == null`) but it did not exist before the first buffered change\n          // (`buffered.oldRange == null`). In this case, do not keep the marker in buffer at all.\n          this._changedMarkers.delete(markerName);\n        }\n      }\n    }\n\n    /**\n     * Returns all markers that should be removed as a result of buffered changes.\n     *\n     * @returns {Array.<Object>} Markers to remove. Each array item is an object containing the `name` and `range` properties.\n     */\n  }, {\n    key: \"getMarkersToRemove\",\n    value: function getMarkersToRemove() {\n      var result = [];\n      var _iterator4 = _createForOfIteratorHelper(this._changedMarkers),\n        _step4;\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var _step4$value = _slicedToArray(_step4.value, 2),\n            name = _step4$value[0],\n            change = _step4$value[1];\n          if (change.oldRange != null) {\n            result.push({\n              name: name,\n              range: change.oldRange\n            });\n          }\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n      return result;\n    }\n\n    /**\n     * Returns all markers which should be added as a result of buffered changes.\n     *\n     * @returns {Array.<Object>} Markers to add. Each array item is an object containing the `name` and `range` properties.\n     */\n  }, {\n    key: \"getMarkersToAdd\",\n    value: function getMarkersToAdd() {\n      var result = [];\n      var _iterator5 = _createForOfIteratorHelper(this._changedMarkers),\n        _step5;\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var _step5$value = _slicedToArray(_step5.value, 2),\n            name = _step5$value[0],\n            change = _step5$value[1];\n          if (change.newRange != null) {\n            result.push({\n              name: name,\n              range: change.newRange\n            });\n          }\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n      return result;\n    }\n\n    /**\n     * Returns all markers which changed.\n     *\n     * @returns {Array.<Object>}\n     */\n  }, {\n    key: \"getChangedMarkers\",\n    value: function getChangedMarkers() {\n      return Array.from(this._changedMarkers).map(function (item) {\n        return {\n          name: item[0],\n          data: {\n            oldRange: item[1].oldRange,\n            newRange: item[1].newRange\n          }\n        };\n      });\n    }\n\n    /**\n     * Checks whether some of the buffered changes affect the editor data.\n     *\n     * Types of changes which affect the editor data:\n     *\n     * * model structure changes,\n     * * attribute changes,\n     * * changes of markers which were defined as `affectingData`.\n     *\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"hasDataChanges\",\n    value: function hasDataChanges() {\n      var _iterator6 = _createForOfIteratorHelper(this._changedMarkers),\n        _step6;\n      try {\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n          var _step6$value = _slicedToArray(_step6.value, 2),\n            change = _step6$value[1];\n          if (change.affectsData) {\n            return true;\n          }\n        }\n\n        // If markers do not affect the data, check whether there are some changes in elements.\n      } catch (err) {\n        _iterator6.e(err);\n      } finally {\n        _iterator6.f();\n      }\n      return this._changesInElement.size > 0;\n    }\n\n    /**\n     * Calculates the diff between the old model tree state (the state before the first buffered operations since the last {@link #reset}\n     * call) and the new model tree state (actual one). It should be called after all buffered operations are executed.\n     *\n     * The diff set is returned as an array of diff items, each describing a change done on the model. The items are sorted by\n     * the position on which the change happened. If a position {@link module:engine/model/position~Position#isBefore is before}\n     * another one, it will be on an earlier index in the diff set.\n     *\n     * Because calculating the diff is a costly operation, the result is cached. If no new operation was buffered since the\n     * previous {@link #getChanges} call, the next call will return the cached value.\n     *\n     * @param {Object} options Additional options.\n     * @param {Boolean} [options.includeChangesInGraveyard=false] If set to `true`, also changes that happened\n     * in the graveyard root will be returned. By default, changes in the graveyard root are not returned.\n     * @returns {Array.<Object>} Diff between the old and the new model tree state.\n     */\n  }, {\n    key: \"getChanges\",\n    value: function getChanges() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n        includeChangesInGraveyard: false\n      };\n      // If there are cached changes, just return them instead of calculating changes again.\n      if (this._cachedChanges) {\n        if (options.includeChangesInGraveyard) {\n          return this._cachedChangesWithGraveyard.slice();\n        } else {\n          return this._cachedChanges.slice();\n        }\n      }\n\n      // Will contain returned results.\n      var diffSet = [];\n\n      // Check all changed elements.\n      var _iterator7 = _createForOfIteratorHelper(this._changesInElement.keys()),\n        _step7;\n      try {\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n          var element = _step7.value;\n          // Get changes for this element and sort them.\n          var changes = this._changesInElement.get(element).sort(function (a, b) {\n            if (a.offset === b.offset) {\n              if (a.type != b.type) {\n                // If there are multiple changes at the same position, \"remove\" change should be first.\n                // If the order is different, for example, we would first add some nodes and then removed them\n                // (instead of the nodes that we should remove).\n                return a.type == 'remove' ? -1 : 1;\n              }\n              return 0;\n            }\n            return a.offset < b.offset ? -1 : 1;\n          });\n\n          // Get children of this element before any change was applied on it.\n          var snapshotChildren = this._elementSnapshots.get(element);\n          // Get snapshot of current element's children.\n          var elementChildren = _getChildrenSnapshot(element.getChildren());\n\n          // Generate actions basing on changes done on element.\n          var actions = _generateActionsFromChanges(snapshotChildren.length, changes);\n          var _i2 = 0; // Iterator in `elementChildren` array -- iterates through current children of element.\n          var j = 0; // Iterator in `snapshotChildren` array -- iterates through old children of element.\n\n          // Process every action.\n          var _iterator8 = _createForOfIteratorHelper(actions),\n            _step8;\n          try {\n            for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n              var action = _step8.value;\n              if (action === 'i') {\n                // Generate diff item for this element and insert it into the diff set.\n                diffSet.push(this._getInsertDiff(element, _i2, elementChildren[_i2].name));\n                _i2++;\n              } else if (action === 'r') {\n                // Generate diff item for this element and insert it into the diff set.\n                diffSet.push(this._getRemoveDiff(element, _i2, snapshotChildren[j].name));\n                j++;\n              } else if (action === 'a') {\n                // Take attributes from saved and current children.\n                var elementAttributes = elementChildren[_i2].attributes;\n                var snapshotAttributes = snapshotChildren[j].attributes;\n                var range = void 0;\n                if (elementChildren[_i2].name == '$text') {\n                  range = new Range(Position._createAt(element, _i2), Position._createAt(element, _i2 + 1));\n                } else {\n                  var index = element.offsetToIndex(_i2);\n                  range = new Range(Position._createAt(element, _i2), Position._createAt(element.getChild(index), 0));\n                }\n\n                // Generate diff items for this change (there might be multiple attributes changed and\n                // there is a single diff for each of them) and insert them into the diff set.\n                diffSet.push.apply(diffSet, _toConsumableArray(this._getAttributesDiff(range, snapshotAttributes, elementAttributes)));\n                _i2++;\n                j++;\n              } else {\n                // `action` is 'equal'. Child not changed.\n                _i2++;\n                j++;\n              }\n            }\n          } catch (err) {\n            _iterator8.e(err);\n          } finally {\n            _iterator8.f();\n          }\n        }\n\n        // Then, sort the changes by the position (change at position before other changes is first).\n      } catch (err) {\n        _iterator7.e(err);\n      } finally {\n        _iterator7.f();\n      }\n      diffSet.sort(function (a, b) {\n        // If the change is in different root, we don't care much, but we'd like to have all changes in given\n        // root \"together\" in the array. So let's just sort them by the root name. It does not matter which root\n        // will be processed first.\n        if (a.position.root != b.position.root) {\n          return a.position.root.rootName < b.position.root.rootName ? -1 : 1;\n        }\n\n        // If change happens at the same position...\n        if (a.position.isEqual(b.position)) {\n          // Keep chronological order of operations.\n          return a.changeCount - b.changeCount;\n        }\n\n        // If positions differ, position \"on the left\" should be earlier in the result.\n        return a.position.isBefore(b.position) ? -1 : 1;\n      });\n\n      // Glue together multiple changes (mostly on text nodes).\n      for (var i = 1; i < diffSet.length; i++) {\n        var prevDiff = diffSet[i - 1];\n        var thisDiff = diffSet[i];\n\n        // Glue remove changes if they happen on text on same position.\n        var isConsecutiveTextRemove = prevDiff.type == 'remove' && thisDiff.type == 'remove' && prevDiff.name == '$text' && thisDiff.name == '$text' && prevDiff.position.isEqual(thisDiff.position);\n\n        // Glue insert changes if they happen on text on consecutive fragments.\n        var isConsecutiveTextAdd = prevDiff.type == 'insert' && thisDiff.type == 'insert' && prevDiff.name == '$text' && thisDiff.name == '$text' && prevDiff.position.parent == thisDiff.position.parent && prevDiff.position.offset + prevDiff.length == thisDiff.position.offset;\n\n        // Glue attribute changes if they happen on consecutive fragments and have same key, old value and new value.\n        var isConsecutiveAttributeChange = prevDiff.type == 'attribute' && thisDiff.type == 'attribute' && prevDiff.position.parent == thisDiff.position.parent && prevDiff.range.isFlat && thisDiff.range.isFlat && prevDiff.position.offset + prevDiff.length == thisDiff.position.offset && prevDiff.attributeKey == thisDiff.attributeKey && prevDiff.attributeOldValue == thisDiff.attributeOldValue && prevDiff.attributeNewValue == thisDiff.attributeNewValue;\n        if (isConsecutiveTextRemove || isConsecutiveTextAdd || isConsecutiveAttributeChange) {\n          diffSet[i - 1].length++;\n          if (isConsecutiveAttributeChange) {\n            diffSet[i - 1].range.end = diffSet[i - 1].range.end.getShiftedBy(1);\n          }\n          diffSet.splice(i, 1);\n          i--;\n        }\n      }\n\n      // Remove `changeCount` property from diff items. It is used only for sorting and is internal thing.\n      for (var _i = 0, _diffSet = diffSet; _i < _diffSet.length; _i++) {\n        var item = _diffSet[_i];\n        delete item.changeCount;\n        if (item.type == 'attribute') {\n          delete item.position;\n          delete item.length;\n        }\n      }\n      this._changeCount = 0;\n\n      // Cache changes.\n      this._cachedChangesWithGraveyard = diffSet.slice();\n      this._cachedChanges = diffSet.slice().filter(_changesInGraveyardFilter);\n      if (options.includeChangesInGraveyard) {\n        return this._cachedChangesWithGraveyard;\n      } else {\n        return this._cachedChanges;\n      }\n    }\n\n    /**\n     * Resets `Differ`. Removes all buffered changes.\n     */\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      this._changesInElement.clear();\n      this._elementSnapshots.clear();\n      this._changedMarkers.clear();\n      this._cachedChanges = null;\n    }\n\n    /**\n     * Saves and handles an insert change.\n     *\n     * @private\n     * @param {module:engine/model/element~Element} parent\n     * @param {Number} offset\n     * @param {Number} howMany\n     */\n  }, {\n    key: \"_markInsert\",\n    value: function _markInsert(parent, offset, howMany) {\n      var changeItem = {\n        type: 'insert',\n        offset: offset,\n        howMany: howMany,\n        count: this._changeCount++\n      };\n      this._markChange(parent, changeItem);\n    }\n\n    /**\n     * Saves and handles a remove change.\n     *\n     * @private\n     * @param {module:engine/model/element~Element} parent\n     * @param {Number} offset\n     * @param {Number} howMany\n     */\n  }, {\n    key: \"_markRemove\",\n    value: function _markRemove(parent, offset, howMany) {\n      var changeItem = {\n        type: 'remove',\n        offset: offset,\n        howMany: howMany,\n        count: this._changeCount++\n      };\n      this._markChange(parent, changeItem);\n      this._removeAllNestedChanges(parent, offset, howMany);\n    }\n\n    /**\n     * Saves and handles an attribute change.\n     *\n     * @private\n     * @param {module:engine/model/item~Item} item\n     */\n  }, {\n    key: \"_markAttribute\",\n    value: function _markAttribute(item) {\n      var changeItem = {\n        type: 'attribute',\n        offset: item.startOffset,\n        howMany: item.offsetSize,\n        count: this._changeCount++\n      };\n      this._markChange(item.parent, changeItem);\n    }\n\n    /**\n     * Saves and handles a model change.\n     *\n     * @private\n     * @param {module:engine/model/element~Element} parent\n     * @param {Object} changeItem\n     */\n  }, {\n    key: \"_markChange\",\n    value: function _markChange(parent, changeItem) {\n      // First, make a snapshot of this parent's children (it will be made only if it was not made before).\n      this._makeSnapshot(parent);\n\n      // Then, get all changes that already were done on the element (empty array if this is the first change).\n      var changes = this._getChangesForElement(parent);\n\n      // Then, look through all the changes, and transform them or the new change.\n      this._handleChange(changeItem, changes);\n\n      // Add the new change.\n      changes.push(changeItem);\n\n      // Remove incorrect changes. During transformation some change might be, for example, included in another.\n      // In that case, the change will have `howMany` property set to `0` or less. We need to remove those changes.\n      for (var i = 0; i < changes.length; i++) {\n        if (changes[i].howMany < 1) {\n          changes.splice(i, 1);\n          i--;\n        }\n      }\n    }\n\n    /**\n     * Gets an array of changes that have already been saved for a given element.\n     *\n     * @private\n     * @param {module:engine/model/element~Element} element\n     * @returns {Array.<Object>}\n     */\n  }, {\n    key: \"_getChangesForElement\",\n    value: function _getChangesForElement(element) {\n      var changes;\n      if (this._changesInElement.has(element)) {\n        changes = this._changesInElement.get(element);\n      } else {\n        changes = [];\n        this._changesInElement.set(element, changes);\n      }\n      return changes;\n    }\n\n    /**\n     * Saves a children snapshot for a given element.\n     *\n     * @private\n     * @param {module:engine/model/element~Element} element\n     */\n  }, {\n    key: \"_makeSnapshot\",\n    value: function _makeSnapshot(element) {\n      if (!this._elementSnapshots.has(element)) {\n        this._elementSnapshots.set(element, _getChildrenSnapshot(element.getChildren()));\n      }\n    }\n\n    /**\n     * For a given newly saved change, compares it with a change already done on the element and modifies the incoming\n     * change and/or the old change.\n     *\n     * @private\n     * @param {Object} inc Incoming (new) change.\n     * @param {Array.<Object>} changes An array containing all the changes done on that element.\n     */\n  }, {\n    key: \"_handleChange\",\n    value: function _handleChange(inc, changes) {\n      // We need a helper variable that will store how many nodes are to be still handled for this change item.\n      // `nodesToHandle` (how many nodes still need to be handled) and `howMany` (how many nodes were affected)\n      // needs to be differentiated.\n      //\n      // This comes up when there are multiple changes that are affected by `inc` change item.\n      //\n      // For example: assume two insert changes: `{ offset: 2, howMany: 1 }` and `{ offset: 5, howMany: 1 }`.\n      // Assume that `inc` change is remove `{ offset: 2, howMany: 2, nodesToHandle: 2 }`.\n      //\n      // Then, we:\n      // - \"forget\" about first insert change (it is \"eaten\" by remove),\n      // - because of that, at the end we will want to remove only one node (`nodesToHandle = 1`),\n      // - but still we have to change offset of the second insert change from `5` to `3`!\n      //\n      // So, `howMany` does not change throughout items transformation and keeps information about how many nodes were affected,\n      // while `nodesToHandle` means how many nodes need to be handled after the change item is transformed by other changes.\n      inc.nodesToHandle = inc.howMany;\n      var _iterator9 = _createForOfIteratorHelper(changes),\n        _step9;\n      try {\n        for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n          var old = _step9.value;\n          var incEnd = inc.offset + inc.howMany;\n          var oldEnd = old.offset + old.howMany;\n          if (inc.type == 'insert') {\n            if (old.type == 'insert') {\n              if (inc.offset <= old.offset) {\n                old.offset += inc.howMany;\n              } else if (inc.offset < oldEnd) {\n                old.howMany += inc.nodesToHandle;\n                inc.nodesToHandle = 0;\n              }\n            }\n            if (old.type == 'remove') {\n              if (inc.offset < old.offset) {\n                old.offset += inc.howMany;\n              }\n            }\n            if (old.type == 'attribute') {\n              if (inc.offset <= old.offset) {\n                old.offset += inc.howMany;\n              } else if (inc.offset < oldEnd) {\n                // This case is more complicated, because attribute change has to be split into two.\n                // Example (assume that uppercase and lowercase letters mean different attributes):\n                //\n                // initial state:\t\tabcxyz\n                // attribute change:\taBCXYz\n                // incoming insert:\t\taBCfooXYz\n                //\n                // Change ranges cannot intersect because each item has to be described exactly (it was either\n                // not changed, inserted, removed, or its attribute was changed). That's why old attribute\n                // change has to be split and both parts has to be handled separately from now on.\n                var howMany = old.howMany;\n                old.howMany = inc.offset - old.offset;\n\n                // Add the second part of attribute change to the beginning of processed array so it won't\n                // be processed again in this loop.\n                changes.unshift({\n                  type: 'attribute',\n                  offset: incEnd,\n                  howMany: howMany - old.howMany,\n                  count: this._changeCount++\n                });\n              }\n            }\n          }\n          if (inc.type == 'remove') {\n            if (old.type == 'insert') {\n              if (incEnd <= old.offset) {\n                old.offset -= inc.howMany;\n              } else if (incEnd <= oldEnd) {\n                if (inc.offset < old.offset) {\n                  var intersectionLength = incEnd - old.offset;\n                  old.offset = inc.offset;\n                  old.howMany -= intersectionLength;\n                  inc.nodesToHandle -= intersectionLength;\n                } else {\n                  old.howMany -= inc.nodesToHandle;\n                  inc.nodesToHandle = 0;\n                }\n              } else {\n                if (inc.offset <= old.offset) {\n                  inc.nodesToHandle -= old.howMany;\n                  old.howMany = 0;\n                } else if (inc.offset < oldEnd) {\n                  var _intersectionLength = oldEnd - inc.offset;\n                  old.howMany -= _intersectionLength;\n                  inc.nodesToHandle -= _intersectionLength;\n                }\n              }\n            }\n            if (old.type == 'remove') {\n              if (incEnd <= old.offset) {\n                old.offset -= inc.howMany;\n              } else if (inc.offset < old.offset) {\n                inc.nodesToHandle += old.howMany;\n                old.howMany = 0;\n              }\n            }\n            if (old.type == 'attribute') {\n              if (incEnd <= old.offset) {\n                old.offset -= inc.howMany;\n              } else if (inc.offset < old.offset) {\n                var _intersectionLength2 = incEnd - old.offset;\n                old.offset = inc.offset;\n                old.howMany -= _intersectionLength2;\n              } else if (inc.offset < oldEnd) {\n                if (incEnd <= oldEnd) {\n                  // On first sight in this case we don't need to split attribute operation into two.\n                  // However the changes set is later converted to actions (see `_generateActionsFromChanges`).\n                  // For that reason, no two changes may intersect.\n                  // So we cannot have an attribute change that \"contains\" remove change.\n                  // Attribute change needs to be split.\n                  var _howMany = old.howMany;\n                  old.howMany = inc.offset - old.offset;\n                  var howManyAfter = _howMany - old.howMany - inc.nodesToHandle;\n\n                  // Add the second part of attribute change to the beginning of processed array so it won't\n                  // be processed again in this loop.\n                  changes.unshift({\n                    type: 'attribute',\n                    offset: inc.offset,\n                    howMany: howManyAfter,\n                    count: this._changeCount++\n                  });\n                } else {\n                  old.howMany -= oldEnd - inc.offset;\n                }\n              }\n            }\n          }\n          if (inc.type == 'attribute') {\n            // In case of attribute change, `howMany` should be kept same as `nodesToHandle`. It's not an error.\n            if (old.type == 'insert') {\n              if (inc.offset < old.offset && incEnd > old.offset) {\n                if (incEnd > oldEnd) {\n                  // This case is similar to a case described when incoming change was insert and old change was attribute.\n                  // See comment above.\n                  //\n                  // This time incoming change is attribute. We need to split incoming change in this case too.\n                  // However this time, the second part of the attribute change needs to be processed further\n                  // because there might be other changes that it collides with.\n                  var attributePart = {\n                    type: 'attribute',\n                    offset: oldEnd,\n                    howMany: incEnd - oldEnd,\n                    count: this._changeCount++\n                  };\n                  this._handleChange(attributePart, changes);\n                  changes.push(attributePart);\n                }\n                inc.nodesToHandle = old.offset - inc.offset;\n                inc.howMany = inc.nodesToHandle;\n              } else if (inc.offset >= old.offset && inc.offset < oldEnd) {\n                if (incEnd > oldEnd) {\n                  inc.nodesToHandle = incEnd - oldEnd;\n                  inc.offset = oldEnd;\n                } else {\n                  inc.nodesToHandle = 0;\n                }\n              }\n            }\n            if (old.type == 'remove') {\n              // This is a case when attribute change \"contains\" remove change.\n              // The attribute change needs to be split into two because changes cannot intersect.\n              if (inc.offset < old.offset && incEnd > old.offset) {\n                var _attributePart = {\n                  type: 'attribute',\n                  offset: old.offset,\n                  howMany: incEnd - old.offset,\n                  count: this._changeCount++\n                };\n                this._handleChange(_attributePart, changes);\n                changes.push(_attributePart);\n                inc.nodesToHandle = old.offset - inc.offset;\n                inc.howMany = inc.nodesToHandle;\n              }\n            }\n            if (old.type == 'attribute') {\n              // There are only two conflicting scenarios possible here:\n              if (inc.offset >= old.offset && incEnd <= oldEnd) {\n                // `old` change includes `inc` change, or they are the same.\n                inc.nodesToHandle = 0;\n                inc.howMany = 0;\n                inc.offset = 0;\n              } else if (inc.offset <= old.offset && incEnd >= oldEnd) {\n                // `inc` change includes `old` change.\n                old.howMany = 0;\n              }\n            }\n          }\n        }\n      } catch (err) {\n        _iterator9.e(err);\n      } finally {\n        _iterator9.f();\n      }\n      inc.howMany = inc.nodesToHandle;\n      delete inc.nodesToHandle;\n    }\n\n    /**\n     * Returns an object with a single insert change description.\n     *\n     * @private\n     * @param {module:engine/model/element~Element} parent The element in which the change happened.\n     * @param {Number} offset The offset at which change happened.\n     * @param {String} name The name of the removed element or `'$text'` for a character.\n     * @returns {Object} The diff item.\n     */\n  }, {\n    key: \"_getInsertDiff\",\n    value: function _getInsertDiff(parent, offset, name) {\n      return {\n        type: 'insert',\n        position: Position._createAt(parent, offset),\n        name: name,\n        length: 1,\n        changeCount: this._changeCount++\n      };\n    }\n\n    /**\n     * Returns an object with a single remove change description.\n     *\n     * @private\n     * @param {module:engine/model/element~Element} parent The element in which change happened.\n     * @param {Number} offset The offset at which change happened.\n     * @param {String} name The name of the removed element or `'$text'` for a character.\n     * @returns {Object} The diff item.\n     */\n  }, {\n    key: \"_getRemoveDiff\",\n    value: function _getRemoveDiff(parent, offset, name) {\n      return {\n        type: 'remove',\n        position: Position._createAt(parent, offset),\n        name: name,\n        length: 1,\n        changeCount: this._changeCount++\n      };\n    }\n\n    /**\n     * Returns an array of objects where each one is a single attribute change description.\n     *\n     * @private\n     * @param {module:engine/model/range~Range} range The range where the change happened.\n     * @param {Map} oldAttributes A map, map iterator or compatible object that contains attributes before the change.\n     * @param {Map} newAttributes A map, map iterator or compatible object that contains attributes after the change.\n     * @returns {Array.<Object>} An array containing one or more diff items.\n     */\n  }, {\n    key: \"_getAttributesDiff\",\n    value: function _getAttributesDiff(range, oldAttributes, newAttributes) {\n      // Results holder.\n      var diffs = [];\n\n      // Clone new attributes as we will be performing changes on this object.\n      newAttributes = new Map(newAttributes);\n\n      // Look through old attributes.\n      var _iterator0 = _createForOfIteratorHelper(oldAttributes),\n        _step0;\n      try {\n        for (_iterator0.s(); !(_step0 = _iterator0.n()).done;) {\n          var _step0$value = _slicedToArray(_step0.value, 2),\n            key = _step0$value[0],\n            oldValue = _step0$value[1];\n          // Check what is the new value of the attribute (or if it was removed).\n          var newValue = newAttributes.has(key) ? newAttributes.get(key) : null;\n\n          // If values are different (or attribute was removed)...\n          if (newValue !== oldValue) {\n            // Add diff item.\n            diffs.push({\n              type: 'attribute',\n              position: range.start,\n              range: range.clone(),\n              length: 1,\n              attributeKey: key,\n              attributeOldValue: oldValue,\n              attributeNewValue: newValue,\n              changeCount: this._changeCount++\n            });\n          }\n\n          // Prevent returning two diff items for the same change.\n          newAttributes.delete(key);\n        }\n\n        // Look through new attributes that weren't handled above.\n      } catch (err) {\n        _iterator0.e(err);\n      } finally {\n        _iterator0.f();\n      }\n      var _iterator1 = _createForOfIteratorHelper(newAttributes),\n        _step1;\n      try {\n        for (_iterator1.s(); !(_step1 = _iterator1.n()).done;) {\n          var _step1$value = _slicedToArray(_step1.value, 2),\n            _key = _step1$value[0],\n            _newValue = _step1$value[1];\n          // Each of them is a new attribute. Add diff item.\n          diffs.push({\n            type: 'attribute',\n            position: range.start,\n            range: range.clone(),\n            length: 1,\n            attributeKey: _key,\n            attributeOldValue: null,\n            attributeNewValue: _newValue,\n            changeCount: this._changeCount++\n          });\n        }\n      } catch (err) {\n        _iterator1.e(err);\n      } finally {\n        _iterator1.f();\n      }\n      return diffs;\n    }\n\n    /**\n     * Checks whether given element or any of its parents is an element that is buffered as an inserted element.\n     *\n     * @private\n     * @param {module:engine/model/element~Element} element Element to check.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"_isInInsertedElement\",\n    value: function _isInInsertedElement(element) {\n      var parent = element.parent;\n      if (!parent) {\n        return false;\n      }\n      var changes = this._changesInElement.get(parent);\n      var offset = element.startOffset;\n      if (changes) {\n        var _iterator10 = _createForOfIteratorHelper(changes),\n          _step10;\n        try {\n          for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n            var change = _step10.value;\n            if (change.type == 'insert' && offset >= change.offset && offset < change.offset + change.howMany) {\n              return true;\n            }\n          }\n        } catch (err) {\n          _iterator10.e(err);\n        } finally {\n          _iterator10.f();\n        }\n      }\n      return this._isInInsertedElement(parent);\n    }\n\n    /**\n     * Removes deeply all buffered changes that are registered in elements from range specified by `parent`, `offset`\n     * and `howMany`.\n     *\n     * @private\n     * @param {module:engine/model/element~Element} parent\n     * @param {Number} offset\n     * @param {Number} howMany\n     */\n  }, {\n    key: \"_removeAllNestedChanges\",\n    value: function _removeAllNestedChanges(parent, offset, howMany) {\n      var range = new Range(Position._createAt(parent, offset), Position._createAt(parent, offset + howMany));\n      var _iterator11 = _createForOfIteratorHelper(range.getItems({\n          shallow: true\n        })),\n        _step11;\n      try {\n        for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n          var item = _step11.value;\n          if (item.is('element')) {\n            this._elementSnapshots.delete(item);\n            this._changesInElement.delete(item);\n            this._removeAllNestedChanges(item, 0, item.maxOffset);\n          }\n        }\n      } catch (err) {\n        _iterator11.e(err);\n      } finally {\n        _iterator11.f();\n      }\n    }\n  }]);\n}(); // Returns an array that is a copy of passed child list with the exception that text nodes are split to one or more\n// objects, each representing one character and attributes set on that character.\nexport { Differ as default };\nfunction _getChildrenSnapshot(children) {\n  var snapshot = [];\n  var _iterator12 = _createForOfIteratorHelper(children),\n    _step12;\n  try {\n    for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n      var child = _step12.value;\n      if (child.is('text')) {\n        for (var i = 0; i < child.data.length; i++) {\n          snapshot.push({\n            name: '$text',\n            attributes: new Map(child.getAttributes())\n          });\n        }\n      } else {\n        snapshot.push({\n          name: child.name,\n          attributes: new Map(child.getAttributes())\n        });\n      }\n    }\n  } catch (err) {\n    _iterator12.e(err);\n  } finally {\n    _iterator12.f();\n  }\n  return snapshot;\n}\n\n// Generates array of actions for given changes set.\n// It simulates what `diff` function does.\n// Generated actions are:\n// - 'e' for 'equal' - when item at that position did not change,\n// - 'i' for 'insert' - when item at that position was inserted,\n// - 'r' for 'remove' - when item at that position was removed,\n// - 'a' for 'attribute' - when item at that position has it attributes changed.\n//\n// Example (assume that uppercase letters have bold attribute, compare with function code):\n//\n// children before:\tfooBAR\n// children after:\tfoxybAR\n//\n// changes: type: remove, offset: 1, howMany: 1\n//\t\t\ttype: insert, offset: 2, howMany: 2\n//\t\t\ttype: attribute, offset: 4, howMany: 1\n//\n// expected actions: equal (f), remove (o), equal (o), insert (x), insert (y), attribute (b), equal (A), equal (R)\n//\n// steps taken by th script:\n//\n// 1. change = \"type: remove, offset: 1, howMany: 1\"; offset = 0; oldChildrenHandled = 0\n//    1.1 between this change and the beginning is one not-changed node, fill with one equal action, one old child has been handled\n//    1.2 this change removes one node, add one remove action\n//    1.3 change last visited `offset` to 1\n//    1.4 since an old child has been removed, one more old child has been handled\n//    1.5 actions at this point are: equal, remove\n//\n// 2. change = \"type: insert, offset: 2, howMany: 2\"; offset = 1; oldChildrenHandled = 2\n//    2.1 between this change and previous change is one not-changed node, add equal action, another one old children has been handled\n//    2.2 this change inserts two nodes, add two insert actions\n//    2.3 change last visited offset to the end of the inserted range, that is 4\n//    2.4 actions at this point are: equal, remove, equal, insert, insert\n//\n// 3. change = \"type: attribute, offset: 4, howMany: 1\"; offset = 4, oldChildrenHandled = 3\n//    3.1 between this change and previous change are no not-changed nodes\n//    3.2 this change changes one node, add one attribute action\n//    3.3 change last visited `offset` to the end of change range, that is 5\n//    3.4 since an old child has been changed, one more old child has been handled\n//    3.5 actions at this point are: equal, remove, equal, insert, insert, attribute\n//\n// 4. after loop oldChildrenHandled = 4, oldChildrenLength = 6 (fooBAR is 6 characters)\n//    4.1 fill up with two equal actions\n//\n// The result actions are: equal, remove, equal, insert, insert, attribute, equal, equal.\nfunction _generateActionsFromChanges(oldChildrenLength, changes) {\n  var actions = [];\n  var offset = 0;\n  var oldChildrenHandled = 0;\n\n  // Go through all buffered changes.\n  var _iterator13 = _createForOfIteratorHelper(changes),\n    _step13;\n  try {\n    for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n      var change = _step13.value;\n      // First, fill \"holes\" between changes with \"equal\" actions.\n      if (change.offset > offset) {\n        for (var _i3 = 0; _i3 < change.offset - offset; _i3++) {\n          actions.push('e');\n        }\n        oldChildrenHandled += change.offset - offset;\n      }\n\n      // Then, fill up actions accordingly to change type.\n      if (change.type == 'insert') {\n        for (var _i4 = 0; _i4 < change.howMany; _i4++) {\n          actions.push('i');\n        }\n\n        // The last handled offset is after inserted range.\n        offset = change.offset + change.howMany;\n      } else if (change.type == 'remove') {\n        for (var _i5 = 0; _i5 < change.howMany; _i5++) {\n          actions.push('r');\n        }\n\n        // The last handled offset is at the position where the nodes were removed.\n        offset = change.offset;\n        // We removed `howMany` old nodes, update `oldChildrenHandled`.\n        oldChildrenHandled += change.howMany;\n      } else {\n        actions.push.apply(actions, _toConsumableArray('a'.repeat(change.howMany).split('')));\n\n        // The last handled offset is at the position after the changed range.\n        offset = change.offset + change.howMany;\n        // We changed `howMany` old nodes, update `oldChildrenHandled`.\n        oldChildrenHandled += change.howMany;\n      }\n    }\n\n    // Fill \"equal\" actions at the end of actions set. Use `oldChildrenHandled` to see how many children\n    // has not been changed / removed at the end of their parent.\n  } catch (err) {\n    _iterator13.e(err);\n  } finally {\n    _iterator13.f();\n  }\n  if (oldChildrenHandled < oldChildrenLength) {\n    for (var i = 0; i < oldChildrenLength - oldChildrenHandled - offset; i++) {\n      actions.push('e');\n    }\n  }\n  return actions;\n}\n\n// Filter callback for Array.filter that filters out change entries that are in graveyard.\nfunction _changesInGraveyardFilter(entry) {\n  var posInGy = entry.position && entry.position.root.rootName == '$graveyard';\n  var rangeInGy = entry.range && entry.range.root.rootName == '$graveyard';\n  return !posInGy && !rangeInGy;\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/document\n */\n\nimport Differ from './differ';\nimport RootElement from './rootelement';\nimport History from './history';\nimport DocumentSelection from './documentselection';\nimport Collection from '@ckeditor/ckeditor5-utils/src/collection';\nimport EmitterMixin from '@ckeditor/ckeditor5-utils/src/emittermixin';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport { isInsideSurrogatePair, isInsideCombinedSymbol } from '@ckeditor/ckeditor5-utils/src/unicode';\nimport { clone } from 'lodash-es';\nvar graveyardName = '$graveyard';\n\n/**\n * Data model's document. It contains the model's structure, its selection and the history of changes.\n *\n * Read more about working with the model in\n * {@glink framework/guides/architecture/editing-engine#model introduction to the the editing engine's architecture}.\n *\n * Usually, the document contains just one {@link module:engine/model/document~Document#roots root element}, so\n * you can retrieve it by just calling {@link module:engine/model/document~Document#getRoot} without specifying its name:\n *\n *\t\tmodel.document.getRoot(); // -> returns the main root\n *\n * However, the document may contain multiple roots – e.g. when the editor has multiple editable areas\n * (e.g. a title and a body of a message).\n *\n * @mixes module:utils/emittermixin~EmitterMixin\n */\nvar Document = /*#__PURE__*/function () {\n  /**\n   * Creates an empty document instance with no {@link #roots} (other than\n   * the {@link #graveyard graveyard root}).\n   */\n  function Document(model) {\n    var _this = this;\n    _classCallCheck(this, Document);\n    /**\n     * The {@link module:engine/model/model~Model model} that the document is a part of.\n     *\n     * @readonly\n     * @type {module:engine/model/model~Model}\n     */\n    this.model = model;\n\n    /**\n     * The document version. It starts from `0` and every operation increases the version number. It is used to ensure that\n     * operations are applied on a proper document version.\n     *\n     * If the {@link module:engine/model/operation/operation~Operation#baseVersion base version} does not match the document version,\n     * a {@link module:utils/ckeditorerror~CKEditorError model-document-applyOperation-wrong-version} error is thrown.\n     *\n     * @readonly\n     * @type {Number}\n     */\n    this.version = 0;\n\n    /**\n     * The document's history.\n     *\n     * @readonly\n     * @type {module:engine/model/history~History}\n     */\n    this.history = new History(this);\n\n    /**\n     * The selection in this document.\n     *\n     * @readonly\n     * @type {module:engine/model/documentselection~DocumentSelection}\n     */\n    this.selection = new DocumentSelection(this);\n\n    /**\n     * A list of roots that are owned and managed by this document. Use {@link #createRoot} and\n     * {@link #getRoot} to manipulate it.\n     *\n     * @readonly\n     * @type {module:utils/collection~Collection}\n     */\n    this.roots = new Collection({\n      idProperty: 'rootName'\n    });\n\n    /**\n     * The model differ object. Its role is to buffer changes done on the model document and then calculate a diff of those changes.\n     *\n     * @readonly\n     * @type {module:engine/model/differ~Differ}\n     */\n    this.differ = new Differ(model.markers);\n\n    /**\n     * Post-fixer callbacks registered to the model document.\n     *\n     * @private\n     * @type {Set.<Function>}\n     */\n    this._postFixers = new Set();\n\n    /**\n     * A boolean indicates whether the selection has changed until\n     *\n     * @private\n     * @type {Boolean}\n     */\n    this._hasSelectionChangedFromTheLastChangeBlock = false;\n\n    // Graveyard tree root. Document always have a graveyard root, which stores removed nodes.\n    this.createRoot('$root', graveyardName);\n\n    // First, if the operation is a document operation check if it's base version is correct.\n    this.listenTo(model, 'applyOperation', function (evt, args) {\n      var operation = args[0];\n      if (operation.isDocumentOperation && operation.baseVersion !== _this.version) {\n        /**\n         * Only operations with matching versions can be applied.\n         *\n         * @error document-applyOperation-wrong-version\n         * @param {module:engine/model/operation/operation~Operation} operation\n         */\n        throw new CKEditorError('model-document-applyOperation-wrong-version: Only operations with matching versions can be applied.', _this, {\n          operation: operation\n        });\n      }\n    }, {\n      priority: 'highest'\n    });\n\n    // Then, still before an operation is applied on model, buffer the change in differ.\n    this.listenTo(model, 'applyOperation', function (evt, args) {\n      var operation = args[0];\n      if (operation.isDocumentOperation) {\n        _this.differ.bufferOperation(operation);\n      }\n    }, {\n      priority: 'high'\n    });\n\n    // After the operation is applied, bump document's version and add the operation to the history.\n    this.listenTo(model, 'applyOperation', function (evt, args) {\n      var operation = args[0];\n      if (operation.isDocumentOperation) {\n        _this.version++;\n        _this.history.addOperation(operation);\n      }\n    }, {\n      priority: 'low'\n    });\n\n    // Listen to selection changes. If selection changed, mark it.\n    this.listenTo(this.selection, 'change', function () {\n      _this._hasSelectionChangedFromTheLastChangeBlock = true;\n    });\n\n    // Buffer marker changes.\n    // This is not covered in buffering operations because markers may change outside of them (when they\n    // are modified using `model.markers` collection, not through `MarkerOperation`).\n    this.listenTo(model.markers, 'update', function (evt, marker, oldRange, newRange) {\n      // Whenever marker is updated, buffer that change.\n      _this.differ.bufferMarkerChange(marker.name, oldRange, newRange, marker.affectsData);\n      if (oldRange === null) {\n        // If this is a new marker, add a listener that will buffer change whenever marker changes.\n        marker.on('change', function (evt, oldRange) {\n          _this.differ.bufferMarkerChange(marker.name, oldRange, marker.getRange(), marker.affectsData);\n        });\n      }\n    });\n  }\n\n  /**\n   * The graveyard tree root. A document always has a graveyard root that stores removed nodes.\n   *\n   * @readonly\n   * @member {module:engine/model/rootelement~RootElement}\n   */\n  return _createClass(Document, [{\n    key: \"graveyard\",\n    get: function get() {\n      return this.getRoot(graveyardName);\n    }\n\n    /**\n     * Creates a new root.\n     *\n     * @param {String} [elementName='$root'] The element name. Defaults to `'$root'` which also has some basic schema defined\n     * (`$block`s are allowed inside the `$root`). Make sure to define a proper schema if you use a different name.\n     * @param {String} [rootName='main'] A unique root name.\n     * @returns {module:engine/model/rootelement~RootElement} The created root.\n     */\n  }, {\n    key: \"createRoot\",\n    value: function createRoot() {\n      var elementName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '$root';\n      var rootName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'main';\n      if (this.roots.get(rootName)) {\n        /**\n         * A root with the specified name already exists.\n         *\n         * @error model-document-createRoot-name-exists\n         * @param {module:engine/model/document~Document} doc\n         * @param {String} name\n         */\n        throw new CKEditorError('model-document-createRoot-name-exists: Root with specified name already exists.', this, {\n          name: rootName\n        });\n      }\n      var root = new RootElement(this, elementName, rootName);\n      this.roots.add(root);\n      return root;\n    }\n\n    /**\n     * Removes all event listeners set by the document instance.\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.selection.destroy();\n      this.stopListening();\n    }\n\n    /**\n     * Returns a root by its name.\n     *\n     * @param {String} [name='main'] A unique root name.\n     * @returns {module:engine/model/rootelement~RootElement|null} The root registered under a given name or `null` when\n     * there is no root with the given name.\n     */\n  }, {\n    key: \"getRoot\",\n    value: function getRoot() {\n      var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'main';\n      return this.roots.get(name);\n    }\n\n    /**\n     * Returns an array with names of all roots (without the {@link #graveyard}) added to the document.\n     *\n     * @returns {Array.<String>} Roots names.\n     */\n  }, {\n    key: \"getRootNames\",\n    value: function getRootNames() {\n      return Array.from(this.roots, function (root) {\n        return root.rootName;\n      }).filter(function (name) {\n        return name != graveyardName;\n      });\n    }\n\n    /**\n     * Used to register a post-fixer callback. A post-fixer mechanism guarantees that the features\n     * will operate on a correct model state.\n     *\n     * An execution of a feature may lead to an incorrect document tree state. The callbacks are used to fix the document tree after\n     * it has changed. Post-fixers are fired just after all changes from the outermost change block were applied but\n     * before the {@link module:engine/model/document~Document#event:change change event} is fired. If a post-fixer callback made\n     * a change, it should return `true`. When this happens, all post-fixers are fired again to check if something else should\n     * not be fixed in the new document tree state.\n     *\n     * As a parameter, a post-fixer callback receives a {@link module:engine/model/writer~Writer writer} instance connected with the\n     * executed changes block. Thanks to that, all changes done by the callback will be added to the same\n     * {@link module:engine/model/batch~Batch batch} (and undo step) as the original changes. This makes post-fixer changes transparent\n     * for the user.\n     *\n     * An example of a post-fixer is a callback that checks if all the data were removed from the editor. If so, the\n     * callback should add an empty paragraph so that the editor is never empty:\n     *\n     *\t\tdocument.registerPostFixer( writer => {\n     *\t\t\tconst changes = document.differ.getChanges();\n     *\n     *\t\t\t// Check if the changes lead to an empty root in the editor.\n     *\t\t\tfor ( const entry of changes ) {\n     *\t\t\t\tif ( entry.type == 'remove' && entry.position.root.isEmpty ) {\n     *\t\t\t\t\twriter.insertElement( 'paragraph', entry.position.root, 0 );\n     *\n     *\t\t\t\t\t// It is fine to return early, even if multiple roots would need to be fixed.\n     *\t\t\t\t\t// All post-fixers will be fired again, so if there are more empty roots, those will be fixed, too.\n     *\t\t\t\t\treturn true;\n     *\t\t\t\t}\n     *\t\t\t}\n     *\t\t} );\n     *\n     * @param {Function} postFixer\n     */\n  }, {\n    key: \"registerPostFixer\",\n    value: function registerPostFixer(postFixer) {\n      this._postFixers.add(postFixer);\n    }\n\n    /**\n     * A custom `toJSON()` method to solve child-parent circular dependencies.\n     *\n     * @returns {Object} A clone of this object with the document property changed to a string.\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var json = clone(this);\n\n      // Due to circular references we need to remove parent reference.\n      json.selection = '[engine.model.DocumentSelection]';\n      json.model = '[engine.model.Model]';\n      return json;\n    }\n\n    /**\n     * Check if there were any changes done on document, and if so, call post-fixers,\n     * fire `change` event for features and conversion and then reset the differ.\n     * Fire `change:data` event when at least one operation or buffered marker changes the data.\n     *\n     * @protected\n     * @fires change\n     * @fires change:data\n     * @param {module:engine/model/writer~Writer} writer The writer on which post-fixers will be called.\n     */\n  }, {\n    key: \"_handleChangeBlock\",\n    value: function _handleChangeBlock(writer) {\n      if (this._hasDocumentChangedFromTheLastChangeBlock()) {\n        this._callPostFixers(writer);\n\n        // Refresh selection attributes according to the final position in the model after the change.\n        this.selection.refresh();\n        if (this.differ.hasDataChanges()) {\n          this.fire('change:data', writer.batch);\n        } else {\n          this.fire('change', writer.batch);\n        }\n\n        // Theoretically, it is not necessary to refresh selection after change event because\n        // post-fixers are the last who should change the model, but just in case...\n        this.selection.refresh();\n        this.differ.reset();\n      }\n      this._hasSelectionChangedFromTheLastChangeBlock = false;\n    }\n\n    /**\n     * Returns whether there is a buffered change or if the selection has changed from the last\n     * {@link module:engine/model/model~Model#enqueueChange `enqueueChange()` block}\n     * or {@link module:engine/model/model~Model#change `change()` block}.\n     *\n     * @protected\n     * @returns {Boolean} Returns `true` if document has changed from the last `change()` or `enqueueChange()` block.\n     */\n  }, {\n    key: \"_hasDocumentChangedFromTheLastChangeBlock\",\n    value: function _hasDocumentChangedFromTheLastChangeBlock() {\n      return !this.differ.isEmpty || this._hasSelectionChangedFromTheLastChangeBlock;\n    }\n\n    /**\n     * Returns the default root for this document which is either the first root that was added to the document using\n     * {@link #createRoot} or the {@link #graveyard graveyard root} if no other roots were created.\n     *\n     * @protected\n     * @returns {module:engine/model/rootelement~RootElement} The default root for this document.\n     */\n  }, {\n    key: \"_getDefaultRoot\",\n    value: function _getDefaultRoot() {\n      var _iterator = _createForOfIteratorHelper(this.roots),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var root = _step.value;\n          if (root !== this.graveyard) {\n            return root;\n          }\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      return this.graveyard;\n    }\n\n    /**\n     * Returns the default range for this selection. The default range is a collapsed range that starts and ends\n     * at the beginning of this selection's document {@link #_getDefaultRoot default root}.\n     *\n     * @protected\n     * @returns {module:engine/model/range~Range}\n     */\n  }, {\n    key: \"_getDefaultRange\",\n    value: function _getDefaultRange() {\n      var defaultRoot = this._getDefaultRoot();\n      var model = this.model;\n      var schema = model.schema;\n\n      // Find the first position where the selection can be put.\n      var position = model.createPositionFromPath(defaultRoot, [0]);\n      var nearestRange = schema.getNearestSelectionRange(position);\n\n      // If valid selection range is not found - return range collapsed at the beginning of the root.\n      return nearestRange || model.createRange(position);\n    }\n\n    /**\n     * Checks whether a given {@link module:engine/model/range~Range range} is a valid range for\n     * the {@link #selection document's selection}.\n     *\n     * @private\n     * @param {module:engine/model/range~Range} range A range to check.\n     * @returns {Boolean} `true` if `range` is valid, `false` otherwise.\n     */\n  }, {\n    key: \"_validateSelectionRange\",\n    value: function _validateSelectionRange(range) {\n      return validateTextNodePosition(range.start) && validateTextNodePosition(range.end);\n    }\n\n    /**\n     * Performs post-fixer loops. Executes post-fixer callbacks as long as none of them has done any changes to the model.\n     *\n     * @private\n     * @param {module:engine/model/writer~Writer} writer The writer on which post-fixer callbacks will be called.\n     */\n  }, {\n    key: \"_callPostFixers\",\n    value: function _callPostFixers(writer) {\n      var wasFixed = false;\n      do {\n        var _iterator2 = _createForOfIteratorHelper(this._postFixers),\n          _step2;\n        try {\n          for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n            var callback = _step2.value;\n            // Ensure selection attributes are up to date before each post-fixer.\n            // https://github.com/ckeditor/ckeditor5-engine/issues/1673.\n            //\n            // It might be good to refresh the selection after each operation but at the moment it leads\n            // to losing attributes for composition or and spell checking\n            // https://github.com/ckeditor/ckeditor5-typing/issues/188\n            this.selection.refresh();\n            wasFixed = callback(writer);\n            if (wasFixed) {\n              break;\n            }\n          }\n        } catch (err) {\n          _iterator2.e(err);\n        } finally {\n          _iterator2.f();\n        }\n      } while (wasFixed);\n    }\n\n    /**\n     * Fired after each {@link module:engine/model/model~Model#enqueueChange `enqueueChange()` block} or the outermost\n     * {@link module:engine/model/model~Model#change `change()` block} was executed and the document was changed\n     * during that block's execution.\n     *\n     * The changes which this event will cover include:\n     *\n     * * document structure changes,\n     * * selection changes,\n     * * marker changes.\n     *\n     * If you want to be notified about all these changes, then simply listen to this event like this:\n     *\n     *\t\tmodel.document.on( 'change', () => {\n     *\t\t\tconsole.log( 'The document has changed!' );\n     *\t\t} );\n     *\n     * If, however, you only want to be notified about the data changes, then use the\n     * {@link module:engine/model/document~Document#event:change:data change:data} event,\n     * which is fired for document structure changes and marker changes (which affects the data).\n     *\n     *\t\tmodel.document.on( 'change:data', () => {\n     *\t\t\tconsole.log( 'The data has changed!' );\n     *\t\t} );\n     *\n     * @event change\n     * @param {module:engine/model/batch~Batch} batch The batch that was used in the executed changes block.\n     */\n\n    /**\n     * It is a narrower version of the {@link #event:change} event. It is fired for changes which\n     * affect the editor data. This is:\n     *\n     * * document structure changes,\n     * * marker changes (which affects the data).\n     *\n     * If you want to be notified about the data changes, then listen to this event:\n     *\n     *\t\tmodel.document.on( 'change:data', () => {\n     *\t\t\tconsole.log( 'The data has changed!' );\n     *\t\t} );\n     *\n     * If you would like to listen to all document changes, then check out the\n     * {@link module:engine/model/document~Document#event:change change} event.\n     *\n     * @event change:data\n     * @param {module:engine/model/batch~Batch} batch The batch that was used in the executed changes block.\n     */\n  }]);\n}();\nexport { Document as default };\nmix(Document, EmitterMixin);\n\n// Checks whether given range boundary position is valid for document selection, meaning that is not between\n// unicode surrogate pairs or base character and combining marks.\nfunction validateTextNodePosition(rangeBoundary) {\n  var textNode = rangeBoundary.textNode;\n  if (textNode) {\n    var data = textNode.data;\n    var offset = rangeBoundary.offset - textNode.startOffset;\n    return !isInsideSurrogatePair(data, offset) && !isInsideCombinedSymbol(data, offset);\n  }\n  return true;\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module module:engine/model/documentfragment\n */\n\nimport NodeList from './nodelist';\nimport Element from './element';\nimport Text from './text';\nimport TextProxy from './textproxy';\nimport isIterable from '@ckeditor/ckeditor5-utils/src/isiterable';\n\n/**\n * DocumentFragment represents a part of model which does not have a common root but it's top-level nodes\n * can be seen as siblings. In other words, it is a detached part of model tree, without a root.\n *\n * DocumentFragment has own {@link module:engine/model/markercollection~MarkerCollection}. Markers from this collection\n * will be set to the {@link module:engine/model/model~Model#markers model markers} by a\n * {@link module:engine/model/writer~Writer#insert} function.\n */\nvar DocumentFragment = /*#__PURE__*/function () {\n  /**\n   * Creates an empty `DocumentFragment`.\n   *\n   * **Note:** Constructor of this class shouldn't be used directly in the code.\n   * Use the {@link module:engine/model/writer~Writer#createDocumentFragment} method instead.\n   *\n   * @protected\n   * @param {module:engine/model/node~Node|Iterable.<module:engine/model/node~Node>} [children]\n   * Nodes to be contained inside the `DocumentFragment`.\n   */\n  function DocumentFragment(children) {\n    _classCallCheck(this, DocumentFragment);\n    /**\n     * DocumentFragment static markers map. This is a list of names and {@link module:engine/model/range~Range ranges}\n     * which will be set as Markers to {@link module:engine/model/model~Model#markers model markers collection}\n     * when DocumentFragment will be inserted to the document.\n     *\n     * @readonly\n     * @member {Map<String,module:engine/model/range~Range>} module:engine/model/documentfragment~DocumentFragment#markers\n     */\n    this.markers = new Map();\n\n    /**\n     * List of nodes contained inside the document fragment.\n     *\n     * @private\n     * @member {module:engine/model/nodelist~NodeList} module:engine/model/documentfragment~DocumentFragment#_children\n     */\n    this._children = new NodeList();\n    if (children) {\n      this._insertChild(0, children);\n    }\n  }\n\n  /**\n   * Returns an iterator that iterates over all nodes contained inside this document fragment.\n   *\n   * @returns {Iterable.<module:engine/model/node~Node>}\n   */\n  return _createClass(DocumentFragment, [{\n    key: Symbol.iterator,\n    value: function value() {\n      return this.getChildren();\n    }\n\n    /**\n     * Number of this document fragment's children.\n     *\n     * @readonly\n     * @type {Number}\n     */\n  }, {\n    key: \"childCount\",\n    get: function get() {\n      return this._children.length;\n    }\n\n    /**\n     * Sum of {@link module:engine/model/node~Node#offsetSize offset sizes} of all of this document fragment's children.\n     *\n     * @readonly\n     * @type {Number}\n     */\n  }, {\n    key: \"maxOffset\",\n    get: function get() {\n      return this._children.maxOffset;\n    }\n\n    /**\n     * Is `true` if there are no nodes inside this document fragment, `false` otherwise.\n     *\n     * @readonly\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isEmpty\",\n    get: function get() {\n      return this.childCount === 0;\n    }\n\n    /**\n     * Artificial root of `DocumentFragment`. Returns itself. Added for compatibility reasons.\n     *\n     * @readonly\n     * @type {module:engine/model/documentfragment~DocumentFragment}\n     */\n  }, {\n    key: \"root\",\n    get: function get() {\n      return this;\n    }\n\n    /**\n     * Artificial parent of `DocumentFragment`. Returns `null`. Added for compatibility reasons.\n     *\n     * @readonly\n     * @type {null}\n     */\n  }, {\n    key: \"parent\",\n    get: function get() {\n      return null;\n    }\n\n    /**\n     * Checks whether this object is of the given type.\n     *\n     *\t\tdocFrag.is( 'documentFragment' ); // -> true\n     *\t\tdocFrag.is( 'model:documentFragment' ); // -> true\n     *\n     *\t\tdocFrag.is( 'view:documentFragment' ); // -> false\n     *\t\tdocFrag.is( 'element' ); // -> false\n     *\t\tdocFrag.is( 'node' ); // -> false\n     *\n     * {@link module:engine/model/node~Node#is Check the entire list of model objects} which implement the `is()` method.\n     *\n     * @param {String} type\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'documentFragment' || type == 'model:documentFragment';\n    }\n\n    /**\n     * Gets the child at the given index. Returns `null` if incorrect index was passed.\n     *\n     * @param {Number} index Index of child.\n     * @returns {module:engine/model/node~Node|null} Child node.\n     */\n  }, {\n    key: \"getChild\",\n    value: function getChild(index) {\n      return this._children.getNode(index);\n    }\n\n    /**\n     * Returns an iterator that iterates over all of this document fragment's children.\n     *\n     * @returns {Iterable.<module:engine/model/node~Node>}\n     */\n  }, {\n    key: \"getChildren\",\n    value: function getChildren() {\n      return this._children[Symbol.iterator]();\n    }\n\n    /**\n     * Returns an index of the given child node. Returns `null` if given node is not a child of this document fragment.\n     *\n     * @param {module:engine/model/node~Node} node Child node to look for.\n     * @returns {Number|null} Child node's index.\n     */\n  }, {\n    key: \"getChildIndex\",\n    value: function getChildIndex(node) {\n      return this._children.getNodeIndex(node);\n    }\n\n    /**\n     * Returns the starting offset of given child. Starting offset is equal to the sum of\n     * {@link module:engine/model/node~Node#offsetSize offset sizes} of all node's siblings that are before it. Returns `null` if\n     * given node is not a child of this document fragment.\n     *\n     * @param {module:engine/model/node~Node} node Child node to look for.\n     * @returns {Number|null} Child node's starting offset.\n     */\n  }, {\n    key: \"getChildStartOffset\",\n    value: function getChildStartOffset(node) {\n      return this._children.getNodeStartOffset(node);\n    }\n\n    /**\n     * Returns path to a `DocumentFragment`, which is an empty array. Added for compatibility reasons.\n     *\n     * @returns {Array}\n     */\n  }, {\n    key: \"getPath\",\n    value: function getPath() {\n      return [];\n    }\n\n    /**\n     * Returns a descendant node by its path relative to this element.\n     *\n     *\t\t// <this>a<b>c</b></this>\n     *\t\tthis.getNodeByPath( [ 0 ] );     // -> \"a\"\n     *\t\tthis.getNodeByPath( [ 1 ] );     // -> <b>\n     *\t\tthis.getNodeByPath( [ 1, 0 ] );  // -> \"c\"\n     *\n     * @param {Array.<Number>} relativePath Path of the node to find, relative to this element.\n     * @returns {module:engine/model/node~Node|module:engine/model/documentfragment~DocumentFragment}\n     */\n  }, {\n    key: \"getNodeByPath\",\n    value: function getNodeByPath(relativePath) {\n      var node = this; // eslint-disable-line consistent-this\n      var _iterator = _createForOfIteratorHelper(relativePath),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var index = _step.value;\n          node = node.getChild(node.offsetToIndex(index));\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      return node;\n    }\n\n    /**\n     * Converts offset \"position\" to index \"position\".\n     *\n     * Returns index of a node that occupies given offset. If given offset is too low, returns `0`. If given offset is\n     * too high, returns index after last child}.\n     *\n     *\t\tconst textNode = new Text( 'foo' );\n     *\t\tconst pElement = new Element( 'p' );\n     *\t\tconst docFrag = new DocumentFragment( [ textNode, pElement ] );\n     *\t\tdocFrag.offsetToIndex( -1 ); // Returns 0, because offset is too low.\n     *\t\tdocFrag.offsetToIndex( 0 ); // Returns 0, because offset 0 is taken by `textNode` which is at index 0.\n     *\t\tdocFrag.offsetToIndex( 1 ); // Returns 0, because `textNode` has `offsetSize` equal to 3, so it occupies offset 1 too.\n     *\t\tdocFrag.offsetToIndex( 2 ); // Returns 0.\n     *\t\tdocFrag.offsetToIndex( 3 ); // Returns 1.\n     *\t\tdocFrag.offsetToIndex( 4 ); // Returns 2. There are no nodes at offset 4, so last available index is returned.\n     *\n     * @param {Number} offset Offset to look for.\n     * @returns {Number} Index of a node that occupies given offset.\n     */\n  }, {\n    key: \"offsetToIndex\",\n    value: function offsetToIndex(offset) {\n      return this._children.offsetToIndex(offset);\n    }\n\n    /**\n     * Converts `DocumentFragment` instance to plain object and returns it.\n     * Takes care of converting all of this document fragment's children.\n     *\n     * @returns {Object} `DocumentFragment` instance converted to plain object.\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var json = [];\n      var _iterator2 = _createForOfIteratorHelper(this._children),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var node = _step2.value;\n          json.push(node.toJSON());\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      return json;\n    }\n\n    /**\n     * Creates a `DocumentFragment` instance from given plain object (i.e. parsed JSON string).\n     * Converts `DocumentFragment` children to proper nodes.\n     *\n     * @param {Object} json Plain object to be converted to `DocumentFragment`.\n     * @returns {module:engine/model/documentfragment~DocumentFragment} `DocumentFragment` instance created using given plain object.\n     */\n  }, {\n    key: \"_appendChild\",\n    value:\n    /**\n     * {@link #_insertChild Inserts} one or more nodes at the end of this document fragment.\n     *\n     * @protected\n     * @param {module:engine/model/item~Item|Iterable.<module:engine/model/item~Item>} items Items to be inserted.\n     */\n    function _appendChild(items) {\n      this._insertChild(this.childCount, items);\n    }\n\n    /**\n     * Inserts one or more nodes at the given index and sets {@link module:engine/model/node~Node#parent parent} of these nodes\n     * to this document fragment.\n     *\n     * @protected\n     * @param {Number} index Index at which nodes should be inserted.\n     * @param {module:engine/model/item~Item|Iterable.<module:engine/model/item~Item>} items Items to be inserted.\n     */\n  }, {\n    key: \"_insertChild\",\n    value: function _insertChild(index, items) {\n      var nodes = normalize(items);\n      var _iterator3 = _createForOfIteratorHelper(nodes),\n        _step3;\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var node = _step3.value;\n          // If node that is being added to this element is already inside another element, first remove it from the old parent.\n          if (node.parent !== null) {\n            node._remove();\n          }\n          node.parent = this;\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n      this._children._insertNodes(index, nodes);\n    }\n\n    /**\n     * Removes one or more nodes starting at the given index\n     * and sets {@link module:engine/model/node~Node#parent parent} of these nodes to `null`.\n     *\n     * @protected\n     * @param {Number} index Index of the first node to remove.\n     * @param {Number} [howMany=1] Number of nodes to remove.\n     * @returns {Array.<module:engine/model/node~Node>} Array containing removed nodes.\n     */\n  }, {\n    key: \"_removeChildren\",\n    value: function _removeChildren(index) {\n      var howMany = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      var nodes = this._children._removeNodes(index, howMany);\n      var _iterator4 = _createForOfIteratorHelper(nodes),\n        _step4;\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var node = _step4.value;\n          node.parent = null;\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n      return nodes;\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(json) {\n      var children = [];\n      var _iterator5 = _createForOfIteratorHelper(json),\n        _step5;\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var child = _step5.value;\n          if (child.name) {\n            // If child has name property, it is an Element.\n            children.push(Element.fromJSON(child));\n          } else {\n            // Otherwise, it is a Text node.\n            children.push(Text.fromJSON(child));\n          }\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n      return new DocumentFragment(children);\n    }\n  }]);\n}(); // Converts strings to Text and non-iterables to arrays.\n//\n// @param {String|module:engine/model/item~Item|Iterable.<module:engine/model/item~Item>}\n// @returns {Iterable.<module:engine/model/node~Node>}\nexport { DocumentFragment as default };\nfunction normalize(nodes) {\n  // Separate condition because string is iterable.\n  if (typeof nodes == 'string') {\n    return [new Text(nodes)];\n  }\n  if (!isIterable(nodes)) {\n    nodes = [nodes];\n  }\n\n  // Array.from to enable .map() on non-arrays.\n  return Array.from(nodes).map(function (node) {\n    if (typeof node == 'string') {\n      return new Text(node);\n    }\n    if (node instanceof TextProxy) {\n      return new Text(node.data, node.getAttributes());\n    }\n    return node;\n  });\n}","import _slicedToArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport _regeneratorValues from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regeneratorValues.js\";\nimport _regenerator from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regenerator.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.starts-with.js\";\nimport \"core-js/modules/es.string.anchor.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/documentselection\n */\n\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport EmitterMixin from '@ckeditor/ckeditor5-utils/src/emittermixin';\nimport Selection from './selection';\nimport LiveRange from './liverange';\nimport Text from './text';\nimport TextProxy from './textproxy';\nimport toMap from '@ckeditor/ckeditor5-utils/src/tomap';\nimport Collection from '@ckeditor/ckeditor5-utils/src/collection';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport uid from '@ckeditor/ckeditor5-utils/src/uid';\nvar storePrefix = 'selection:';\n\n/**\n * `DocumentSelection` is a special selection which is used as the\n * {@link module:engine/model/document~Document#selection document's selection}.\n * There can be only one instance of `DocumentSelection` per document.\n *\n * Document selection can only be changed by using the {@link module:engine/model/writer~Writer} instance\n * inside the {@link module:engine/model/model~Model#change `change()`} block, as it provides a secure way to modify model.\n *\n * `DocumentSelection` is automatically updated upon changes in the {@link module:engine/model/document~Document document}\n * to always contain valid ranges. Its attributes are inherited from the text unless set explicitly.\n *\n * Differences between {@link module:engine/model/selection~Selection} and `DocumentSelection` are:\n * * there is always a range in `DocumentSelection` - even if no ranges were added there is a \"default range\"\n * present in the selection,\n * * ranges added to this selection updates automatically when the document changes,\n * * attributes of `DocumentSelection` are updated automatically according to selection ranges.\n *\n * Since `DocumentSelection` uses {@link module:engine/model/liverange~LiveRange live ranges}\n * and is updated when {@link module:engine/model/document~Document document}\n * changes, it cannot be set on {@link module:engine/model/node~Node nodes}\n * that are inside {@link module:engine/model/documentfragment~DocumentFragment document fragment}.\n * If you need to represent a selection in document fragment,\n * use {@link module:engine/model/selection~Selection Selection class} instead.\n *\n * @mixes module:utils/emittermixin~EmitterMixin\n */\nvar DocumentSelection = /*#__PURE__*/function () {\n  /**\n   * Creates an empty live selection for given {@link module:engine/model/document~Document}.\n   *\n   * @param {module:engine/model/document~Document} doc Document which owns this selection.\n   */\n  function DocumentSelection(doc) {\n    _classCallCheck(this, DocumentSelection);\n    /**\n     * Selection used internally by that class (`DocumentSelection` is a proxy to that selection).\n     *\n     * @protected\n     */\n    this._selection = new LiveSelection(doc);\n    this._selection.delegate('change:range').to(this);\n    this._selection.delegate('change:attribute').to(this);\n  }\n\n  /**\n   * Returns whether the selection is collapsed. Selection is collapsed when there is exactly one range which is\n   * collapsed.\n   *\n   * @readonly\n   * @type {Boolean}\n   */\n  return _createClass(DocumentSelection, [{\n    key: \"isCollapsed\",\n    get: function get() {\n      return this._selection.isCollapsed;\n    }\n\n    /**\n     * Selection anchor. Anchor may be described as a position where the most recent part of the selection starts.\n     * Together with {@link #focus} they define the direction of selection, which is important\n     * when expanding/shrinking selection. Anchor is always {@link module:engine/model/range~Range#start start} or\n     * {@link module:engine/model/range~Range#end end} position of the most recently added range.\n     *\n     * Is set to `null` if there are no ranges in selection.\n     *\n     * @see #focus\n     * @readonly\n     * @type {module:engine/model/position~Position|null}\n     */\n  }, {\n    key: \"anchor\",\n    get: function get() {\n      return this._selection.anchor;\n    }\n\n    /**\n     * Selection focus. Focus is a position where the selection ends.\n     *\n     * Is set to `null` if there are no ranges in selection.\n     *\n     * @see #anchor\n     * @readonly\n     * @type {module:engine/model/position~Position|null}\n     */\n  }, {\n    key: \"focus\",\n    get: function get() {\n      return this._selection.focus;\n    }\n\n    /**\n     * Returns number of ranges in selection.\n     *\n     * @readonly\n     * @type {Number}\n     */\n  }, {\n    key: \"rangeCount\",\n    get: function get() {\n      return this._selection.rangeCount;\n    }\n\n    /**\n     * Describes whether `Documentselection` has own range(s) set, or if it is defaulted to\n     * {@link module:engine/model/document~Document#_getDefaultRange document's default range}.\n     *\n     * @readonly\n     * @type {Boolean}\n     */\n  }, {\n    key: \"hasOwnRange\",\n    get: function get() {\n      return this._selection.hasOwnRange;\n    }\n\n    /**\n     * Specifies whether the {@link #focus}\n     * precedes {@link #anchor}.\n     *\n     * @readonly\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isBackward\",\n    get: function get() {\n      return this._selection.isBackward;\n    }\n\n    /**\n     * Describes whether the gravity is overridden (using {@link module:engine/model/writer~Writer#overrideSelectionGravity}) or not.\n     *\n     * Note that the gravity remains overridden as long as will not be restored the same number of times as it was overridden.\n     *\n     * @readonly\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"isGravityOverridden\",\n    get: function get() {\n      return this._selection.isGravityOverridden;\n    }\n\n    /**\n     * A collection of selection markers.\n     * Marker is a selection marker when selection range is inside the marker range.\n     *\n     * @readonly\n     * @type {module:utils/collection~Collection.<module:engine/model/markercollection~Marker>}\n     */\n  }, {\n    key: \"markers\",\n    get: function get() {\n      return this._selection.markers;\n    }\n\n    /**\n     * Used for the compatibility with the {@link module:engine/model/selection~Selection#isEqual} method.\n     *\n     * @protected\n     */\n  }, {\n    key: \"_ranges\",\n    get: function get() {\n      return this._selection._ranges;\n    }\n\n    /**\n     * Returns an iterable that iterates over copies of selection ranges.\n     *\n     * @returns {Iterable.<module:engine/model/range~Range>}\n     */\n  }, {\n    key: \"getRanges\",\n    value: function getRanges() {\n      return this._selection.getRanges();\n    }\n\n    /**\n     * Returns the first position in the selection.\n     * First position is the position that {@link module:engine/model/position~Position#isBefore is before}\n     * any other position in the selection.\n     *\n     * Returns `null` if there are no ranges in selection.\n     *\n     * @returns {module:engine/model/position~Position|null}\n     */\n  }, {\n    key: \"getFirstPosition\",\n    value: function getFirstPosition() {\n      return this._selection.getFirstPosition();\n    }\n\n    /**\n     * Returns the last position in the selection.\n     * Last position is the position that {@link module:engine/model/position~Position#isAfter is after}\n     * any other position in the selection.\n     *\n     * Returns `null` if there are no ranges in selection.\n     *\n     * @returns {module:engine/model/position~Position|null}\n     */\n  }, {\n    key: \"getLastPosition\",\n    value: function getLastPosition() {\n      return this._selection.getLastPosition();\n    }\n\n    /**\n     * Returns a copy of the first range in the selection.\n     * First range is the one which {@link module:engine/model/range~Range#start start} position\n     * {@link module:engine/model/position~Position#isBefore is before} start position of all other ranges\n     * (not to confuse with the first range added to the selection).\n     *\n     * Returns `null` if there are no ranges in selection.\n     *\n     * @returns {module:engine/model/range~Range|null}\n     */\n  }, {\n    key: \"getFirstRange\",\n    value: function getFirstRange() {\n      return this._selection.getFirstRange();\n    }\n\n    /**\n     * Returns a copy of the last range in the selection.\n     * Last range is the one which {@link module:engine/model/range~Range#end end} position\n     * {@link module:engine/model/position~Position#isAfter is after} end position of all other ranges (not to confuse with the range most\n     * recently added to the selection).\n     *\n     * Returns `null` if there are no ranges in selection.\n     *\n     * @returns {module:engine/model/range~Range|null}\n     */\n  }, {\n    key: \"getLastRange\",\n    value: function getLastRange() {\n      return this._selection.getLastRange();\n    }\n\n    /**\n     * Gets elements of type {@link module:engine/model/schema~Schema#isBlock \"block\"} touched by the selection.\n     *\n     * This method's result can be used for example to apply block styling to all blocks covered by this selection.\n     *\n     * **Note:** `getSelectedBlocks()` returns blocks that are nested in other non-block elements\n     * but will not return blocks nested in other blocks.\n     *\n     * In this case the function will return exactly all 3 paragraphs (note: `<blockQuote>` is not a block itself):\n     *\n     *\t\t<paragraph>[a</paragraph>\n     *\t\t<blockQuote>\n     *\t\t\t<paragraph>b</paragraph>\n     *\t\t</blockQuote>\n     *\t\t<paragraph>c]d</paragraph>\n     *\n     * In this case the paragraph will also be returned, despite the collapsed selection:\n     *\n     *\t\t<paragraph>[]a</paragraph>\n     *\n     * In such a scenario, however, only blocks A, B & E will be returned as blocks C & D are nested in block B:\n     *\n     *\t\t[<blockA></blockA>\n     *\t\t<blockB>\n     *\t\t\t<blockC></blockC>\n     *\t\t\t<blockD></blockD>\n     *\t\t</blockB>\n     *\t\t<blockE></blockE>]\n     *\n     * If the selection is inside a block all the inner blocks (A & B) are returned:\n     *\n     * \t\t<block>\n     *\t\t\t<blockA>[a</blockA>\n     * \t\t\t<blockB>b]</blockB>\n     * \t\t</block>\n     *\n     * **Special case**: If a selection ends at the beginning of a block, that block is not returned as from user perspective\n     * this block wasn't selected. See [#984](https://github.com/ckeditor/ckeditor5-engine/issues/984) for more details.\n     *\n     *\t\t<paragraph>[a</paragraph>\n     *\t\t<paragraph>b</paragraph>\n     *\t\t<paragraph>]c</paragraph> // this block will not be returned\n     *\n     * @returns {Iterable.<module:engine/model/element~Element>}\n     */\n  }, {\n    key: \"getSelectedBlocks\",\n    value: function getSelectedBlocks() {\n      return this._selection.getSelectedBlocks();\n    }\n\n    /**\n     * Returns the selected element. {@link module:engine/model/element~Element Element} is considered as selected if there is only\n     * one range in the selection, and that range contains exactly one element.\n     * Returns `null` if there is no selected element.\n     *\n     * @returns {module:engine/model/element~Element|null}\n     */\n  }, {\n    key: \"getSelectedElement\",\n    value: function getSelectedElement() {\n      return this._selection.getSelectedElement();\n    }\n\n    /**\n     * Checks whether the selection contains the entire content of the given element. This means that selection must start\n     * at a position {@link module:engine/model/position~Position#isTouching touching} the element's start and ends at position\n     * touching the element's end.\n     *\n     * By default, this method will check whether the entire content of the selection's current root is selected.\n     * Useful to check if e.g. the user has just pressed <kbd>Ctrl</kbd> + <kbd>A</kbd>.\n     *\n     * @param {module:engine/model/element~Element} [element=this.anchor.root]\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"containsEntireContent\",\n    value: function containsEntireContent(element) {\n      return this._selection.containsEntireContent(element);\n    }\n\n    /**\n     * Unbinds all events previously bound by document selection.\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this._selection.destroy();\n    }\n\n    /**\n     * Returns iterable that iterates over this selection's attribute keys.\n     *\n     * @returns {Iterable.<String>}\n     */\n  }, {\n    key: \"getAttributeKeys\",\n    value: function getAttributeKeys() {\n      return this._selection.getAttributeKeys();\n    }\n\n    /**\n     * Returns iterable that iterates over this selection's attributes.\n     *\n     * Attributes are returned as arrays containing two items. First one is attribute key and second is attribute value.\n     * This format is accepted by native `Map` object and also can be passed in `Node` constructor.\n     *\n     * @returns {Iterable.<*>}\n     */\n  }, {\n    key: \"getAttributes\",\n    value: function getAttributes() {\n      return this._selection.getAttributes();\n    }\n\n    /**\n     * Gets an attribute value for given key or `undefined` if that attribute is not set on the selection.\n     *\n     * @param {String} key Key of attribute to look for.\n     * @returns {*} Attribute value or `undefined`.\n     */\n  }, {\n    key: \"getAttribute\",\n    value: function getAttribute(key) {\n      return this._selection.getAttribute(key);\n    }\n\n    /**\n     * Checks if the selection has an attribute for given key.\n     *\n     * @param {String} key Key of attribute to check.\n     * @returns {Boolean} `true` if attribute with given key is set on selection, `false` otherwise.\n     */\n  }, {\n    key: \"hasAttribute\",\n    value: function hasAttribute(key) {\n      return this._selection.hasAttribute(key);\n    }\n\n    /**\n     * Refreshes selection attributes and markers according to the current position in the model.\n     */\n  }, {\n    key: \"refresh\",\n    value: function refresh() {\n      this._selection._updateMarkers();\n      this._selection._updateAttributes(false);\n    }\n\n    /**\n     * Checks whether this object is of the given type.\n     *\n     *\t\tselection.is( 'selection' ); // -> true\n     *\t\tselection.is( 'documentSelection' ); // -> true\n     *\t\tselection.is( 'model:selection' ); // -> true\n     *\t\tselection.is( 'model:documentSelection' ); // -> true\n     *\n     *\t\tselection.is( 'view:selection' ); // -> false\n     *\t\tselection.is( 'element' ); // -> false\n     *\t\tselection.is( 'node' ); // -> false\n     *\n     * {@link module:engine/model/node~Node#is Check the entire list of model objects} which implement the `is()` method.\n     *\n     * @param {String} type\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'selection' || type == 'model:selection' || type == 'documentSelection' || type == 'model:documentSelection';\n    }\n\n    /**\n     * Moves {@link module:engine/model/documentselection~DocumentSelection#focus} to the specified location.\n     * Should be used only within the {@link module:engine/model/writer~Writer#setSelectionFocus} method.\n     *\n     * The location can be specified in the same form as\n     * {@link module:engine/model/writer~Writer#createPositionAt writer.createPositionAt()} parameters.\n     *\n     * @see module:engine/model/writer~Writer#setSelectionFocus\n     * @protected\n     * @param {module:engine/model/item~Item|module:engine/model/position~Position} itemOrPosition\n     * @param {Number|'end'|'before'|'after'} [offset] Offset or one of the flags. Used only when\n     * first parameter is a {@link module:engine/model/item~Item model item}.\n     */\n  }, {\n    key: \"_setFocus\",\n    value: function _setFocus(itemOrPosition, offset) {\n      this._selection.setFocus(itemOrPosition, offset);\n    }\n\n    /**\n     * Sets this selection's ranges and direction to the specified location based on the given\n     * {@link module:engine/model/selection~Selectable selectable}.\n     * Should be used only within the {@link module:engine/model/writer~Writer#setSelection} method.\n     *\n     * @see module:engine/model/writer~Writer#setSelection\n     * @protected\n     * @param {module:engine/model/selection~Selectable} selectable\n     * @param {Number|'before'|'end'|'after'|'on'|'in'} [placeOrOffset] Sets place or offset of the selection.\n     * @param {Object} [options]\n     * @param {Boolean} [options.backward] Sets this selection instance to be backward.\n     */\n  }, {\n    key: \"_setTo\",\n    value: function _setTo(selectable, placeOrOffset, options) {\n      this._selection.setTo(selectable, placeOrOffset, options);\n    }\n\n    /**\n     * Sets attribute on the selection. If attribute with the same key already is set, it's value is overwritten.\n     * Should be used only within the {@link module:engine/model/writer~Writer#setSelectionAttribute} method.\n     *\n     * @see module:engine/model/writer~Writer#setSelectionAttribute\n     * @protected\n     * @param {String} key Key of the attribute to set.\n     * @param {*} value Attribute value.\n     */\n  }, {\n    key: \"_setAttribute\",\n    value: function _setAttribute(key, value) {\n      this._selection.setAttribute(key, value);\n    }\n\n    /**\n     * Removes an attribute with given key from the selection.\n     * If the given attribute was set on the selection, fires the {@link module:engine/model/selection~Selection#event:change:range}\n     * event with removed attribute key.\n     * Should be used only within the {@link module:engine/model/writer~Writer#removeSelectionAttribute} method.\n     *\n     * @see module:engine/model/writer~Writer#removeSelectionAttribute\n     * @protected\n     * @param {String} key Key of the attribute to remove.\n     */\n  }, {\n    key: \"_removeAttribute\",\n    value: function _removeAttribute(key) {\n      this._selection.removeAttribute(key);\n    }\n\n    /**\n     * Returns an iterable that iterates through all selection attributes stored in current selection's parent.\n     *\n     * @protected\n     * @returns {Iterable.<*>}\n     */\n  }, {\n    key: \"_getStoredAttributes\",\n    value: function _getStoredAttributes() {\n      return this._selection._getStoredAttributes();\n    }\n\n    /**\n     * Temporarily changes the gravity of the selection from the left to the right.\n     *\n     * The gravity defines from which direction the selection inherits its attributes. If it's the default left\n     * gravity, the selection (after being moved by the the user) inherits attributes from its left hand side.\n     * This method allows to temporarily override this behavior by forcing the gravity to the right.\n     *\n     * It returns an unique identifier which is required to restore the gravity. It guarantees the symmetry\n     * of the process.\n     *\n     * @see module:engine/model/writer~Writer#overrideSelectionGravity\n     * @protected\n     * @returns {String} The unique id which allows restoring the gravity.\n     */\n  }, {\n    key: \"_overrideGravity\",\n    value: function _overrideGravity() {\n      return this._selection.overrideGravity();\n    }\n\n    /**\n     * Restores the {@link ~DocumentSelection#_overrideGravity overridden gravity}.\n     *\n     * Restoring the gravity is only possible using the unique identifier returned by\n     * {@link ~DocumentSelection#_overrideGravity}. Note that the gravity remains overridden as long as won't be restored\n     * the same number of times it was overridden.\n     *\n     * @see module:engine/model/writer~Writer#restoreSelectionGravity\n     * @protected\n     * @param {String} uid The unique id returned by {@link #_overrideGravity}.\n     */\n  }, {\n    key: \"_restoreGravity\",\n    value: function _restoreGravity(uid) {\n      this._selection.restoreGravity(uid);\n    }\n\n    /**\n     * Generates and returns an attribute key for selection attributes store, basing on original attribute key.\n     *\n     * @protected\n     * @param {String} key Attribute key to convert.\n     * @returns {String} Converted attribute key, applicable for selection store.\n     */\n  }], [{\n    key: \"_getStoreAttributeKey\",\n    value: function _getStoreAttributeKey(key) {\n      return storePrefix + key;\n    }\n\n    /**\n     * Checks whether the given attribute key is an attribute stored on an element.\n     *\n     * @protected\n     * @param {String} key\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"_isStoreAttributeKey\",\n    value: function _isStoreAttributeKey(key) {\n      return key.startsWith(storePrefix);\n    }\n  }]);\n}();\nexport { DocumentSelection as default };\nmix(DocumentSelection, EmitterMixin);\n\n/**\n * Fired when selection range(s) changed.\n *\n * @event change:range\n * @param {Boolean} directChange In case of {@link module:engine/model/selection~Selection} class it is always set\n * to `true` which indicates that the selection change was caused by a direct use of selection's API.\n * The {@link module:engine/model/documentselection~DocumentSelection}, however, may change because its position\n * was directly changed through the {@link module:engine/model/writer~Writer writer} or because its position was\n * changed because the structure of the model has been changed (which means an indirect change).\n * The indirect change does not occur in case of normal (detached) selections because they are \"static\" (as \"not live\")\n * which mean that they are not updated once the document changes.\n */\n\n/**\n * Fired when selection attribute changed.\n *\n * @event change:attribute\n * @param {Boolean} directChange In case of {@link module:engine/model/selection~Selection} class it is always set\n * to `true` which indicates that the selection change was caused by a direct use of selection's API.\n * The {@link module:engine/model/documentselection~DocumentSelection}, however, may change because its attributes\n * were directly changed through the {@link module:engine/model/writer~Writer writer} or because its position was\n * changed in the model and its attributes were refreshed (which means an indirect change).\n * The indirect change does not occur in case of normal (detached) selections because they are \"static\" (as \"not live\")\n * which mean that they are not updated once the document changes.\n * @param {Array.<String>} attributeKeys Array containing keys of attributes that changed.\n */\n\n// `LiveSelection` is used internally by {@link module:engine/model/documentselection~DocumentSelection} and shouldn't be used directly.\n//\n// LiveSelection` is automatically updated upon changes in the {@link module:engine/model/document~Document document}\n// to always contain valid ranges. Its attributes are inherited from the text unless set explicitly.\n//\n// Differences between {@link module:engine/model/selection~Selection} and `LiveSelection` are:\n// * there is always a range in `LiveSelection` - even if no ranges were added there is a \"default range\"\n// present in the selection,\n// * ranges added to this selection updates automatically when the document changes,\n// * attributes of `LiveSelection` are updated automatically according to selection ranges.\n//\n// @extends module:engine/model/selection~Selection\n//\nvar LiveSelection = /*#__PURE__*/function (_Selection) {\n  // Creates an empty live selection for given {@link module:engine/model/document~Document}.\n  // @param {module:engine/model/document~Document} doc Document which owns this selection.\n  function LiveSelection(doc) {\n    var _this;\n    _classCallCheck(this, LiveSelection);\n    _this = _callSuper(this, LiveSelection);\n\n    // List of selection markers.\n    // Marker is a selection marker when selection range is inside the marker range.\n    //\n    // @type {module:utils/collection~Collection}\n    _this.markers = new Collection({\n      idProperty: 'name'\n    });\n\n    // Document which owns this selection.\n    //\n    // @protected\n    // @member {module:engine/model/model~Model}\n    _this._model = doc.model;\n\n    // Document which owns this selection.\n    //\n    // @protected\n    // @member {module:engine/model/document~Document}\n    _this._document = doc;\n\n    // Keeps mapping of attribute name to priority with which the attribute got modified (added/changed/removed)\n    // last time. Possible values of priority are: `'low'` and `'normal'`.\n    //\n    // Priorities are used by internal `LiveSelection` mechanisms. All attributes set using `LiveSelection`\n    // attributes API are set with `'normal'` priority.\n    //\n    // @private\n    // @member {Map} module:engine/model/liveselection~LiveSelection#_attributePriority\n    _this._attributePriority = new Map();\n\n    // Contains data required to fix ranges which have been moved to the graveyard.\n    // @private\n    // @member {Array} module:engine/model/liveselection~LiveSelection#_fixGraveyardRangesData\n    _this._fixGraveyardRangesData = [];\n\n    // Flag that informs whether the selection ranges have changed. It is changed on true when `LiveRange#change:range` event is fired.\n    // @private\n    // @member {Array} module:engine/model/liveselection~LiveSelection#_hasChangedRange\n    _this._hasChangedRange = false;\n\n    // Each overriding gravity adds an UID to the set and each removal removes it.\n    // Gravity is overridden when there's at least one UID in the set.\n    // Gravity is restored when the set is empty.\n    // This is to prevent conflicts when gravity is overridden by more than one feature at the same time.\n    // @private\n    // @type {Set}\n    _this._overriddenGravityRegister = new Set();\n\n    // Ensure selection is correct after each operation.\n    _this.listenTo(_this._model, 'applyOperation', function (evt, args) {\n      var operation = args[0];\n      if (!operation.isDocumentOperation || operation.type == 'marker' || operation.type == 'rename' || operation.type == 'noop') {\n        return;\n      }\n      while (_this._fixGraveyardRangesData.length) {\n        var _this$_fixGraveyardRa = _this._fixGraveyardRangesData.shift(),\n          liveRange = _this$_fixGraveyardRa.liveRange,\n          sourcePosition = _this$_fixGraveyardRa.sourcePosition;\n        _this._fixGraveyardSelection(liveRange, sourcePosition);\n      }\n      if (_this._hasChangedRange) {\n        _this._hasChangedRange = false;\n        _this.fire('change:range', {\n          directChange: false\n        });\n      }\n    }, {\n      priority: 'lowest'\n    });\n\n    // Ensure selection is correct and up to date after each range change.\n    _this.on('change:range', function () {\n      var _iterator = _createForOfIteratorHelper(_this.getRanges()),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var range = _step.value;\n          if (!_this._document._validateSelectionRange(range)) {\n            /**\n             * Range from {@link module:engine/model/documentselection~DocumentSelection document selection}\n             * starts or ends at incorrect position.\n             *\n             * @error document-selection-wrong-position\n             * @param {module:engine/model/range~Range} range\n             */\n            throw new CKEditorError('document-selection-wrong-position: Range from document selection starts or ends at incorrect position.', _this, {\n              range: range\n            });\n          }\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    });\n\n    // Update markers data stored by the selection after each marker change.\n    _this.listenTo(_this._model.markers, 'update', function () {\n      return _this._updateMarkers();\n    });\n\n    // Ensure selection is up to date after each change block.\n    _this.listenTo(_this._document, 'change', function (evt, batch) {\n      clearAttributesStoredInElement(_this._model, batch);\n    });\n    return _this;\n  }\n  _inherits(LiveSelection, _Selection);\n  return _createClass(LiveSelection, [{\n    key: \"isCollapsed\",\n    get: function get() {\n      var length = this._ranges.length;\n      return length === 0 ? this._document._getDefaultRange().isCollapsed : _superPropGet(LiveSelection, \"isCollapsed\", this, 1);\n    }\n  }, {\n    key: \"anchor\",\n    get: function get() {\n      return _superPropGet(LiveSelection, \"anchor\", this, 1) || this._document._getDefaultRange().start;\n    }\n  }, {\n    key: \"focus\",\n    get: function get() {\n      return _superPropGet(LiveSelection, \"focus\", this, 1) || this._document._getDefaultRange().end;\n    }\n  }, {\n    key: \"rangeCount\",\n    get: function get() {\n      return this._ranges.length ? this._ranges.length : 1;\n    }\n\n    // Describes whether `LiveSelection` has own range(s) set, or if it is defaulted to\n    // {@link module:engine/model/document~Document#_getDefaultRange document's default range}.\n    //\n    // @readonly\n    // @type {Boolean}\n  }, {\n    key: \"hasOwnRange\",\n    get: function get() {\n      return this._ranges.length > 0;\n    }\n\n    // When set to `true` then selection attributes on node before the caret won't be taken\n    // into consideration while updating selection attributes.\n    //\n    // @protected\n    // @type {Boolean}\n  }, {\n    key: \"isGravityOverridden\",\n    get: function get() {\n      return !!this._overriddenGravityRegister.size;\n    }\n\n    // Unbinds all events previously bound by live selection.\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      for (var i = 0; i < this._ranges.length; i++) {\n        this._ranges[i].detach();\n      }\n      this.stopListening();\n    }\n  }, {\n    key: \"getRanges\",\n    value: /*#__PURE__*/_regenerator().m(function getRanges() {\n      return _regenerator().w(function (_context) {\n        while (1) switch (_context.n) {\n          case 0:\n            if (!this._ranges.length) {\n              _context.n = 2;\n              break;\n            }\n            return _context.d(_regeneratorValues(_superPropGet(LiveSelection, \"getRanges\", this, 3)([])), 1);\n          case 1:\n            _context.n = 3;\n            break;\n          case 2:\n            _context.n = 3;\n            return this._document._getDefaultRange();\n          case 3:\n            return _context.a(2);\n        }\n      }, getRanges, this);\n    })\n  }, {\n    key: \"getFirstRange\",\n    value: function getFirstRange() {\n      return _superPropGet(LiveSelection, \"getFirstRange\", this, 3)([]) || this._document._getDefaultRange();\n    }\n  }, {\n    key: \"getLastRange\",\n    value: function getLastRange() {\n      return _superPropGet(LiveSelection, \"getLastRange\", this, 3)([]) || this._document._getDefaultRange();\n    }\n  }, {\n    key: \"setTo\",\n    value: function setTo(selectable, optionsOrPlaceOrOffset, options) {\n      _superPropGet(LiveSelection, \"setTo\", this, 3)([selectable, optionsOrPlaceOrOffset, options]);\n      this._updateAttributes(true);\n    }\n  }, {\n    key: \"setFocus\",\n    value: function setFocus(itemOrPosition, offset) {\n      _superPropGet(LiveSelection, \"setFocus\", this, 3)([itemOrPosition, offset]);\n      this._updateAttributes(true);\n    }\n  }, {\n    key: \"setAttribute\",\n    value: function setAttribute(key, value) {\n      if (this._setAttribute(key, value)) {\n        // Fire event with exact data.\n        var attributeKeys = [key];\n        this.fire('change:attribute', {\n          attributeKeys: attributeKeys,\n          directChange: true\n        });\n      }\n    }\n  }, {\n    key: \"removeAttribute\",\n    value: function removeAttribute(key) {\n      if (this._removeAttribute(key)) {\n        // Fire event with exact data.\n        var attributeKeys = [key];\n        this.fire('change:attribute', {\n          attributeKeys: attributeKeys,\n          directChange: true\n        });\n      }\n    }\n  }, {\n    key: \"overrideGravity\",\n    value: function overrideGravity() {\n      var overrideUid = uid();\n\n      // Remember that another overriding has been requested. It will need to be removed\n      // before the gravity is to be restored.\n      this._overriddenGravityRegister.add(overrideUid);\n      if (this._overriddenGravityRegister.size === 1) {\n        this._updateAttributes(true);\n      }\n      return overrideUid;\n    }\n  }, {\n    key: \"restoreGravity\",\n    value: function restoreGravity(uid) {\n      if (!this._overriddenGravityRegister.has(uid)) {\n        /**\n         * Restoring gravity for an unknown UID is not possible. Make sure you are using a correct\n         * UID obtained from the {@link module:engine/model/writer~Writer#overrideSelectionGravity} to restore.\n         *\n         * @error document-selection-gravity-wrong-restore\n         * @param {String} uid The unique identifier returned by\n         * {@link module:engine/model/documentselection~DocumentSelection#_overrideGravity}.\n         */\n        throw new CKEditorError('document-selection-gravity-wrong-restore: Attempting to restore the selection gravity for an unknown UID.', this, {\n          uid: uid\n        });\n      }\n      this._overriddenGravityRegister.delete(uid);\n\n      // Restore gravity only when all overriding have been restored.\n      if (!this.isGravityOverridden) {\n        this._updateAttributes(true);\n      }\n    }\n  }, {\n    key: \"_popRange\",\n    value: function _popRange() {\n      this._ranges.pop().detach();\n    }\n  }, {\n    key: \"_pushRange\",\n    value: function _pushRange(range) {\n      var liveRange = this._prepareRange(range);\n\n      // `undefined` is returned when given `range` is in graveyard root.\n      if (liveRange) {\n        this._ranges.push(liveRange);\n      }\n    }\n\n    // Prepares given range to be added to selection. Checks if it is correct,\n    // converts it to {@link module:engine/model/liverange~LiveRange LiveRange}\n    // and sets listeners listening to the range's change event.\n    //\n    // @private\n    // @param {module:engine/model/range~Range} range\n  }, {\n    key: \"_prepareRange\",\n    value: function _prepareRange(range) {\n      var _this2 = this;\n      this._checkRange(range);\n      if (range.root == this._document.graveyard) {\n        // @if CK_DEBUG // console.warn( 'Trying to add a Range that is in the graveyard root. Range rejected.' );\n\n        return;\n      }\n      var liveRange = LiveRange.fromRange(range);\n      liveRange.on('change:range', function (evt, oldRange, data) {\n        _this2._hasChangedRange = true;\n\n        // If `LiveRange` is in whole moved to the graveyard, save necessary data. It will be fixed on `Model#applyOperation` event.\n        if (liveRange.root == _this2._document.graveyard) {\n          _this2._fixGraveyardRangesData.push({\n            liveRange: liveRange,\n            sourcePosition: data.deletionPosition\n          });\n        }\n      });\n      return liveRange;\n    }\n  }, {\n    key: \"_updateMarkers\",\n    value: function _updateMarkers() {\n      var markers = [];\n      var _iterator2 = _createForOfIteratorHelper(this._model.markers),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var _marker2 = _step2.value;\n          var markerRange = _marker2.getRange();\n          var _iterator3 = _createForOfIteratorHelper(this.getRanges()),\n            _step3;\n          try {\n            for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n              var selectionRange = _step3.value;\n              if (markerRange.containsRange(selectionRange, !selectionRange.isCollapsed)) {\n                markers.push(_marker2);\n              }\n            }\n          } catch (err) {\n            _iterator3.e(err);\n          } finally {\n            _iterator3.f();\n          }\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      for (var _i = 0, _markers = markers; _i < _markers.length; _i++) {\n        var marker = _markers[_i];\n        if (!this.markers.has(marker)) {\n          this.markers.add(marker);\n        }\n      }\n      for (var _i2 = 0, _Array$from = Array.from(this.markers); _i2 < _Array$from.length; _i2++) {\n        var _marker = _Array$from[_i2];\n        if (!markers.includes(_marker)) {\n          this.markers.remove(_marker);\n        }\n      }\n    }\n\n    // Updates this selection attributes according to its ranges and the {@link module:engine/model/document~Document model document}.\n    //\n    // @protected\n    // @param {Boolean} clearAll\n    // @fires change:attribute\n  }, {\n    key: \"_updateAttributes\",\n    value: function _updateAttributes(clearAll) {\n      var newAttributes = toMap(this._getSurroundingAttributes());\n      var oldAttributes = toMap(this.getAttributes());\n      if (clearAll) {\n        // If `clearAll` remove all attributes and reset priorities.\n        this._attributePriority = new Map();\n        this._attrs = new Map();\n      } else {\n        // If not, remove only attributes added with `low` priority.\n        var _iterator4 = _createForOfIteratorHelper(this._attributePriority),\n          _step4;\n        try {\n          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n            var _step4$value = _slicedToArray(_step4.value, 2),\n              key = _step4$value[0],\n              priority = _step4$value[1];\n            if (priority == 'low') {\n              this._attrs.delete(key);\n              this._attributePriority.delete(key);\n            }\n          }\n        } catch (err) {\n          _iterator4.e(err);\n        } finally {\n          _iterator4.f();\n        }\n      }\n      this._setAttributesTo(newAttributes);\n\n      // Let's evaluate which attributes really changed.\n      var changed = [];\n\n      // First, loop through all attributes that are set on selection right now.\n      // Check which of them are different than old attributes.\n      var _iterator5 = _createForOfIteratorHelper(this.getAttributes()),\n        _step5;\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var _step5$value = _slicedToArray(_step5.value, 2),\n            newKey = _step5$value[0],\n            newValue = _step5$value[1];\n          if (!oldAttributes.has(newKey) || oldAttributes.get(newKey) !== newValue) {\n            changed.push(newKey);\n          }\n        }\n\n        // Then, check which of old attributes got removed.\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n      var _iterator6 = _createForOfIteratorHelper(oldAttributes),\n        _step6;\n      try {\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n          var _step6$value = _slicedToArray(_step6.value, 1),\n            oldKey = _step6$value[0];\n          if (!this.hasAttribute(oldKey)) {\n            changed.push(oldKey);\n          }\n        }\n\n        // Fire event with exact data (fire only if anything changed).\n      } catch (err) {\n        _iterator6.e(err);\n      } finally {\n        _iterator6.f();\n      }\n      if (changed.length > 0) {\n        this.fire('change:attribute', {\n          attributeKeys: changed,\n          directChange: false\n        });\n      }\n    }\n\n    // Internal method for setting `LiveSelection` attribute. Supports attribute priorities (through `directChange`\n    // parameter).\n    //\n    // @private\n    // @param {String} key Attribute key.\n    // @param {*} value Attribute value.\n    // @param {Boolean} [directChange=true] `true` if the change is caused by `Selection` API, `false` if change\n    // is caused by `Batch` API.\n    // @returns {Boolean} Whether value has changed.\n  }, {\n    key: \"_setAttribute\",\n    value: function _setAttribute(key, value) {\n      var directChange = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      var priority = directChange ? 'normal' : 'low';\n      if (priority == 'low' && this._attributePriority.get(key) == 'normal') {\n        // Priority too low.\n        return false;\n      }\n      var oldValue = _superPropGet(LiveSelection, \"getAttribute\", this, 3)([key]);\n\n      // Don't do anything if value has not changed.\n      if (oldValue === value) {\n        return false;\n      }\n      this._attrs.set(key, value);\n\n      // Update priorities map.\n      this._attributePriority.set(key, priority);\n      return true;\n    }\n\n    // Internal method for removing `LiveSelection` attribute. Supports attribute priorities (through `directChange`\n    // parameter).\n    //\n    // NOTE: Even if attribute is not present in the selection but is provided to this method, it's priority will\n    // be changed according to `directChange` parameter.\n    //\n    // @private\n    // @param {String} key Attribute key.\n    // @param {Boolean} [directChange=true] `true` if the change is caused by `Selection` API, `false` if change\n    // is caused by `Batch` API.\n    // @returns {Boolean} Whether attribute was removed. May not be true if such attributes didn't exist or the\n    // existing attribute had higher priority.\n  }, {\n    key: \"_removeAttribute\",\n    value: function _removeAttribute(key) {\n      var directChange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      var priority = directChange ? 'normal' : 'low';\n      if (priority == 'low' && this._attributePriority.get(key) == 'normal') {\n        // Priority too low.\n        return false;\n      }\n\n      // Update priorities map.\n      this._attributePriority.set(key, priority);\n\n      // Don't do anything if value has not changed.\n      if (!_superPropGet(LiveSelection, \"hasAttribute\", this, 3)([key])) {\n        return false;\n      }\n      this._attrs.delete(key);\n      return true;\n    }\n\n    // Internal method for setting multiple `LiveSelection` attributes. Supports attribute priorities (through\n    // `directChange` parameter).\n    //\n    // @private\n    // @param {Map.<String,*>} attrs Iterable object containing attributes to be set.\n    // @returns {Set.<String>} Changed attribute keys.\n  }, {\n    key: \"_setAttributesTo\",\n    value: function _setAttributesTo(attrs) {\n      var changed = new Set();\n      var _iterator7 = _createForOfIteratorHelper(this.getAttributes()),\n        _step7;\n      try {\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n          var _step7$value = _slicedToArray(_step7.value, 2),\n            oldKey = _step7$value[0],\n            oldValue = _step7$value[1];\n          // Do not remove attribute if attribute with same key and value is about to be set.\n          if (attrs.get(oldKey) === oldValue) {\n            continue;\n          }\n\n          // All rest attributes will be removed so changed attributes won't change .\n          this._removeAttribute(oldKey, false);\n        }\n      } catch (err) {\n        _iterator7.e(err);\n      } finally {\n        _iterator7.f();\n      }\n      var _iterator8 = _createForOfIteratorHelper(attrs),\n        _step8;\n      try {\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n          var _step8$value = _slicedToArray(_step8.value, 2),\n            key = _step8$value[0],\n            value = _step8$value[1];\n          // Attribute may not be set because of attributes or because same key/value is already added.\n          var gotAdded = this._setAttribute(key, value, false);\n          if (gotAdded) {\n            changed.add(key);\n          }\n        }\n      } catch (err) {\n        _iterator8.e(err);\n      } finally {\n        _iterator8.f();\n      }\n      return changed;\n    }\n\n    // Returns an iterable that iterates through all selection attributes stored in current selection's parent.\n    //\n    // @protected\n    // @returns {Iterable.<*>}\n  }, {\n    key: \"_getStoredAttributes\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function _getStoredAttributes() {\n      var selectionParent, _iterator9, _step9, key, realKey, _t;\n      return _regenerator().w(function (_context2) {\n        while (1) switch (_context2.p = _context2.n) {\n          case 0:\n            selectionParent = this.getFirstPosition().parent;\n            if (!(this.isCollapsed && selectionParent.isEmpty)) {\n              _context2.n = 7;\n              break;\n            }\n            _iterator9 = _createForOfIteratorHelper(selectionParent.getAttributeKeys());\n            _context2.p = 1;\n            _iterator9.s();\n          case 2:\n            if ((_step9 = _iterator9.n()).done) {\n              _context2.n = 4;\n              break;\n            }\n            key = _step9.value;\n            if (!key.startsWith(storePrefix)) {\n              _context2.n = 3;\n              break;\n            }\n            realKey = key.substr(storePrefix.length);\n            _context2.n = 3;\n            return [realKey, selectionParent.getAttribute(key)];\n          case 3:\n            _context2.n = 2;\n            break;\n          case 4:\n            _context2.n = 6;\n            break;\n          case 5:\n            _context2.p = 5;\n            _t = _context2.v;\n            _iterator9.e(_t);\n          case 6:\n            _context2.p = 6;\n            _iterator9.f();\n            return _context2.f(6);\n          case 7:\n            return _context2.a(2);\n        }\n      }, _getStoredAttributes, this, [[1, 5, 6, 7]]);\n    }) // Checks model text nodes that are closest to the selection's first position and returns attributes of first\n    // found element. If there are no text nodes in selection's first position parent, it returns selection\n    // attributes stored in that parent.\n    //\n    // @private\n    // @returns {Iterable.<*>} Collection of attributes.\n  }, {\n    key: \"_getSurroundingAttributes\",\n    value: function _getSurroundingAttributes() {\n      var position = this.getFirstPosition();\n      var schema = this._model.schema;\n      var attrs = null;\n      if (!this.isCollapsed) {\n        // 1. If selection is a range...\n        var range = this.getFirstRange();\n\n        // ...look for a first character node in that range and take attributes from it.\n        var _iterator0 = _createForOfIteratorHelper(range),\n          _step0;\n        try {\n          for (_iterator0.s(); !(_step0 = _iterator0.n()).done;) {\n            var value = _step0.value;\n            // If the item is an object, we don't want to get attributes from its children.\n            if (value.item.is('element') && schema.isObject(value.item)) {\n              break;\n            }\n            if (value.type == 'text') {\n              attrs = value.item.getAttributes();\n              break;\n            }\n          }\n        } catch (err) {\n          _iterator0.e(err);\n        } finally {\n          _iterator0.f();\n        }\n      } else {\n        // 2. If the selection is a caret or the range does not contain a character node...\n\n        var nodeBefore = position.textNode ? position.textNode : position.nodeBefore;\n        var nodeAfter = position.textNode ? position.textNode : position.nodeAfter;\n\n        // When gravity is overridden then don't take node before into consideration.\n        if (!this.isGravityOverridden) {\n          // ...look at the node before caret and take attributes from it if it is a character node.\n          attrs = getAttrsIfCharacter(nodeBefore);\n        }\n\n        // 3. If not, look at the node after caret...\n        if (!attrs) {\n          attrs = getAttrsIfCharacter(nodeAfter);\n        }\n\n        // 4. If not, try to find the first character on the left, that is in the same node.\n        // When gravity is overridden then don't take node before into consideration.\n        if (!this.isGravityOverridden && !attrs) {\n          var node = nodeBefore;\n          while (node && !attrs) {\n            node = node.previousSibling;\n            attrs = getAttrsIfCharacter(node);\n          }\n        }\n\n        // 5. If not found, try to find the first character on the right, that is in the same node.\n        if (!attrs) {\n          var _node = nodeAfter;\n          while (_node && !attrs) {\n            _node = _node.nextSibling;\n            attrs = getAttrsIfCharacter(_node);\n          }\n        }\n\n        // 6. If not found, selection should retrieve attributes from parent.\n        if (!attrs) {\n          attrs = this._getStoredAttributes();\n        }\n      }\n      return attrs;\n    }\n\n    // Fixes a selection range after it ends up in graveyard root.\n    //\n    // @private\n    // @param {module:engine/model/liverange~LiveRange} liveRange The range from selection, that ended up in the graveyard root.\n    // @param {module:engine/model/position~Position} removedRangeStart Start position of a range which was removed.\n  }, {\n    key: \"_fixGraveyardSelection\",\n    value: function _fixGraveyardSelection(liveRange, removedRangeStart) {\n      // The start of the removed range is the closest position to the `liveRange` - the original selection range.\n      // This is a good candidate for a fixed selection range.\n      var positionCandidate = removedRangeStart.clone();\n\n      // Find a range that is a correct selection range and is closest to the start of removed range.\n      var selectionRange = this._model.schema.getNearestSelectionRange(positionCandidate);\n\n      // Remove the old selection range before preparing and adding new selection range. This order is important,\n      // because new range, in some cases, may intersect with old range (it depends on `getNearestSelectionRange()` result).\n      var index = this._ranges.indexOf(liveRange);\n      this._ranges.splice(index, 1);\n      liveRange.detach();\n\n      // If nearest valid selection range has been found - add it in the place of old range.\n      if (selectionRange) {\n        // Check the range, convert it to live range, bind events, etc.\n        var newRange = this._prepareRange(selectionRange);\n\n        // Add new range in the place of old range.\n        this._ranges.splice(index, 0, newRange);\n      }\n      // If nearest valid selection range cannot be found - just removing the old range is fine.\n    }\n  }]);\n}(Selection); // Helper function for {@link module:engine/model/liveselection~LiveSelection#_updateAttributes}.\n//\n// It takes model item, checks whether it is a text node (or text proxy) and, if so, returns it's attributes. If not, returns `null`.\n//\n// @param {module:engine/model/item~Item|null}  node\n// @returns {Boolean}\nfunction getAttrsIfCharacter(node) {\n  if (node instanceof TextProxy || node instanceof Text) {\n    return node.getAttributes();\n  }\n  return null;\n}\n\n// Removes selection attributes from element which is not empty anymore.\n//\n// @private\n// @param {module:engine/model/model~Model} model\n// @param {module:engine/model/batch~Batch} batch\nfunction clearAttributesStoredInElement(model, batch) {\n  var differ = model.document.differ;\n  var _iterator1 = _createForOfIteratorHelper(differ.getChanges()),\n    _step1;\n  try {\n    var _loop = function _loop() {\n      var entry = _step1.value;\n      if (entry.type != 'insert') {\n        return 1; // continue\n      }\n      var changeParent = entry.position.parent;\n      var isNoLongerEmpty = entry.length === changeParent.maxOffset;\n      if (isNoLongerEmpty) {\n        model.enqueueChange(batch, function (writer) {\n          var storedAttributes = Array.from(changeParent.getAttributeKeys()).filter(function (key) {\n            return key.startsWith(storePrefix);\n          });\n          var _iterator10 = _createForOfIteratorHelper(storedAttributes),\n            _step10;\n          try {\n            for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n              var key = _step10.value;\n              writer.removeAttribute(key, changeParent);\n            }\n          } catch (err) {\n            _iterator10.e(err);\n          } finally {\n            _iterator10.f();\n          }\n        });\n      }\n    };\n    for (_iterator1.s(); !(_step1 = _iterator1.n()).done;) {\n      if (_loop()) continue;\n    }\n  } catch (err) {\n    _iterator1.e(err);\n  } finally {\n    _iterator1.f();\n  }\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/element\n */\n\nimport Node from './node';\nimport NodeList from './nodelist';\nimport Text from './text';\nimport TextProxy from './textproxy';\nimport isIterable from '@ckeditor/ckeditor5-utils/src/isiterable';\n\n/**\n * Model element. Type of {@link module:engine/model/node~Node node} that has a {@link module:engine/model/element~Element#name name} and\n * {@link module:engine/model/element~Element#getChildren child nodes}.\n *\n * **Important**: see {@link module:engine/model/node~Node} to read about restrictions using `Element` and `Node` API.\n *\n * @extends module:engine/model/node~Node\n */\nvar Element = /*#__PURE__*/function (_Node) {\n  /**\n   * Creates a model element.\n   *\n   * **Note:** Constructor of this class shouldn't be used directly in the code.\n   * Use the {@link module:engine/model/writer~Writer#createElement} method instead.\n   *\n   * @protected\n   * @param {String} name Element's name.\n   * @param {Object} [attrs] Element's attributes. See {@link module:utils/tomap~toMap} for a list of accepted values.\n   * @param {module:engine/model/node~Node|Iterable.<module:engine/model/node~Node>} [children]\n   * One or more nodes to be inserted as children of created element.\n   */\n  function Element(name, attrs, children) {\n    var _this;\n    _classCallCheck(this, Element);\n    _this = _callSuper(this, Element, [attrs]);\n\n    /**\n     * Element name.\n     *\n     * @readonly\n     * @member {String} module:engine/model/element~Element#name\n     */\n    _this.name = name;\n\n    /**\n     * List of children nodes.\n     *\n     * @private\n     * @member {module:engine/model/nodelist~NodeList} module:engine/model/element~Element#_children\n     */\n    _this._children = new NodeList();\n    if (children) {\n      _this._insertChild(0, children);\n    }\n    return _this;\n  }\n\n  /**\n   * Number of this element's children.\n   *\n   * @readonly\n   * @type {Number}\n   */\n  _inherits(Element, _Node);\n  return _createClass(Element, [{\n    key: \"childCount\",\n    get: function get() {\n      return this._children.length;\n    }\n\n    /**\n     * Sum of {@link module:engine/model/node~Node#offsetSize offset sizes} of all of this element's children.\n     *\n     * @readonly\n     * @type {Number}\n     */\n  }, {\n    key: \"maxOffset\",\n    get: function get() {\n      return this._children.maxOffset;\n    }\n\n    /**\n     * Is `true` if there are no nodes inside this element, `false` otherwise.\n     *\n     * @readonly\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isEmpty\",\n    get: function get() {\n      return this.childCount === 0;\n    }\n\n    /**\n     * Checks whether this object is of the given.\n     *\n     *\t\telement.is( 'element' ); // -> true\n     *\t\telement.is( 'node' ); // -> true\n     *\t\telement.is( 'model:element' ); // -> true\n     *\t\telement.is( 'model:node' ); // -> true\n     *\n     *\t\telement.is( 'view:element' ); // -> false\n     *\t\telement.is( 'documentSelection' ); // -> false\n     *\n     * Assuming that the object being checked is an element, you can also check its\n     * {@link module:engine/model/element~Element#name name}:\n     *\n     *\t\telement.is( 'image' ); // -> true if this is an <image> element\n     *\t\telement.is( 'element', 'image' ); // -> same as above\n     *\t\ttext.is( 'image' ); -> false\n     *\n     * {@link module:engine/model/node~Node#is Check the entire list of model objects} which implement the `is()` method.\n     *\n     * @param {String} type Type to check when `name` parameter is present.\n     * Otherwise, it acts like the `name` parameter.\n     * @param {String} [name] Element name.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var cutType = type.replace(/^model:/, '');\n      if (!name) {\n        return cutType == 'element' || cutType == this.name || _superPropGet(Element, \"is\", this, 3)([type]);\n      } else {\n        return cutType == 'element' && name == this.name;\n      }\n    }\n\n    /**\n     * Gets the child at the given index.\n     *\n     * @param {Number} index Index of child.\n     * @returns {module:engine/model/node~Node} Child node.\n     */\n  }, {\n    key: \"getChild\",\n    value: function getChild(index) {\n      return this._children.getNode(index);\n    }\n\n    /**\n     * Returns an iterator that iterates over all of this element's children.\n     *\n     * @returns {Iterable.<module:engine/model/node~Node>}\n     */\n  }, {\n    key: \"getChildren\",\n    value: function getChildren() {\n      return this._children[Symbol.iterator]();\n    }\n\n    /**\n     * Returns an index of the given child node. Returns `null` if given node is not a child of this element.\n     *\n     * @param {module:engine/model/node~Node} node Child node to look for.\n     * @returns {Number} Child node's index in this element.\n     */\n  }, {\n    key: \"getChildIndex\",\n    value: function getChildIndex(node) {\n      return this._children.getNodeIndex(node);\n    }\n\n    /**\n     * Returns the starting offset of given child. Starting offset is equal to the sum of\n     * {@link module:engine/model/node~Node#offsetSize offset sizes} of all node's siblings that are before it. Returns `null` if\n     * given node is not a child of this element.\n     *\n     * @param {module:engine/model/node~Node} node Child node to look for.\n     * @returns {Number} Child node's starting offset.\n     */\n  }, {\n    key: \"getChildStartOffset\",\n    value: function getChildStartOffset(node) {\n      return this._children.getNodeStartOffset(node);\n    }\n\n    /**\n     * Returns index of a node that occupies given offset. If given offset is too low, returns `0`. If given offset is\n     * too high, returns {@link module:engine/model/element~Element#getChildIndex index after last child}.\n     *\n     *\t\tconst textNode = new Text( 'foo' );\n     *\t\tconst pElement = new Element( 'p' );\n     *\t\tconst divElement = new Element( [ textNode, pElement ] );\n     *\t\tdivElement.offsetToIndex( -1 ); // Returns 0, because offset is too low.\n     *\t\tdivElement.offsetToIndex( 0 ); // Returns 0, because offset 0 is taken by `textNode` which is at index 0.\n     *\t\tdivElement.offsetToIndex( 1 ); // Returns 0, because `textNode` has `offsetSize` equal to 3, so it occupies offset 1 too.\n     *\t\tdivElement.offsetToIndex( 2 ); // Returns 0.\n     *\t\tdivElement.offsetToIndex( 3 ); // Returns 1.\n     *\t\tdivElement.offsetToIndex( 4 ); // Returns 2. There are no nodes at offset 4, so last available index is returned.\n     *\n     * @param {Number} offset Offset to look for.\n     * @returns {Number}\n     */\n  }, {\n    key: \"offsetToIndex\",\n    value: function offsetToIndex(offset) {\n      return this._children.offsetToIndex(offset);\n    }\n\n    /**\n     * Returns a descendant node by its path relative to this element.\n     *\n     *\t\t// <this>a<b>c</b></this>\n     *\t\tthis.getNodeByPath( [ 0 ] );     // -> \"a\"\n     *\t\tthis.getNodeByPath( [ 1 ] );     // -> <b>\n     *\t\tthis.getNodeByPath( [ 1, 0 ] );  // -> \"c\"\n     *\n     * @param {Array.<Number>} relativePath Path of the node to find, relative to this element.\n     * @returns {module:engine/model/node~Node}\n     */\n  }, {\n    key: \"getNodeByPath\",\n    value: function getNodeByPath(relativePath) {\n      var node = this; // eslint-disable-line consistent-this\n      var _iterator = _createForOfIteratorHelper(relativePath),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var index = _step.value;\n          node = node.getChild(node.offsetToIndex(index));\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      return node;\n    }\n\n    /**\n     * Converts `Element` instance to plain object and returns it. Takes care of converting all of this element's children.\n     *\n     * @returns {Object} `Element` instance converted to plain object.\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var json = _superPropGet(Element, \"toJSON\", this, 3)([]);\n      json.name = this.name;\n      if (this._children.length > 0) {\n        json.children = [];\n        var _iterator2 = _createForOfIteratorHelper(this._children),\n          _step2;\n        try {\n          for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n            var node = _step2.value;\n            json.children.push(node.toJSON());\n          }\n        } catch (err) {\n          _iterator2.e(err);\n        } finally {\n          _iterator2.f();\n        }\n      }\n      return json;\n    }\n\n    /**\n     * Creates a copy of this element and returns it. Created element has the same name and attributes as the original element.\n     * If clone is deep, the original element's children are also cloned. If not, then empty element is removed.\n     *\n     * @protected\n     * @param {Boolean} [deep=false] If set to `true` clones element and all its children recursively. When set to `false`,\n     * element will be cloned without any child.\n     */\n  }, {\n    key: \"_clone\",\n    value: function _clone() {\n      var deep = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var children = deep ? Array.from(this._children).map(function (node) {\n        return node._clone(true);\n      }) : null;\n      return new Element(this.name, this.getAttributes(), children);\n    }\n\n    /**\n     * {@link module:engine/model/element~Element#_insertChild Inserts} one or more nodes at the end of this element.\n     *\n     * @see module:engine/model/writer~Writer#append\n     * @protected\n     * @param {module:engine/model/item~Item|Iterable.<module:engine/model/item~Item>} nodes Nodes to be inserted.\n     */\n  }, {\n    key: \"_appendChild\",\n    value: function _appendChild(nodes) {\n      this._insertChild(this.childCount, nodes);\n    }\n\n    /**\n     * Inserts one or more nodes at the given index and sets {@link module:engine/model/node~Node#parent parent} of these nodes\n     * to this element.\n     *\n     * @see module:engine/model/writer~Writer#insert\n     * @protected\n     * @param {Number} index Index at which nodes should be inserted.\n     * @param {module:engine/model/item~Item|Iterable.<module:engine/model/item~Item>} items Items to be inserted.\n     */\n  }, {\n    key: \"_insertChild\",\n    value: function _insertChild(index, items) {\n      var nodes = normalize(items);\n      var _iterator3 = _createForOfIteratorHelper(nodes),\n        _step3;\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var node = _step3.value;\n          // If node that is being added to this element is already inside another element, first remove it from the old parent.\n          if (node.parent !== null) {\n            node._remove();\n          }\n          node.parent = this;\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n      this._children._insertNodes(index, nodes);\n    }\n\n    /**\n     * Removes one or more nodes starting at the given index and sets\n     * {@link module:engine/model/node~Node#parent parent} of these nodes to `null`.\n     *\n     * @see module:engine/model/writer~Writer#remove\n     * @protected\n     * @param {Number} index Index of the first node to remove.\n     * @param {Number} [howMany=1] Number of nodes to remove.\n     * @returns {Array.<module:engine/model/node~Node>} Array containing removed nodes.\n     */\n  }, {\n    key: \"_removeChildren\",\n    value: function _removeChildren(index) {\n      var howMany = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      var nodes = this._children._removeNodes(index, howMany);\n      var _iterator4 = _createForOfIteratorHelper(nodes),\n        _step4;\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var node = _step4.value;\n          node.parent = null;\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n      return nodes;\n    }\n\n    /**\n     * Creates an `Element` instance from given plain object (i.e. parsed JSON string).\n     * Converts `Element` children to proper nodes.\n     *\n     * @param {Object} json Plain object to be converted to `Element`.\n     * @returns {module:engine/model/element~Element} `Element` instance created using given plain object.\n     */\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(json) {\n      var children = null;\n      if (json.children) {\n        children = [];\n        var _iterator5 = _createForOfIteratorHelper(json.children),\n          _step5;\n        try {\n          for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n            var child = _step5.value;\n            if (child.name) {\n              // If child has name property, it is an Element.\n              children.push(Element.fromJSON(child));\n            } else {\n              // Otherwise, it is a Text node.\n              children.push(Text.fromJSON(child));\n            }\n          }\n        } catch (err) {\n          _iterator5.e(err);\n        } finally {\n          _iterator5.f();\n        }\n      }\n      return new Element(json.name, json.attributes, children);\n    }\n  }]);\n}(Node); // Converts strings to Text and non-iterables to arrays.\n//\n// @param {String|module:engine/model/item~Item|Iterable.<String|module:engine/model/item~Item>}\n// @returns {Iterable.<module:engine/model/node~Node>}\nexport { Element as default };\nfunction normalize(nodes) {\n  // Separate condition because string is iterable.\n  if (typeof nodes == 'string') {\n    return [new Text(nodes)];\n  }\n  if (!isIterable(nodes)) {\n    nodes = [nodes];\n  }\n\n  // Array.from to enable .map() on non-arrays.\n  return Array.from(nodes).map(function (node) {\n    if (typeof node == 'string') {\n      return new Text(node);\n    }\n    if (node instanceof TextProxy) {\n      return new Text(node.data, node.getAttributes());\n    }\n    return node;\n  });\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/history\n */\n/**\n * `History` keeps the track of all the operations applied to the {@link module:engine/model/document~Document document}.\n */\nvar History = /*#__PURE__*/function () {\n  /**\n   * Creates an empty History instance.\n   */\n  function History() {\n    _classCallCheck(this, History);\n    /**\n     * Operations added to the history.\n     *\n     * @protected\n     * @member {Array.<module:engine/model/operation/operation~Operation>} module:engine/model/history~History#_operations\n     */\n    this._operations = [];\n\n    /**\n     * Holds an information which {@link module:engine/model/operation/operation~Operation operation} undoes which\n     * {@link module:engine/model/operation/operation~Operation operation}.\n     *\n     * Keys of the map are \"undoing operations\", that is operations that undone some other operations. For each key, the\n     * value is an operation that has been undone by the \"undoing operation\".\n     *\n     * @private\n     * @member {Map} module:engine/model/history~History#_undoPairs\n     */\n    this._undoPairs = new Map();\n\n    /**\n     * Holds all undone operations.\n     *\n     * @private\n     * @member {Set.<module:engine/model/operation/operation~Operation>} module:engine/model/history~History#_undoneOperations\n     */\n    this._undoneOperations = new Set();\n  }\n\n  /**\n   * Adds an operation to the history.\n   *\n   * @param {module:engine/model/operation/operation~Operation} operation Operation to add.\n   */\n  return _createClass(History, [{\n    key: \"addOperation\",\n    value: function addOperation(operation) {\n      if (this._operations.includes(operation)) {\n        return;\n      }\n      this._operations.push(operation);\n    }\n\n    /**\n     * Returns operations added to the history.\n     *\n     * @param {Number} [from=0] Base version from which operations should be returned (inclusive). Defaults to `0`, which means\n     * that operations from the first one will be returned.\n     * @param {Number} [to=Number.POSITIVE_INFINITY] Base version up to which operations should be returned (exclusive).\n     * Defaults to `Number.POSITIVE_INFINITY` which means that operations up to the last one will be returned.\n     * @returns {Iterable.<module:engine/model/operation/operation~Operation>} Operations added to the history.\n     */\n  }, {\n    key: \"getOperations\",\n    value: function getOperations() {\n      var from = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var to = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.POSITIVE_INFINITY;\n      if (from < 0) {\n        return [];\n      }\n      return this._operations.slice(from, to);\n    }\n\n    /**\n     * Returns operation from the history that bases on given `baseVersion`.\n     *\n     * @param {Number} baseVersion Base version of the operation to get.\n     * @returns {module:engine/model/operation/operation~Operation|null} Operation with given base version or `null` if\n     * there is no such operation in history.\n     */\n  }, {\n    key: \"getOperation\",\n    value: function getOperation(baseVersion) {\n      return this._operations[baseVersion];\n    }\n\n    /**\n     * Marks in history that one operation is an operation that is undoing the other operation. By marking operation this way,\n     * history is keeping more context information about operations, which helps in operational transformation.\n     *\n     * @param {module:engine/model/operation/operation~Operation} undoneOperation Operation which is undone by `undoingOperation`.\n     * @param {module:engine/model/operation/operation~Operation} undoingOperation Operation which undoes `undoneOperation`.\n     */\n  }, {\n    key: \"setOperationAsUndone\",\n    value: function setOperationAsUndone(undoneOperation, undoingOperation) {\n      this._undoPairs.set(undoingOperation, undoneOperation);\n      this._undoneOperations.add(undoneOperation);\n    }\n\n    /**\n     * Checks whether given `operation` is undoing any other operation.\n     *\n     * @param {module:engine/model/operation/operation~Operation} operation Operation to check.\n     * @returns {Boolean} `true` if given `operation` is undoing any other operation, `false` otherwise.\n     */\n  }, {\n    key: \"isUndoingOperation\",\n    value: function isUndoingOperation(operation) {\n      return this._undoPairs.has(operation);\n    }\n\n    /**\n     * Checks whether given `operation` has been undone by any other operation.\n     *\n     * @param {module:engine/model/operation/operation~Operation} operation Operation to check.\n     * @returns {Boolean} `true` if given `operation` has been undone any other operation, `false` otherwise.\n     */\n  }, {\n    key: \"isUndoneOperation\",\n    value: function isUndoneOperation(operation) {\n      return this._undoneOperations.has(operation);\n    }\n\n    /**\n     * For given `undoingOperation`, returns the operation which has been undone by it.\n     *\n     * @param {module:engine/model/operation/operation~Operation} undoingOperation\n     * @returns {module:engine/model/operation/operation~Operation|undefined} Operation that has been undone by given\n     * `undoingOperation` or `undefined` if given `undoingOperation` is not undoing any other operation.\n     */\n  }, {\n    key: \"getUndoneOperation\",\n    value: function getUndoneOperation(undoingOperation) {\n      return this._undoPairs.get(undoingOperation);\n    }\n  }]);\n}();\nexport { History as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.slice.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/liveposition\n */\n\nimport Position from './position';\nimport EmitterMixin from '@ckeditor/ckeditor5-utils/src/emittermixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * `LivePosition` is a type of {@link module:engine/model/position~Position Position}\n * that updates itself as {@link module:engine/model/document~Document document}\n * is changed through operations. It may be used as a bookmark.\n *\n * **Note:** Contrary to {@link module:engine/model/position~Position}, `LivePosition` works only in roots that are\n * {@link module:engine/model/rootelement~RootElement}.\n * If {@link module:engine/model/documentfragment~DocumentFragment} is passed, error will be thrown.\n *\n * **Note:** Be very careful when dealing with `LivePosition`. Each `LivePosition` instance bind events that might\n * have to be unbound.\n * Use {@link module:engine/model/liveposition~LivePosition#detach} whenever you don't need `LivePosition` anymore.\n *\n * @extends module:engine/model/position~Position\n */\nvar LivePosition = /*#__PURE__*/function (_Position) {\n  /**\n   * Creates a live position.\n   *\n   * @see module:engine/model/position~Position\n   * @param {module:engine/model/rootelement~RootElement} root\n   * @param {Array.<Number>} path\n   * @param {module:engine/model/position~PositionStickiness} [stickiness]\n   */\n  function LivePosition(root, path) {\n    var _this;\n    var stickiness = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'toNone';\n    _classCallCheck(this, LivePosition);\n    _this = _callSuper(this, LivePosition, [root, path, stickiness]);\n    if (!_this.root.is('rootElement')) {\n      /**\n       * LivePosition's root has to be an instance of RootElement.\n       *\n       * @error liveposition-root-not-rootelement\n       */\n      throw new CKEditorError('model-liveposition-root-not-rootelement: LivePosition\\'s root has to be an instance of RootElement.', root);\n    }\n    bindWithDocument.call(_this);\n    return _this;\n  }\n\n  /**\n   * Unbinds all events previously bound by `LivePosition`. Use it whenever you don't need `LivePosition` instance\n   * anymore (i.e. when leaving scope in which it was declared or before re-assigning variable that was\n   * referring to it).\n   */\n  _inherits(LivePosition, _Position);\n  return _createClass(LivePosition, [{\n    key: \"detach\",\n    value: function detach() {\n      this.stopListening();\n    }\n\n    /**\n     * Checks whether this object is of the given.\n     *\n     *\t\tlivePosition.is( 'position' ); // -> true\n     *\t\tlivePosition.is( 'model:position' ); // -> true\n     *\t\tlivePosition.is( 'liveposition' ); // -> true\n     *\t\tlivePosition.is( 'model:livePosition' ); // -> true\n     *\n     *\t\tlivePosition.is( 'view:position' ); // -> false\n     *\t\tlivePosition.is( 'documentSelection' ); // -> false\n     *\n     * {@link module:engine/model/node~Node#is Check the entire list of model objects} which implement the `is()` method.\n     *\n     * @param {String} type\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'livePosition' || type == 'model:livePosition' || _superPropGet(LivePosition, \"is\", this, 3)([type]);\n    }\n\n    /**\n     * Creates a {@link module:engine/model/position~Position position instance}, which is equal to this live position.\n     *\n     * @returns {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"toPosition\",\n    value: function toPosition() {\n      return new Position(this.root, this.path.slice(), this.stickiness);\n    }\n\n    /**\n     * Creates a `LivePosition` instance that is equal to position.\n     *\n     * @param {module:engine/model/position~Position} position\n     * @param {module:engine/model/position~PositionStickiness} [stickiness]\n     * @returns {module:engine/model/position~Position}\n     */\n  }], [{\n    key: \"fromPosition\",\n    value: function fromPosition(position, stickiness) {\n      return new this(position.root, position.path.slice(), stickiness ? stickiness : position.stickiness);\n    }\n\n    /**\n     * @static\n     * @protected\n     * @method module:engine/model/liveposition~LivePosition._createAfter\n     * @see module:engine/model/position~Position._createAfter\n     * @param {module:engine/model/node~Node} node\n     * @param {module:engine/model/position~PositionStickiness} [stickiness='toNone']\n     * @returns {module:engine/model/liveposition~LivePosition}\n     */\n\n    /**\n     * @static\n     * @protected\n     * @method module:engine/model/liveposition~LivePosition._createBefore\n     * @see module:engine/model/position~Position._createBefore\n     * @param {module:engine/model/node~Node} node\n     * @param {module:engine/model/position~PositionStickiness} [stickiness='toNone']\n     * @returns {module:engine/model/liveposition~LivePosition}\n     */\n\n    /**\n     * @static\n     * @protected\n     * @method module:engine/model/liveposition~LivePosition._createAt\n     * @see module:engine/model/position~Position._createAt\n     * @param {module:engine/model/item~Item|module:engine/model/position~Position} itemOrPosition\n     * @param {Number|'end'|'before'|'after'} [offset]\n     * @param {module:engine/model/position~PositionStickiness} [stickiness='toNone']\n     * @returns {module:engine/model/liveposition~LivePosition}\n     */\n\n    /**\n     * Fired when `LivePosition` instance is changed due to changes on {@link module:engine/model/document~Document}.\n     *\n     * @event module:engine/model/liveposition~LivePosition#change\n     * @param {module:engine/model/position~Position} oldPosition Position equal to this live position before it got changed.\n     */\n  }]);\n}(Position); // Binds this `LivePosition` to the {@link module:engine/model/document~Document document} that owns\n// this position's {@link module:engine/model/position~Position#root root}.\n//\n// @private\nexport { LivePosition as default };\nfunction bindWithDocument() {\n  var _this2 = this;\n  this.listenTo(this.root.document.model, 'applyOperation', function (event, args) {\n    var operation = args[0];\n    if (!operation.isDocumentOperation) {\n      return;\n    }\n    transform.call(_this2, operation);\n  }, {\n    priority: 'low'\n  });\n}\n\n// Updates this position accordingly to the updates applied to the model. Bases on change events.\n//\n// @private\n// @param {module:engine/model/operation/operation~Operation} operation Executed operation.\nfunction transform(operation) {\n  var result = this.getTransformedByOperation(operation);\n  if (!this.isEqual(result)) {\n    var oldPosition = this.toPosition();\n    this.path = result.path;\n    this.root = result.root;\n    this.fire('change', oldPosition);\n  }\n}\nmix(LivePosition, EmitterMixin);","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/liverange\n */\n\nimport Range from './range';\nimport EmitterMixin from '@ckeditor/ckeditor5-utils/src/emittermixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\n\n/**\n * `LiveRange` is a type of {@link module:engine/model/range~Range Range}\n * that updates itself as {@link module:engine/model/document~Document document}\n * is changed through operations. It may be used as a bookmark.\n *\n * **Note:** Be very careful when dealing with `LiveRange`. Each `LiveRange` instance bind events that might\n * have to be unbound. Use {@link module:engine/model/liverange~LiveRange#detach detach} whenever you don't need `LiveRange` anymore.\n */\nvar LiveRange = /*#__PURE__*/function (_Range) {\n  /**\n   * Creates a live range.\n   *\n   * @see module:engine/model/range~Range\n   */\n  function LiveRange(start, end) {\n    var _this;\n    _classCallCheck(this, LiveRange);\n    _this = _callSuper(this, LiveRange, [start, end]);\n    bindWithDocument.call(_this);\n    return _this;\n  }\n\n  /**\n   * Unbinds all events previously bound by `LiveRange`. Use it whenever you don't need `LiveRange` instance\n   * anymore (i.e. when leaving scope in which it was declared or before re-assigning variable that was\n   * referring to it).\n   */\n  _inherits(LiveRange, _Range);\n  return _createClass(LiveRange, [{\n    key: \"detach\",\n    value: function detach() {\n      this.stopListening();\n    }\n\n    /**\n     * Checks whether this object is of the given.\n     *\n     *\t\tliveRange.is( 'range' ); // -> true\n     *\t\tliveRange.is( 'model:range' ); // -> true\n     *\t\tliveRange.is( 'liveRange' ); // -> true\n     *\t\tliveRange.is( 'model:liveRange' ); // -> true\n     *\n     *\t\tliveRange.is( 'view:range' ); // -> false\n     *\t\tliveRange.is( 'documentSelection' ); // -> false\n     *\n     * {@link module:engine/model/node~Node#is Check the entire list of model objects} which implement the `is()` method.\n     *\n     * @param {String} type\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'liveRange' || type == 'model:liveRange' || _superPropGet(LiveRange, \"is\", this, 3)([type]);\n    }\n\n    /**\n     * Creates a {@link module:engine/model/range~Range range instance} that is equal to this live range.\n     *\n     * @returns {module:engine/model/range~Range}\n     */\n  }, {\n    key: \"toRange\",\n    value: function toRange() {\n      return new Range(this.start, this.end);\n    }\n\n    /**\n     * Creates a `LiveRange` instance that is equal to the given range.\n     *\n     * @param {module:engine/model/range~Range} range\n     * @returns {module:engine/model/liverange~LiveRange}\n     */\n  }], [{\n    key: \"fromRange\",\n    value: function fromRange(range) {\n      return new LiveRange(range.start, range.end);\n    }\n\n    /**\n     * @see module:engine/model/range~Range._createIn\n     * @static\n     * @protected\n     * @method module:engine/model/liverange~LiveRange._createIn\n     * @param {module:engine/model/element~Element} element\n     * @returns {module:engine/model/liverange~LiveRange}\n     */\n\n    /**\n     * @see module:engine/model/range~Range._createOn\n     * @static\n     * @protected\n     * @method module:engine/model/liverange~LiveRange._createOn\n     * @param {module:engine/model/element~Element} element\n     * @returns {module:engine/model/liverange~LiveRange}\n     */\n\n    /**\n     * @see module:engine/model/range~Range._createFromPositionAndShift\n     * @static\n     * @protected\n     * @method module:engine/model/liverange~LiveRange._createFromPositionAndShift\n     * @param {module:engine/model/position~Position} position\n     * @param {Number} shift\n     * @returns {module:engine/model/liverange~LiveRange}\n     */\n\n    /**\n     * Fired when `LiveRange` instance boundaries have changed due to changes in the\n     * {@link module:engine/model/document~Document document}.\n     *\n     * @event change:range\n     * @param {module:engine/model/range~Range} oldRange Range with start and end position equal to start and end position of this live\n     * range before it got changed.\n     * @param {Object} data Object with additional information about the change.\n     * @param {module:engine/model/position~Position|null} data.deletionPosition Source position for remove and merge changes.\n     * Available if the range was moved to the graveyard root, `null` otherwise.\n     */\n\n    /**\n     * Fired when `LiveRange` instance boundaries have not changed after a change in {@link module:engine/model/document~Document document}\n     * but the change took place inside the range, effectively changing its content.\n     *\n     * @event change:content\n     * @param {module:engine/model/range~Range} range Range with start and end position equal to start and end position of\n     * change range.\n     * @param {Object} data Object with additional information about the change.\n     * @param {null} data.deletionPosition Due to the nature of this event, this property is always set to `null`. It is passed\n     * for compatibility with the {@link module:engine/model/liverange~LiveRange#event:change:range} event.\n     */\n  }]);\n}(Range); // Binds this `LiveRange` to the {@link module:engine/model/document~Document document}\n// that owns this range's {@link module:engine/model/range~Range#root root}.\n//\n// @private\nexport { LiveRange as default };\nfunction bindWithDocument() {\n  var _this2 = this;\n  this.listenTo(this.root.document.model, 'applyOperation', function (event, args) {\n    var operation = args[0];\n    if (!operation.isDocumentOperation) {\n      return;\n    }\n    transform.call(_this2, operation);\n  }, {\n    priority: 'low'\n  });\n}\n\n// Updates this range accordingly to the updates applied to the model. Bases on change events.\n//\n// @private\n// @param {module:engine/model/operation/operation~Operation} operation Executed operation.\nfunction transform(operation) {\n  // Transform the range by the operation. Join the result ranges if needed.\n  var ranges = this.getTransformedByOperation(operation);\n  var result = Range._createFromRanges(ranges);\n  var boundariesChanged = !result.isEqual(this);\n  var contentChanged = doesOperationChangeRangeContent(this, operation);\n  var deletionPosition = null;\n  if (boundariesChanged) {\n    // If range boundaries have changed, fire `change:range` event.\n    //\n    if (result.root.rootName == '$graveyard') {\n      // If the range was moved to the graveyard root, set `deletionPosition`.\n      if (operation.type == 'remove') {\n        deletionPosition = operation.sourcePosition;\n      } else {\n        // Merge operation.\n        deletionPosition = operation.deletionPosition;\n      }\n    }\n    var oldRange = this.toRange();\n    this.start = result.start;\n    this.end = result.end;\n    this.fire('change:range', oldRange, {\n      deletionPosition: deletionPosition\n    });\n  } else if (contentChanged) {\n    // If range boundaries have not changed, but there was change inside the range, fire `change:content` event.\n    this.fire('change:content', this.toRange(), {\n      deletionPosition: deletionPosition\n    });\n  }\n}\n\n// Checks whether given operation changes something inside the range (even if it does not change boundaries).\n//\n// @private\n// @param {module:engine/model/range~Range} range Range to check.\n// @param {module:engine/model/operation/operation~Operation} operation Executed operation.\n// @returns {Boolean}\nfunction doesOperationChangeRangeContent(range, operation) {\n  switch (operation.type) {\n    case 'insert':\n      return range.containsPosition(operation.position);\n    case 'move':\n    case 'remove':\n    case 'reinsert':\n    case 'merge':\n      return range.containsPosition(operation.sourcePosition) || range.start.isEqual(operation.sourcePosition) || range.containsPosition(operation.targetPosition);\n    case 'split':\n      return range.containsPosition(operation.splitPosition) || range.containsPosition(operation.insertionPosition);\n  }\n  return false;\n}\nmix(LiveRange, EmitterMixin);","import _regenerator from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regenerator.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.starts-with.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/markercollection\n */\n\nimport LiveRange from './liverange';\nimport EmitterMixin from '@ckeditor/ckeditor5-utils/src/emittermixin';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\n\n/**\n * The collection of all {@link module:engine/model/markercollection~Marker markers} attached to the document.\n * It lets you {@link module:engine/model/markercollection~MarkerCollection#get get} markers or track them using\n * {@link module:engine/model/markercollection~MarkerCollection#event:update} event.\n *\n * To create, change or remove makers use {@link module:engine/model/writer~Writer model writers'} methods:\n * {@link module:engine/model/writer~Writer#addMarker} or {@link module:engine/model/writer~Writer#removeMarker}. Since\n * the writer is the only proper way to change the data model it is not possible to change markers directly using this\n * collection. All markers created by the writer will be automatically added to this collection.\n *\n * By default there is one marker collection available as {@link module:engine/model/model~Model#markers model property}.\n *\n * @see module:engine/model/markercollection~Marker\n */\nvar MarkerCollection = /*#__PURE__*/function () {\n  /**\n   * Creates a markers collection.\n   */\n  function MarkerCollection() {\n    _classCallCheck(this, MarkerCollection);\n    /**\n     * Stores {@link ~Marker markers} added to the collection.\n     *\n     * @private\n     * @member {Map} #_markers\n     */\n    this._markers = new Map();\n  }\n\n  /**\n   * Iterable interface.\n   *\n   * Iterates over all {@link ~Marker markers} added to the collection.\n   *\n   * @returns {Iterable}\n   */\n  return _createClass(MarkerCollection, [{\n    key: Symbol.iterator,\n    value: function value() {\n      return this._markers.values();\n    }\n\n    /**\n     * Checks if marker with given `markerName` is in the collection.\n     *\n     * @param {String} markerName Marker name.\n     * @returns {Boolean} `true` if marker with given `markerName` is in the collection, `false` otherwise.\n     */\n  }, {\n    key: \"has\",\n    value: function has(markerName) {\n      return this._markers.has(markerName);\n    }\n\n    /**\n     * Returns {@link ~Marker marker} with given `markerName`.\n     *\n     * @param {String} markerName Name of marker to get.\n     * @returns {module:engine/model/markercollection~Marker|null} Marker with given name or `null` if such marker was\n     * not added to the collection.\n     */\n  }, {\n    key: \"get\",\n    value: function get(markerName) {\n      return this._markers.get(markerName) || null;\n    }\n\n    /**\n     * Creates and adds a {@link ~Marker marker} to the `MarkerCollection` with given name on given\n     * {@link module:engine/model/range~Range range}.\n     *\n     * If `MarkerCollection` already had a marker with given name (or {@link ~Marker marker} was passed), the marker in\n     * collection is updated and {@link module:engine/model/markercollection~MarkerCollection#event:update} event is fired\n     * but only if there was a change (marker range or {@link module:engine/model/markercollection~Marker#managedUsingOperations}\n     * flag has changed.\n     *\n     * @protected\n     * @fires module:engine/model/markercollection~MarkerCollection#event:update\n     * @param {String|module:engine/model/markercollection~Marker} markerOrName Name of marker to set or marker instance to update.\n     * @param {module:engine/model/range~Range} range Marker range.\n     * @param {Boolean} [managedUsingOperations=false] Specifies whether the marker is managed using operations.\n     * @param {Boolean} [affectsData=false] Specifies whether the marker affects the data produced by the data pipeline\n     * (is persisted in the editor's data).\n     * @returns {module:engine/model/markercollection~Marker} `Marker` instance which was added or updated.\n     */\n  }, {\n    key: \"_set\",\n    value: function _set(markerOrName, range) {\n      var managedUsingOperations = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      var affectsData = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n      var markerName = markerOrName instanceof Marker ? markerOrName.name : markerOrName;\n      var oldMarker = this._markers.get(markerName);\n      if (oldMarker) {\n        var oldRange = oldMarker.getRange();\n        var hasChanged = false;\n        if (!oldRange.isEqual(range)) {\n          oldMarker._attachLiveRange(LiveRange.fromRange(range));\n          hasChanged = true;\n        }\n        if (managedUsingOperations != oldMarker.managedUsingOperations) {\n          oldMarker._managedUsingOperations = managedUsingOperations;\n          hasChanged = true;\n        }\n        if (typeof affectsData === 'boolean' && affectsData != oldMarker.affectsData) {\n          oldMarker._affectsData = affectsData;\n          hasChanged = true;\n        }\n        if (hasChanged) {\n          this.fire('update:' + markerName, oldMarker, oldRange, range);\n        }\n        return oldMarker;\n      }\n      var liveRange = LiveRange.fromRange(range);\n      var marker = new Marker(markerName, liveRange, managedUsingOperations, affectsData);\n      this._markers.set(markerName, marker);\n      this.fire('update:' + markerName, marker, null, range);\n      return marker;\n    }\n\n    /**\n     * Removes given {@link ~Marker marker} or a marker with given name from the `MarkerCollection`.\n     *\n     * @protected\n     * @fires module:engine/model/markercollection~MarkerCollection#event:update\n     * @param {String} markerOrName Marker or name of a marker to remove.\n     * @returns {Boolean} `true` if marker was found and removed, `false` otherwise.\n     */\n  }, {\n    key: \"_remove\",\n    value: function _remove(markerOrName) {\n      var markerName = markerOrName instanceof Marker ? markerOrName.name : markerOrName;\n      var oldMarker = this._markers.get(markerName);\n      if (oldMarker) {\n        this._markers.delete(markerName);\n        this.fire('update:' + markerName, oldMarker, oldMarker.getRange(), null);\n        this._destroyMarker(oldMarker);\n        return true;\n      }\n      return false;\n    }\n\n    /**\n     * Fires an {@link module:engine/model/markercollection~MarkerCollection#event:update} event for the given {@link ~Marker marker}\n     * but does not change the marker. Useful to force {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher downcast\n     * conversion} for the marker.\n     *\n     * @protected\n     * @fires module:engine/model/markercollection~MarkerCollection#event:update\n     * @param {String} markerOrName Marker or name of a marker to refresh.\n     */\n  }, {\n    key: \"_refresh\",\n    value: function _refresh(markerOrName) {\n      var markerName = markerOrName instanceof Marker ? markerOrName.name : markerOrName;\n      var marker = this._markers.get(markerName);\n      if (!marker) {\n        throw new CKEditorError('markercollection-refresh-marker-not-exists: Marker with provided name does not exists.', this);\n      }\n      var range = marker.getRange();\n      this.fire('update:' + markerName, marker, range, range, marker.managedUsingOperations, marker.affectsData);\n    }\n\n    /**\n     * Returns iterator that iterates over all markers, which ranges contain given {@link module:engine/model/position~Position position}.\n     *\n     * @param {module:engine/model/position~Position} position\n     * @returns {Iterable.<module:engine/model/markercollection~Marker>}\n     */\n  }, {\n    key: \"getMarkersAtPosition\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function getMarkersAtPosition(position) {\n      var _iterator, _step, marker, _t;\n      return _regenerator().w(function (_context) {\n        while (1) switch (_context.p = _context.n) {\n          case 0:\n            _iterator = _createForOfIteratorHelper(this);\n            _context.p = 1;\n            _iterator.s();\n          case 2:\n            if ((_step = _iterator.n()).done) {\n              _context.n = 4;\n              break;\n            }\n            marker = _step.value;\n            if (!marker.getRange().containsPosition(position)) {\n              _context.n = 3;\n              break;\n            }\n            _context.n = 3;\n            return marker;\n          case 3:\n            _context.n = 2;\n            break;\n          case 4:\n            _context.n = 6;\n            break;\n          case 5:\n            _context.p = 5;\n            _t = _context.v;\n            _iterator.e(_t);\n          case 6:\n            _context.p = 6;\n            _iterator.f();\n            return _context.f(6);\n          case 7:\n            return _context.a(2);\n        }\n      }, getMarkersAtPosition, this, [[1, 5, 6, 7]]);\n    })\n    /**\n     * Returns iterator that iterates over all markers, which intersects with given {@link module:engine/model/range~Range range}.\n     *\n     * @param {module:engine/model/range~Range} range\n     * @returns {Iterable.<module:engine/model/markercollection~Marker>}\n     */\n  }, {\n    key: \"getMarkersIntersectingRange\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function getMarkersIntersectingRange(range) {\n      var _iterator2, _step2, marker, _t2;\n      return _regenerator().w(function (_context2) {\n        while (1) switch (_context2.p = _context2.n) {\n          case 0:\n            _iterator2 = _createForOfIteratorHelper(this);\n            _context2.p = 1;\n            _iterator2.s();\n          case 2:\n            if ((_step2 = _iterator2.n()).done) {\n              _context2.n = 4;\n              break;\n            }\n            marker = _step2.value;\n            if (!(marker.getRange().getIntersection(range) !== null)) {\n              _context2.n = 3;\n              break;\n            }\n            _context2.n = 3;\n            return marker;\n          case 3:\n            _context2.n = 2;\n            break;\n          case 4:\n            _context2.n = 6;\n            break;\n          case 5:\n            _context2.p = 5;\n            _t2 = _context2.v;\n            _iterator2.e(_t2);\n          case 6:\n            _context2.p = 6;\n            _iterator2.f();\n            return _context2.f(6);\n          case 7:\n            return _context2.a(2);\n        }\n      }, getMarkersIntersectingRange, this, [[1, 5, 6, 7]]);\n    })\n    /**\n     * Destroys marker collection and all markers inside it.\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _iterator3 = _createForOfIteratorHelper(this._markers.values()),\n        _step3;\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var marker = _step3.value;\n          this._destroyMarker(marker);\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n      this._markers = null;\n      this.stopListening();\n    }\n\n    /**\n     * Iterates over all markers that starts with given `prefix`.\n     *\n     *\t\tconst markerFooA = markersCollection.set( 'foo:a', rangeFooA );\n     *\t\tconst markerFooB = markersCollection.set( 'foo:b', rangeFooB );\n     *\t\tconst markerBarA = markersCollection.set( 'bar:a', rangeBarA );\n     *\t\tconst markerFooBarA = markersCollection.set( 'foobar:a', rangeFooBarA );\n     *\t\tArray.from( markersCollection.getMarkersGroup( 'foo' ) ); // [ markerFooA, markerFooB ]\n     *\t\tArray.from( markersCollection.getMarkersGroup( 'a' ) ); // []\n     *\n     * @param prefix\n     * @returns {Iterable.<module:engine/model/markercollection~Marker>}\n     */\n  }, {\n    key: \"getMarkersGroup\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function getMarkersGroup(prefix) {\n      var _iterator4, _step4, marker, _t3;\n      return _regenerator().w(function (_context3) {\n        while (1) switch (_context3.p = _context3.n) {\n          case 0:\n            _iterator4 = _createForOfIteratorHelper(this._markers.values());\n            _context3.p = 1;\n            _iterator4.s();\n          case 2:\n            if ((_step4 = _iterator4.n()).done) {\n              _context3.n = 4;\n              break;\n            }\n            marker = _step4.value;\n            if (!marker.name.startsWith(prefix + ':')) {\n              _context3.n = 3;\n              break;\n            }\n            _context3.n = 3;\n            return marker;\n          case 3:\n            _context3.n = 2;\n            break;\n          case 4:\n            _context3.n = 6;\n            break;\n          case 5:\n            _context3.p = 5;\n            _t3 = _context3.v;\n            _iterator4.e(_t3);\n          case 6:\n            _context3.p = 6;\n            _iterator4.f();\n            return _context3.f(6);\n          case 7:\n            return _context3.a(2);\n        }\n      }, getMarkersGroup, this, [[1, 5, 6, 7]]);\n    })\n    /**\n     * Destroys the marker.\n     *\n     * @private\n     * @param {module:engine/model/markercollection~Marker} marker Marker to destroy.\n     */\n  }, {\n    key: \"_destroyMarker\",\n    value: function _destroyMarker(marker) {\n      marker.stopListening();\n      marker._detachLiveRange();\n    }\n\n    /**\n     * Fired whenever marker is added, updated or removed from `MarkerCollection`.\n     *\n     * @event update\n     * @param {module:engine/model/markercollection~Marker} marker Updated Marker.\n     * @param {module:engine/model/range~Range|null} oldRange Marker range before the update. When is not defined it\n     * means that marker is just added.\n     * @param {module:engine/model/range~Range|null} newRange Marker range after update. When is not defined it\n     * means that marker is just removed.\n     */\n  }]);\n}();\nexport { MarkerCollection as default };\nmix(MarkerCollection, EmitterMixin);\n\n/**\n * `Marker` is a continuous parts of model (like a range), is named and represent some kind of information about marked\n * part of model document. In contrary to {@link module:engine/model/node~Node nodes}, which are building blocks of\n * model document tree, markers are not stored directly in document tree but in\n * {@link module:engine/model/model~Model#markers model markers' collection}. Still, they are document data, by giving\n * additional meaning to the part of a model document between marker start and marker end.\n *\n * In this sense, markers are similar to adding and converting attributes on nodes. The difference is that attribute is\n * connected with a given node (e.g. a character is bold no matter if it gets moved or content around it changes).\n * Markers on the other hand are continuous ranges and are characterized by their start and end position. This means that\n * any character in the marker is marked by the marker. For example, if a character is moved outside of marker it stops being\n * \"special\" and the marker is shrunk. Similarly, when a character is moved into the marker from other place in document\n * model, it starts being \"special\" and the marker is enlarged.\n *\n * Another upside of markers is that finding marked part of document is fast and easy. Using attributes to mark some nodes\n * and then trying to find that part of document would require traversing whole document tree. Marker gives instant access\n * to the range which it is marking at the moment.\n *\n * Markers are built from a name and a range.\n *\n * Range of the marker is updated automatically when document changes, using\n * {@link module:engine/model/liverange~LiveRange live range} mechanism.\n *\n * Name is used to group and identify markers. Names have to be unique, but markers can be grouped by\n * using common prefixes, separated with `:`, for example: `user:john` or `search:3`. That's useful in term of creating\n * namespaces for custom elements (e.g. comments, highlights). You can use this prefixes in\n * {@link module:engine/model/markercollection~MarkerCollection#event:update} listeners to listen on changes in a group of markers.\n * For instance: `model.markers.on( 'set:user', callback );` will be called whenever any `user:*` markers changes.\n *\n * There are two types of markers.\n *\n * 1. Markers managed directly, without using operations. They are added directly by {@link module:engine/model/writer~Writer}\n * to the {@link module:engine/model/markercollection~MarkerCollection} without any additional mechanism. They can be used\n * as bookmarks or visual markers. They are great for showing results of the find, or select link when the focus is in the input.\n *\n * 1. Markers managed using operations. These markers are also stored in {@link module:engine/model/markercollection~MarkerCollection}\n * but changes in these markers is managed the same way all other changes in the model structure - using operations.\n * Therefore, they are handled in the undo stack and synchronized between clients if the collaboration plugin is enabled.\n * This type of markers is useful for solutions like spell checking or comments.\n *\n * Both type of them should be added / updated by {@link module:engine/model/writer~Writer#addMarker}\n * and removed by {@link module:engine/model/writer~Writer#removeMarker} methods.\n *\n *\t\tmodel.change( ( writer ) => {\n * \t\t\tconst marker = writer.addMarker( name, { range, usingOperation: true } );\n *\n * \t\t\t// ...\n *\n * \t\t\twriter.removeMarker( marker );\n *\t\t} );\n *\n * See {@link module:engine/model/writer~Writer} to find more examples.\n *\n * Since markers need to track change in the document, for efficiency reasons, it is best to create and keep as little\n * markers as possible and remove them as soon as they are not needed anymore.\n *\n * Markers can be downcasted and upcasted.\n *\n * Markers downcast happens on {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:addMarker} and\n * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:removeMarker} events.\n * Use {@link module:engine/conversion/downcasthelpers downcast converters} or attach a custom converter to mentioned events.\n * For {@link module:engine/controller/datacontroller~DataController data pipeline}, marker should be downcasted to an element.\n * Then, it can be upcasted back to a marker. Again, use {@link module:engine/conversion/upcasthelpers upcast converters} or\n * attach a custom converter to {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher#event:element}.\n *\n * `Marker` instances are created and destroyed only by {@link ~MarkerCollection MarkerCollection}.\n */\nvar Marker = /*#__PURE__*/function () {\n  /**\n   * Creates a marker instance.\n   *\n   * @param {String} name Marker name.\n   * @param {module:engine/model/liverange~LiveRange} liveRange Range marked by the marker.\n   * @param {Boolean} managedUsingOperations Specifies whether the marker is managed using operations.\n   * @param {Boolean} affectsData Specifies whether the marker affects the data produced by the data pipeline\n   * (is persisted in the editor's data).\n   */\n  function Marker(name, liveRange, managedUsingOperations, affectsData) {\n    _classCallCheck(this, Marker);\n    /**\n     * Marker's name.\n     *\n     * @readonly\n     * @type {String}\n     */\n    this.name = name;\n\n    /**\n     * Range marked by the marker.\n     *\n     * @protected\n     * @member {module:engine/model/liverange~LiveRange}\n     */\n    this._liveRange = this._attachLiveRange(liveRange);\n\n    /**\n     * Flag indicates if the marker is managed using operations or not.\n     *\n     * @private\n     * @member {Boolean}\n     */\n    this._managedUsingOperations = managedUsingOperations;\n\n    /**\n     * Specifies whether the marker affects the data produced by the data pipeline\n     * (is persisted in the editor's data).\n     *\n     * @private\n     * @member {Boolean}\n     */\n    this._affectsData = affectsData;\n  }\n\n  /**\n   * A value indicating if the marker is managed using operations.\n   * See {@link ~Marker marker class description} to learn more about marker types.\n   * See {@link module:engine/model/writer~Writer#addMarker}.\n   *\n   * @returns {Boolean}\n   */\n  return _createClass(Marker, [{\n    key: \"managedUsingOperations\",\n    get: function get() {\n      if (!this._liveRange) {\n        throw new CKEditorError('marker-destroyed: Cannot use a destroyed marker instance.', this);\n      }\n      return this._managedUsingOperations;\n    }\n\n    /**\n     * A value indicating if the marker changes the data.\n     *\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"affectsData\",\n    get: function get() {\n      if (!this._liveRange) {\n        throw new CKEditorError('marker-destroyed: Cannot use a destroyed marker instance.', this);\n      }\n      return this._affectsData;\n    }\n\n    /**\n     * Returns current marker start position.\n     *\n     * @returns {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"getStart\",\n    value: function getStart() {\n      if (!this._liveRange) {\n        throw new CKEditorError('marker-destroyed: Cannot use a destroyed marker instance.', this);\n      }\n      return this._liveRange.start.clone();\n    }\n\n    /**\n     * Returns current marker end position.\n     *\n     * @returns {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"getEnd\",\n    value: function getEnd() {\n      if (!this._liveRange) {\n        throw new CKEditorError('marker-destroyed: Cannot use a destroyed marker instance.', this);\n      }\n      return this._liveRange.end.clone();\n    }\n\n    /**\n     * Returns a range that represents the current state of the marker.\n     *\n     * Keep in mind that returned value is a {@link module:engine/model/range~Range Range}, not a\n     * {@link module:engine/model/liverange~LiveRange LiveRange}. This means that it is up-to-date and relevant only\n     * until next model document change. Do not store values returned by this method. Instead, store {@link ~Marker#name}\n     * and get `Marker` instance from {@link module:engine/model/markercollection~MarkerCollection MarkerCollection} every\n     * time there is a need to read marker properties. This will guarantee that the marker has not been removed and\n     * that it's data is up-to-date.\n     *\n     * @returns {module:engine/model/range~Range}\n     */\n  }, {\n    key: \"getRange\",\n    value: function getRange() {\n      if (!this._liveRange) {\n        throw new CKEditorError('marker-destroyed: Cannot use a destroyed marker instance.', this);\n      }\n      return this._liveRange.toRange();\n    }\n\n    /**\n     * Checks whether this object is of the given.\n     *\n     *\t\tmarker.is( 'marker' ); // -> true\n     *\t\tmarker.is( 'model:marker' ); // -> true\n     *\n     *\t\tmarker.is( 'view:element' ); // -> false\n     *\t\tmarker.is( 'documentSelection' ); // -> false\n     *\n     * {@link module:engine/model/node~Node#is Check the entire list of model objects} which implement the `is()` method.\n     *\n     * @param {String} type\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'marker' || type == 'model:marker';\n    }\n\n    /**\n     * Binds new live range to the marker and detach the old one if is attached.\n     *\n     * @protected\n     * @param {module:engine/model/liverange~LiveRange} liveRange Live range to attach\n     * @returns {module:engine/model/liverange~LiveRange} Attached live range.\n     */\n  }, {\n    key: \"_attachLiveRange\",\n    value: function _attachLiveRange(liveRange) {\n      if (this._liveRange) {\n        this._detachLiveRange();\n      }\n\n      // Delegating does not work with namespaces. Alternatively, we could delegate all events (using `*`).\n      liveRange.delegate('change:range').to(this);\n      liveRange.delegate('change:content').to(this);\n      this._liveRange = liveRange;\n      return liveRange;\n    }\n\n    /**\n     * Unbinds and destroys currently attached live range.\n     *\n     * @protected\n     */\n  }, {\n    key: \"_detachLiveRange\",\n    value: function _detachLiveRange() {\n      this._liveRange.stopDelegating('change:range', this);\n      this._liveRange.stopDelegating('change:content', this);\n      this._liveRange.detach();\n      this._liveRange = null;\n    }\n\n    /**\n     * Fired whenever {@link ~Marker#_liveRange marker range} is changed due to changes on {@link module:engine/model/document~Document}.\n     * This is a delegated {@link module:engine/model/liverange~LiveRange#event:change:range LiveRange change:range event}.\n     *\n     * When marker is removed from {@link module:engine/model/markercollection~MarkerCollection MarkerCollection},\n     * all event listeners listening to it should be removed. It is best to do it on\n     * {@link module:engine/model/markercollection~MarkerCollection#event:update MarkerCollection update event}.\n     *\n     * @see module:engine/model/liverange~LiveRange#event:change:range\n     * @event change:range\n     * @param {module:engine/model/range~Range} oldRange\n     * @param {Object} data\n     */\n\n    /**\n     * Fired whenever change on {@link module:engine/model/document~Document} is done inside {@link ~Marker#_liveRange marker range}.\n     * This is a delegated {@link module:engine/model/liverange~LiveRange#event:change:content LiveRange change:content event}.\n     *\n     * When marker is removed from {@link module:engine/model/markercollection~MarkerCollection MarkerCollection},\n     * all event listeners listening to it should be removed. It is best to do it on\n     * {@link module:engine/model/markercollection~MarkerCollection#event:update MarkerCollection update event}.\n     *\n     * @see module:engine/model/liverange~LiveRange#event:change:content\n     * @event change:content\n     * @param {module:engine/model/range~Range} oldRange\n     * @param {Object} data\n     */\n  }]);\n}();\nmix(Marker, EmitterMixin);\n\n/**\n * Cannot use a {@link module:engine/model/markercollection~MarkerCollection#destroy destroyed marker} instance.\n *\n * @error marker-destroyed\n */","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.search.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/model\n */\n\nimport Batch from './batch';\nimport Writer from './writer';\nimport Schema from './schema';\nimport Document from './document';\nimport MarkerCollection from './markercollection';\nimport ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport ModelElement from './element';\nimport ModelRange from './range';\nimport ModelPosition from './position';\nimport ModelSelection from './selection';\nimport _insertContent from './utils/insertcontent';\nimport _deleteContent from './utils/deletecontent';\nimport _modifySelection from './utils/modifyselection';\nimport _getSelectedContent from './utils/getselectedcontent';\nimport { injectSelectionPostFixer } from './utils/selection-post-fixer';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * Editor's data model. Read about the model in the\n * {@glink framework/guides/architecture/editing-engine engine architecture guide}.\n *\n * @mixes module:utils/observablemixin~ObservableMixin\n */\nvar Model = /*#__PURE__*/function () {\n  function Model() {\n    var _this = this;\n    _classCallCheck(this, Model);\n    /**\n     * Model's marker collection.\n     *\n     * @readonly\n     * @member {module:engine/model/markercollection~MarkerCollection}\n     */\n    this.markers = new MarkerCollection();\n\n    /**\n     * Model's document.\n     *\n     * @readonly\n     * @member {module:engine/model/document~Document}\n     */\n    this.document = new Document(this);\n\n    /**\n     * Model's schema.\n     *\n     * @readonly\n     * @member {module:engine/model/schema~Schema}\n     */\n    this.schema = new Schema();\n\n    /**\n     * All callbacks added by {@link module:engine/model/model~Model#change} or\n     * {@link module:engine/model/model~Model#enqueueChange} methods waiting to be executed.\n     *\n     * @private\n     * @type {Array.<Function>}\n     */\n    this._pendingChanges = [];\n\n    /**\n     * The last created and currently used writer instance.\n     *\n     * @private\n     * @member {module:engine/model/writer~Writer}\n     */\n    this._currentWriter = null;\n    ['insertContent', 'deleteContent', 'modifySelection', 'getSelectedContent', 'applyOperation'].forEach(function (methodName) {\n      return _this.decorate(methodName);\n    });\n\n    // Adding operation validation with `highest` priority, so it is called before any other feature would like\n    // to do anything with the operation. If the operation has incorrect parameters it should throw on the earliest occasion.\n    this.on('applyOperation', function (evt, args) {\n      var operation = args[0];\n      operation._validate();\n    }, {\n      priority: 'highest'\n    });\n\n    // Register some default abstract entities.\n    this.schema.register('$root', {\n      isLimit: true\n    });\n    this.schema.register('$block', {\n      allowIn: '$root',\n      isBlock: true\n    });\n    this.schema.register('$text', {\n      allowIn: '$block',\n      isInline: true\n    });\n    this.schema.register('$clipboardHolder', {\n      allowContentOf: '$root',\n      isLimit: true\n    });\n    this.schema.extend('$text', {\n      allowIn: '$clipboardHolder'\n    });\n\n    // An element needed by the `upcastElementToMarker` converter.\n    // This element temporarily represents a marker boundary during the conversion process and is removed\n    // at the end of the conversion. `UpcastDispatcher` or at least `Conversion` class looks like a\n    // better place for this registration but both know nothing about `Schema`.\n    this.schema.register('$marker');\n    this.schema.addChildCheck(function (context, childDefinition) {\n      if (childDefinition.name === '$marker') {\n        return true;\n      }\n    });\n    injectSelectionPostFixer(this);\n  }\n\n  /**\n   * The `change()` method is the primary way of changing the model. You should use it to modify all document nodes\n   * (including detached nodes – i.e. nodes not added to the {@link module:engine/model/model~Model#document model document}),\n   * the {@link module:engine/model/document~Document#selection document's selection}, and\n   * {@link module:engine/model/model~Model#markers model markers}.\n   *\n   *\t\tmodel.change( writer => {\n   *\t\t\twriter.insertText( 'foo', paragraph, 'end' );\n   *\t\t} );\n   *\n   * All changes inside the change block use the same {@link module:engine/model/batch~Batch} so they are combined\n   * into a single undo step.\n   *\n   *\t\tmodel.change( writer => {\n   *\t\t\twriter.insertText( 'foo', paragraph, 'end' ); // foo.\n   *\n   *\t\t\tmodel.change( writer => {\n   *\t\t\t\twriter.insertText( 'bar', paragraph, 'end' ); // foobar.\n   *\t\t\t} );\n   *\n   * \t\t\twriter.insertText( 'bom', paragraph, 'end' ); // foobarbom.\n   *\t\t} );\n   *\n   * The callback of the `change()` block is executed synchronously.\n   *\n   * You can also return a value from the change block.\n   *\n   *\t\tconst img = model.change( writer => {\n   *\t\t\treturn writer.createElement( 'img' );\n   *\t\t} );\n   *\n   * @see #enqueueChange\n   * @param {Function} callback Callback function which may modify the model.\n   * @returns {*} Value returned by the callback.\n   */\n  return _createClass(Model, [{\n    key: \"change\",\n    value: function change(callback) {\n      try {\n        if (this._pendingChanges.length === 0) {\n          // If this is the outermost block, create a new batch and start `_runPendingChanges` execution flow.\n          this._pendingChanges.push({\n            batch: new Batch(),\n            callback: callback\n          });\n          return this._runPendingChanges()[0];\n        } else {\n          // If this is not the outermost block, just execute the callback.\n          return callback(this._currentWriter);\n        }\n      } catch (err) {\n        CKEditorError.rethrowUnexpectedError(err, this);\n      }\n    }\n\n    /**\n     * The `enqueueChange()` method performs similar task as the {@link #change `change()` method}, with two major differences.\n     *\n     * First, the callback of `enqueueChange()` is executed when all other enqueued changes are done. It might be executed\n     * immediately if it is not nested in any other change block, but if it is nested in another (enqueue)change block,\n     * it will be delayed and executed after the outermost block.\n     *\n     *\t\tmodel.change( writer => {\n     *\t\t\tconsole.log( 1 );\n     *\n     *\t\t\tmodel.enqueueChange( writer => {\n     *\t\t\t\tconsole.log( 2 );\n     *\t\t\t} );\n     *\n     * \t\t\tconsole.log( 3 );\n     *\t\t} ); // Will log: 1, 3, 2.\n     *\n     * Second, it lets you define the {@link module:engine/model/batch~Batch} into which you want to add your changes.\n     * By default, a new batch is created. In the sample above, `change` and `enqueueChange` blocks use a different\n     * batch (and different {@link module:engine/model/writer~Writer} since each of them operates on the separate batch).\n     *\n     * When using the `enqueueChange()` block you can also add some changes to the batch you used before.\n     *\n     *\t\tmodel.enqueueChange( batch, writer => {\n     *\t\t\twriter.insertText( 'foo', paragraph, 'end' );\n     *\t\t} );\n     *\n     * The batch instance can be obtained from {@link module:engine/model/writer~Writer#batch the writer}.\n     *\n     * @param {module:engine/model/batch~Batch|'transparent'|'default'} batchOrType Batch or batch type should be used in the callback.\n     * If not defined, a new batch will be created.\n     * @param {Function} callback Callback function which may modify the model.\n     */\n  }, {\n    key: \"enqueueChange\",\n    value: function enqueueChange(batchOrType, callback) {\n      try {\n        if (typeof batchOrType === 'string') {\n          batchOrType = new Batch(batchOrType);\n        } else if (typeof batchOrType == 'function') {\n          callback = batchOrType;\n          batchOrType = new Batch();\n        }\n        this._pendingChanges.push({\n          batch: batchOrType,\n          callback: callback\n        });\n        if (this._pendingChanges.length == 1) {\n          this._runPendingChanges();\n        }\n      } catch (err) {\n        CKEditorError.rethrowUnexpectedError(err, this);\n      }\n    }\n\n    /**\n     * {@link module:utils/observablemixin~ObservableMixin#decorate Decorated} function for applying\n     * {@link module:engine/model/operation/operation~Operation operations} to the model.\n     *\n     * This is a low-level way of changing the model. It is exposed for very specific use cases (like the undo feature).\n     * Normally, to modify the model, you will want to use {@link module:engine/model/writer~Writer `Writer`}.\n     * See also {@glink framework/guides/architecture/editing-engine#changing-the-model Changing the model} section\n     * of the {@glink framework/guides/architecture/editing-engine Editing architecture} guide.\n     *\n     * @param {module:engine/model/operation/operation~Operation} operation The operation to apply.\n     */\n  }, {\n    key: \"applyOperation\",\n    value: function applyOperation(operation) {\n      operation._execute();\n    }\n\n    /**\n     * Inserts content at the position in the editor specified by the selection, as one would expect the paste\n     * functionality to work.\n     *\n     * This is a high-level method. It takes the {@link #schema schema} into consideration when inserting\n     * the content, clears the given selection's content before inserting nodes and moves the selection\n     * to its target position at the end of the process.\n     * It can split elements, merge them, wrap bare text nodes with paragraphs, etc. &mdash; just like the\n     * pasting feature should do.\n     *\n     * For lower-level methods see {@link module:engine/model/writer~Writer `Writer`}.\n     *\n     * This method, unlike {@link module:engine/model/writer~Writer `Writer`}'s methods, does not have to be used\n     * inside a {@link #change `change()` block}.\n     *\n     * # Conversion and schema\n     *\n     * Inserting elements and text nodes into the model is not enough to make CKEditor 5 render that content\n     * to the user. CKEditor 5 implements a model-view-controller architecture and what `model.insertContent()` does\n     * is only adding nodes to the model. Additionally, you need to define\n     * {@glink framework/guides/architecture/editing-engine#conversion converters} between the model and view\n     * and define those nodes in the {@glink framework/guides/architecture/editing-engine#schema schema}.\n     *\n     * So, while this method may seem similar to CKEditor 4 `editor.insertHtml()` (in fact, both methods\n     * are used for paste-like content insertion), the CKEditor 5 method cannot be use to insert arbitrary HTML\n     * unless converters are defined for all elements and attributes in that HTML.\n     *\n     * # Examples\n     *\n     * Using `insertContent()` with a manually created model structure:\n     *\n     *\t\t// Let's create a document fragment containing such content as:\n     *\t\t//\n     *\t\t// <paragrap>foo</paragraph>\n     *\t\t// <blockQuote>\n     *\t\t//    <paragraph>bar</paragraph>\n     *\t\t// </blockQuote>\n     *\t\tconst docFrag = editor.model.change( writer => {\n     *\t\t\tconst p1 = writer.createElement( 'paragraph' );\n     *\t\t\tconst p2 = writer.createElement( 'paragraph' );\n     *\t\t\tconst blockQuote = writer.createElement( 'blockQuote' );\n     *\t\t\tconst docFrag = writer.createDocumentFragment();\n     *\n     *\t\t\twriter.append( p1, docFrag );\n     *\t\t\twriter.append( blockQuote, docFrag );\n     *\t\t\twriter.append( p2, blockQuote );\n     *\t\t\twriter.insertText( 'foo', p1 );\n     *\t\t\twriter.insertText( 'bar', p2 );\n     *\n     *\t\t\treturn docFrag;\n     *\t\t} );\n     *\n     *\t\t// insertContent() does not have to be used in a change() block. It can, though,\n     *\t\t// so this code could be moved to the callback defined above.\n     *\t\teditor.model.insertContent( docFrag );\n     *\n     * Using `insertContent()` with an HTML string converted to a model document fragment (similar to the pasting mechanism):\n     *\n     *\t\t// You can create your own HtmlDataProcessor instance or use editor.data.processor\n     *\t\t// if you have not overridden the default one (which is the HtmlDataProcessor instance).\n     *\t\tconst htmlDP = new HtmlDataProcessor();\n     *\n     *\t\t// Convert an HTML string to a view document fragment:\n     *\t\tconst viewFragment = htmlDP.toView( htmlString );\n     *\n     *\t\t// Convert the view document fragment to a model document fragment\n     *\t\t// in the context of $root. This conversion takes the schema into\n     *\t\t// account so if, for example, the view document fragment contained a bare text node,\n     *\t\t// this text node cannot be a child of $root, so it will be automatically\n     *\t\t// wrapped with a <paragraph>. You can define the context yourself (in the second parameter),\n     *\t\t// and e.g. convert the content like it would happen in a <paragraph>.\n     *\t\t// Note: The clipboard feature uses a custom context called $clipboardHolder\n     *\t\t// which has a loosened schema.\n     *\t\tconst modelFragment = editor.data.toModel( viewFragment );\n     *\n     *\t\teditor.model.insertContent( modelFragment );\n     *\n     * By default this method will use the document selection but it can also be used with a position, range or selection instance.\n     *\n     *\t\t// Insert text at the current document selection position.\n     *\t\teditor.model.change( writer => {\n     *\t\t\teditor.model.insertContent( writer.createText( 'x' ) );\n     *\t\t} );\n     *\n     *\t\t// Insert text at a given position - the document selection will not be modified.\n     *\t\teditor.model.change( writer => {\n     *\t\t\teditor.model.insertContent( writer.createText( 'x' ), doc.getRoot(), 2 );\n     *\n     *\t\t\t// Which is a shorthand for:\n     *\t\t\teditor.model.insertContent( writer.createText( 'x' ), writer.createPositionAt( doc.getRoot(), 2 ) );\n     *\t\t} );\n     *\n     * If an instance of {@link module:engine/model/selection~Selection} is passed as `selectable`\n     * it will be moved to the target position (where the document selection should be moved after the insertion).\n     *\n     *\t\teditor.model.change( writer => {\n     *\t\t\t// Insert text replacing the given selection instance.\n     *\t\t\tconst selection = writer.createSelection( paragraph, 'in' );\n     *\n     *\t\t\teditor.model.insertContent( writer.createText( 'x' ), selection );\n     *\n     *\t\t\t// insertContent() modifies the passed selection instance so it can be used to set the document selection.\n     *\t\t\t// Note: This is not necessary when you passed the document selection to insertContent().\n     *\t\t\twriter.setSelection( selection );\n     *\t\t} );\n     *\n     * @fires insertContent\n     * @param {module:engine/model/documentfragment~DocumentFragment|module:engine/model/item~Item} content The content to insert.\n     * @param {module:engine/model/selection~Selectable} [selectable=model.document.selection]\n     * The selection into which the content should be inserted. If not provided the current model document selection will be used.\n     * @param {Number|'before'|'end'|'after'|'on'|'in'} [placeOrOffset] To be used when a model item was passed as `selectable`.\n     * This param defines a position in relation to that item.\n     * @returns {module:engine/model/range~Range} Range which contains all the performed changes. This is a range that, if removed,\n     * would return the model to the state before the insertion. If no changes were preformed by `insertContent`, returns a range collapsed\n     * at the insertion position.\n     */\n  }, {\n    key: \"insertContent\",\n    value: function insertContent(content, selectable, placeOrOffset) {\n      return _insertContent(this, content, selectable, placeOrOffset);\n    }\n\n    /**\n     * Deletes content of the selection and merge siblings. The resulting selection is always collapsed.\n     *\n     * **Note:** For the sake of predictability, the resulting selection should always be collapsed.\n     * In cases where a feature wants to modify deleting behavior so selection isn't collapsed\n     * (e.g. a table feature may want to keep row selection after pressing <kbd>Backspace</kbd>),\n     * then that behavior should be implemented in the view's listener. At the same time, the table feature\n     * will need to modify this method's behavior too, e.g. to \"delete contents and then collapse\n     * the selection inside the last selected cell\" or \"delete the row and collapse selection somewhere near\".\n     * That needs to be done in order to ensure that other features which use `deleteContent()` will work well with tables.\n     *\n     * @fires deleteContent\n     * @param {module:engine/model/selection~Selection|module:engine/model/documentselection~DocumentSelection} selection\n     * Selection of which the content should be deleted.\n     * @param {Object} [options]\n     * @param {Boolean} [options.leaveUnmerged=false] Whether to merge elements after removing the content of the selection.\n     *\n     * For example `<heading1>x[x</heading1><paragraph>y]y</paragraph>` will become:\n     *\n     * * `<heading1>x^y</heading1>` with the option disabled (`leaveUnmerged == false`)\n     * * `<heading1>x^</heading1><paragraph>y</paragraph>` with enabled (`leaveUnmerged == true`).\n     *\n     * Note: {@link module:engine/model/schema~Schema#isObject object} and {@link module:engine/model/schema~Schema#isLimit limit}\n     * elements will not be merged.\n     *\n     * @param {Boolean} [options.doNotResetEntireContent=false] Whether to skip replacing the entire content with a\n     * paragraph when the entire content was selected.\n     *\n     * For example `<heading1>[x</heading1><paragraph>y]</paragraph>` will become:\n     *\n     * * `<paragraph>^</paragraph>` with the option disabled (`doNotResetEntireContent == false`)\n     * * `<heading1>^</heading1>` with enabled (`doNotResetEntireContent == true`)\n     *\n     * @param {Boolean} [options.doNotAutoparagraph=false] Whether to create a paragraph if after content deletion selection is moved\n     * to a place where text cannot be inserted.\n     *\n     * For example `<paragraph>x</paragraph>[<image src=\"foo.jpg\"></image>]` will become:\n     *\n     * * `<paragraph>x</paragraph><paragraph>[]</paragraph>` with the option disabled (`doNotAutoparagraph == false`)\n     * * `<paragraph>x[]</paragraph>` with the option enabled (`doNotAutoparagraph == true`).\n     *\n     * **Note:** if there is no valid position for the selection, the paragraph will always be created:\n     *\n     * `[<image src=\"foo.jpg\"></image>]` -> `<paragraph>[]</paragraph>`.\n     */\n  }, {\n    key: \"deleteContent\",\n    value: function deleteContent(selection, options) {\n      _deleteContent(this, selection, options);\n    }\n\n    /**\n     * Modifies the selection. Currently, the supported modifications are:\n     *\n     * * Extending. The selection focus is moved in the specified `options.direction` with a step specified in `options.unit`.\n     * Possible values for `unit` are:\n     *  * `'character'` (default) - moves selection by one user-perceived character. In most cases this means moving by one\n     *  character in `String` sense. However, unicode also defines \"combing marks\". These are special symbols, that combines\n     *  with a symbol before it (\"base character\") to create one user-perceived character. For example, `q̣̇` is a normal\n     *  letter `q` with two \"combining marks\": upper dot (`Ux0307`) and lower dot (`Ux0323`). For most actions, i.e. extending\n     *  selection by one position, it is correct to include both \"base character\" and all of it's \"combining marks\". That is\n     *  why `'character'` value is most natural and common method of modifying selection.\n     *  * `'codePoint'` - moves selection by one unicode code point. In contrary to, `'character'` unit, this will insert\n     *  selection between \"base character\" and \"combining mark\", because \"combining marks\" have their own unicode code points.\n     *  However, for technical reasons, unicode code points with values above `UxFFFF` are represented in native `String` by\n     *  two characters, called \"surrogate pairs\". Halves of \"surrogate pairs\" have a meaning only when placed next to each other.\n     *  For example `𨭎` is represented in `String` by `\\uD862\\uDF4E`. Both `\\uD862` and `\\uDF4E` do not have any meaning\n     *  outside the pair (are rendered as ? when alone). Position between them would be incorrect. In this case, selection\n     *  extension will include whole \"surrogate pair\".\n     *  * `'word'` - moves selection by a whole word.\n     *\n     * **Note:** if you extend a forward selection in a backward direction you will in fact shrink it.\n     *\n     * @fires modifySelection\n     * @param {module:engine/model/selection~Selection|module:engine/model/documentselection~DocumentSelection} selection\n     * The selection to modify.\n     * @param {Object} [options]\n     * @param {'forward'|'backward'} [options.direction='forward'] The direction in which the selection should be modified.\n     * @param {'character'|'codePoint'|'word'} [options.unit='character'] The unit by which selection should be modified.\n     */\n  }, {\n    key: \"modifySelection\",\n    value: function modifySelection(selection, options) {\n      _modifySelection(this, selection, options);\n    }\n\n    /**\n     * Gets a clone of the selected content.\n     *\n     * For example, for the following selection:\n     *\n     * ```html\n     * <paragraph>x</paragraph>\n     * <blockQuote>\n     *\t<paragraph>y</paragraph>\n     *\t<heading1>fir[st</heading1>\n     * </blockQuote>\n     * <paragraph>se]cond</paragraph>\n     * <paragraph>z</paragraph>\n     * ```\n     *\n     * It will return a document fragment with such a content:\n     *\n     * ```html\n     * <blockQuote>\n     *\t<heading1>st</heading1>\n     * </blockQuote>\n     * <paragraph>se</paragraph>\n     * ```\n     *\n     * @fires getSelectedContent\n     * @param {module:engine/model/selection~Selection|module:engine/model/documentselection~DocumentSelection} selection\n     * The selection of which content will be returned.\n     * @returns {module:engine/model/documentfragment~DocumentFragment}\n     */\n  }, {\n    key: \"getSelectedContent\",\n    value: function getSelectedContent(selection) {\n      return _getSelectedContent(this, selection);\n    }\n\n    /**\n     * Checks whether the given {@link module:engine/model/range~Range range} or\n     * {@link module:engine/model/element~Element element} has any meaningful content.\n     *\n     * Meaningful content is:\n     *\n     * * any text node (`options.ignoreWhitespaces` allows controlling whether this text node must also contain\n     * any non-whitespace characters),\n     * * or any {@link module:engine/model/schema~Schema#isObject object element},\n     * * or any {@link module:engine/model/markercollection~Marker marker} which\n     * {@link module:engine/model/markercollection~Marker#_affectsData affects data}.\n     *\n     * This means that a range containing an empty `<paragraph></paragraph>` is not considered to have a meaningful content.\n     * However, a range containing an `<image></image>` (which would normally be marked in the schema as an object element)\n     * is considered non-empty.\n     *\n     * @param {module:engine/model/range~Range|module:engine/model/element~Element} rangeOrElement Range or element to check.\n     * @param {Object} [options]\n     * @param {Boolean} [options.ignoreWhitespaces] Whether text node with whitespaces only should be considered empty.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"hasContent\",\n    value: function hasContent(rangeOrElement, options) {\n      var range = rangeOrElement instanceof ModelElement ? ModelRange._createIn(rangeOrElement) : rangeOrElement;\n      if (range.isCollapsed) {\n        return false;\n      }\n\n      // Check if there are any markers which affects data in this given range.\n      var _iterator = _createForOfIteratorHelper(this.markers.getMarkersIntersectingRange(range)),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var intersectingMarker = _step.value;\n          if (intersectingMarker.affectsData) {\n            return true;\n          }\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      var _ref = options || {},\n        _ref$ignoreWhitespace = _ref.ignoreWhitespaces,\n        ignoreWhitespaces = _ref$ignoreWhitespace === void 0 ? false : _ref$ignoreWhitespace;\n      var _iterator2 = _createForOfIteratorHelper(range.getItems()),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var item = _step2.value;\n          if (item.is('textProxy')) {\n            if (!ignoreWhitespaces) {\n              return true;\n            } else if (item.data.search(/\\S/) !== -1) {\n              return true;\n            }\n          } else if (this.schema.isObject(item)) {\n            return true;\n          }\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      return false;\n    }\n\n    /**\n     * Creates a position from the given root and path in that root.\n     *\n     * Note: This method is also available as\n     * {@link module:engine/model/writer~Writer#createPositionFromPath `Writer#createPositionFromPath()`}.\n     *\n     * @param {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment} root Root of the position.\n     * @param {Array.<Number>} path Position path. See {@link module:engine/model/position~Position#path}.\n     * @param {module:engine/model/position~PositionStickiness} [stickiness='toNone'] Position stickiness.\n     * See {@link module:engine/model/position~PositionStickiness}.\n     * @returns {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"createPositionFromPath\",\n    value: function createPositionFromPath(root, path, stickiness) {\n      return new ModelPosition(root, path, stickiness);\n    }\n\n    /**\n     * Creates position at the given location. The location can be specified as:\n     *\n     * * a {@link module:engine/model/position~Position position},\n     * * a parent element and offset in that element,\n     * * a parent element and `'end'` (the position will be set at the end of that element),\n     * * a {@link module:engine/model/item~Item model item} and `'before'` or `'after'`\n     * (the position will be set before or after the given model item).\n     *\n     * This method is a shortcut to other factory methods such as:\n     *\n     * * {@link module:engine/model/model~Model#createPositionBefore `createPositionBefore()`},\n     * * {@link module:engine/model/model~Model#createPositionAfter `createPositionAfter()`}.\n     *\n     * Note: This method is also available as\n     * {@link module:engine/model/writer~Writer#createPositionAt `Writer#createPositionAt()`},\n     *\n     * @param {module:engine/model/item~Item|module:engine/model/position~Position} itemOrPosition\n     * @param {Number|'end'|'before'|'after'} [offset] Offset or one of the flags. Used only when\n     * first parameter is a {@link module:engine/model/item~Item model item}.\n     */\n  }, {\n    key: \"createPositionAt\",\n    value: function createPositionAt(itemOrPosition, offset) {\n      return ModelPosition._createAt(itemOrPosition, offset);\n    }\n\n    /**\n     * Creates a new position after the given {@link module:engine/model/item~Item model item}.\n     *\n     * Note: This method is also available as\n     * {@link module:engine/model/writer~Writer#createPositionAfter `Writer#createPositionAfter()`}.\n     *\n     * @param {module:engine/model/item~Item} item Item after which the position should be placed.\n     * @returns {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"createPositionAfter\",\n    value: function createPositionAfter(item) {\n      return ModelPosition._createAfter(item);\n    }\n\n    /**\n     * Creates a new position before the given {@link module:engine/model/item~Item model item}.\n     *\n     * Note: This method is also available as\n     * {@link module:engine/model/writer~Writer#createPositionBefore `Writer#createPositionBefore()`}.\n     *\n     * @param {module:engine/model/item~Item} item Item before which the position should be placed.\n     * @returns {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"createPositionBefore\",\n    value: function createPositionBefore(item) {\n      return ModelPosition._createBefore(item);\n    }\n\n    /**\n     * Creates a range spanning from the `start` position to the `end` position.\n     *\n     * Note: This method is also available as\n     * {@link module:engine/model/writer~Writer#createRange `Writer#createRange()`}:\n     *\n     *\t\tmodel.change( writer => {\n     *\t\t\tconst range = writer.createRange( start, end );\n     *\t\t} );\n     *\n     * @param {module:engine/model/position~Position} start Start position.\n     * @param {module:engine/model/position~Position} [end] End position. If not set, the range will be collapsed\n     * to the `start` position.\n     * @returns {module:engine/model/range~Range}\n     */\n  }, {\n    key: \"createRange\",\n    value: function createRange(start, end) {\n      return new ModelRange(start, end);\n    }\n\n    /**\n     * Creates a range inside the given element which starts before the first child of\n     * that element and ends after the last child of that element.\n     *\n     * Note: This method is also available as\n     * {@link module:engine/model/writer~Writer#createRangeIn `Writer#createRangeIn()`}:\n     *\n     *\t\tmodel.change( writer => {\n     *\t\t\tconst range = writer.createRangeIn( paragraph );\n     *\t\t} );\n     *\n     * @param {module:engine/model/element~Element} element Element which is a parent for the range.\n     * @returns {module:engine/model/range~Range}\n     */\n  }, {\n    key: \"createRangeIn\",\n    value: function createRangeIn(element) {\n      return ModelRange._createIn(element);\n    }\n\n    /**\n     * Creates a range that starts before the given {@link module:engine/model/item~Item model item} and ends after it.\n     *\n     * Note: This method is also available on `writer` instance as\n     * {@link module:engine/model/writer~Writer#createRangeOn `Writer.createRangeOn()`}:\n     *\n     *\t\tmodel.change( writer => {\n     *\t\t\tconst range = writer.createRangeOn( paragraph );\n     *\t\t} );\n     *\n     * @param {module:engine/model/item~Item} item\n     * @returns {module:engine/model/range~Range}\n     */\n  }, {\n    key: \"createRangeOn\",\n    value: function createRangeOn(item) {\n      return ModelRange._createOn(item);\n    }\n\n    /**\n     * Creates a new selection instance based on the given {@link module:engine/model/selection~Selectable selectable}\n     * or creates an empty selection if no arguments were passed.\n     *\n     * Note: This method is also available as\n     * {@link module:engine/model/writer~Writer#createSelection `Writer#createSelection()`}.\n     *\n     *\t\t// Creates empty selection without ranges.\n     *\t\tconst selection = writer.createSelection();\n     *\n     *\t\t// Creates selection at the given range.\n     *\t\tconst range = writer.createRange( start, end );\n     *\t\tconst selection = writer.createSelection( range );\n     *\n     *\t\t// Creates selection at the given ranges\n     *\t\tconst ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ];\n     *\t\tconst selection = writer.createSelection( ranges );\n     *\n     *\t\t// Creates selection from the other selection.\n     *\t\t// Note: It doesn't copies selection attributes.\n     *\t\tconst otherSelection = writer.createSelection();\n     *\t\tconst selection = writer.createSelection( otherSelection );\n     *\n     *\t\t// Creates selection from the given document selection.\n     *\t\t// Note: It doesn't copies selection attributes.\n     *\t\tconst documentSelection = model.document.selection;\n     *\t\tconst selection = writer.createSelection( documentSelection );\n     *\n     *\t\t// Creates selection at the given position.\n     *\t\tconst position = writer.createPositionFromPath( root, path );\n     *\t\tconst selection = writer.createSelection( position );\n     *\n     *\t\t// Creates selection at the given offset in the given element.\n     *\t\tconst paragraph = writer.createElement( 'paragraph' );\n     *\t\tconst selection = writer.createSelection( paragraph, offset );\n     *\n     *\t\t// Creates a range inside an {@link module:engine/model/element~Element element} which starts before the\n     *\t\t// first child of that element and ends after the last child of that element.\n     *\t\tconst selection = writer.createSelection( paragraph, 'in' );\n     *\n     *\t\t// Creates a range on an {@link module:engine/model/item~Item item} which starts before the item and ends\n     *\t\t// just after the item.\n     *\t\tconst selection = writer.createSelection( paragraph, 'on' );\n     *\n     *\t\t// Additional options (`'backward'`) can be specified as the last argument.\n     *\n     *\t\t// Creates backward selection.\n     *\t\tconst selection = writer.createSelection( range, { backward: true } );\n     *\n     * @param {module:engine/model/selection~Selectable} selectable\n     * @param {Number|'before'|'end'|'after'|'on'|'in'} [placeOrOffset] Sets place or offset of the selection.\n     * @param {Object} [options]\n     * @param {Boolean} [options.backward] Sets this selection instance to be backward.\n     * @returns {module:engine/model/selection~Selection}\n     */\n  }, {\n    key: \"createSelection\",\n    value: function createSelection(selectable, placeOrOffset, options) {\n      return new ModelSelection(selectable, placeOrOffset, options);\n    }\n\n    /**\n     * Creates a {@link module:engine/model/batch~Batch} instance.\n     *\n     * **Note:** In most cases creating a batch instance is not necessary as they are created when using:\n     *\n     * * {@link #change `change()`},\n     * * {@link #enqueueChange `enqueueChange()`}.\n     *\n     * @param {'transparent'|'default'} [type='default'] The type of the batch.\n     * @returns {module:engine/model/batch~Batch}\n     */\n  }, {\n    key: \"createBatch\",\n    value: function createBatch(type) {\n      return new Batch(type);\n    }\n\n    /**\n     * Removes all events listeners set by model instance and destroys {@link module:engine/model/document~Document}.\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.document.destroy();\n      this.stopListening();\n    }\n\n    /**\n     * Common part of {@link module:engine/model/model~Model#change} and {@link module:engine/model/model~Model#enqueueChange}\n     * which calls callbacks and returns array of values returned by these callbacks.\n     *\n     * @private\n     * @returns {Array.<*>} Array of values returned by callbacks.\n     */\n  }, {\n    key: \"_runPendingChanges\",\n    value: function _runPendingChanges() {\n      var ret = [];\n      this.fire('_beforeChanges');\n      while (this._pendingChanges.length) {\n        // Create a new writer using batch instance created for this chain of changes.\n        var currentBatch = this._pendingChanges[0].batch;\n        this._currentWriter = new Writer(this, currentBatch);\n\n        // Execute changes callback and gather the returned value.\n        var callbackReturnValue = this._pendingChanges[0].callback(this._currentWriter);\n        ret.push(callbackReturnValue);\n        this.document._handleChangeBlock(this._currentWriter);\n        this._pendingChanges.shift();\n        this._currentWriter = null;\n      }\n      this.fire('_afterChanges');\n      return ret;\n    }\n\n    /**\n     * Fired when entering the outermost {@link module:engine/model/model~Model#enqueueChange} or\n     * {@link module:engine/model/model~Model#change} block.\n     *\n     * @protected\n     * @event _beforeChanges\n     */\n\n    /**\n     * Fired when leaving the outermost {@link module:engine/model/model~Model#enqueueChange} or\n     * {@link module:engine/model/model~Model#change} block.\n     *\n     * @protected\n     * @event _afterChanges\n     */\n\n    /**\n     * Fired every time any {@link module:engine/model/operation/operation~Operation operation} is applied on the model\n     * using {@link #applyOperation}.\n     *\n     * Note that this event is suitable only for very specific use-cases. Use it if you need to listen to every single operation\n     * applied on the document. However, in most cases {@link module:engine/model/document~Document#event:change} should\n     * be used.\n     *\n     * A few callbacks are already added to this event by engine internal classes:\n     *\n     * * with `highest` priority operation is validated,\n     * * with `normal` priority operation is executed,\n     * * with `low` priority the {@link module:engine/model/document~Document} updates its version,\n     * * with `low` priority {@link module:engine/model/liveposition~LivePosition} and {@link module:engine/model/liverange~LiveRange}\n     * update themselves.\n     *\n     * @event applyOperation\n     * @param {Array} args Arguments of the `applyOperation` which is an array with a single element - applied\n     * {@link module:engine/model/operation/operation~Operation operation}.\n     */\n\n    /**\n     * Event fired when {@link #insertContent} method is called.\n     *\n     * The {@link #insertContent default action of that method} is implemented as a\n     * listener to this event so it can be fully customized by the features.\n     *\n     * **Note** The `selectable` parameter for the {@link #insertContent} is optional. When `undefined` value is passed the method uses\n     * `model.document.selection`.\n     *\n     * @event insertContent\n     * @param {Array} args The arguments passed to the original method.\n     */\n\n    /**\n     * Event fired when {@link #deleteContent} method is called.\n     *\n     * The {@link #deleteContent default action of that method} is implemented as a\n     * listener to this event so it can be fully customized by the features.\n     *\n     * @event deleteContent\n     * @param {Array} args The arguments passed to the original method.\n     */\n\n    /**\n     * Event fired when {@link #modifySelection} method is called.\n     *\n     * The {@link #modifySelection default action of that method} is implemented as a\n     * listener to this event so it can be fully customized by the features.\n     *\n     * @event modifySelection\n     * @param {Array} args The arguments passed to the original method.\n     */\n\n    /**\n     * Event fired when {@link #getSelectedContent} method is called.\n     *\n     * The {@link #getSelectedContent default action of that method} is implemented as a\n     * listener to this event so it can be fully customized by the features.\n     *\n     * @event getSelectedContent\n     * @param {Array} args The arguments passed to the original method.\n     */\n  }]);\n}();\nexport { Model as default };\nmix(Model, ObservableMixin);","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.reduce.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/node\n */\n\nimport toMap from '@ckeditor/ckeditor5-utils/src/tomap';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport compareArrays from '@ckeditor/ckeditor5-utils/src/comparearrays';\n\n// To check if component is loaded more than once.\nimport '@ckeditor/ckeditor5-utils/src/version';\n\n/**\n * Model node. Most basic structure of model tree.\n *\n * This is an abstract class that is a base for other classes representing different nodes in model.\n *\n * **Note:** If a node is detached from the model tree, you can manipulate it using it's API.\n * However, it is **very important** that nodes already attached to model tree should be only changed through\n * {@link module:engine/model/writer~Writer Writer API}.\n *\n * Changes done by `Node` methods, like {@link module:engine/model/element~Element#_insertChild _insertChild} or\n * {@link module:engine/model/node~Node#_setAttribute _setAttribute}\n * do not generate {@link module:engine/model/operation/operation~Operation operations}\n * which are essential for correct editor work if you modify nodes in {@link module:engine/model/document~Document document} root.\n *\n * The flow of working on `Node` (and classes that inherits from it) is as such:\n * 1. You can create a `Node` instance, modify it using it's API.\n * 2. Add `Node` to the model using `Batch` API.\n * 3. Change `Node` that was already added to the model using `Batch` API.\n *\n * Similarly, you cannot use `Batch` API on a node that has not been added to the model tree, with the exception\n * of {@link module:engine/model/writer~Writer#insert inserting} that node to the model tree.\n *\n * Be aware that using {@link module:engine/model/writer~Writer#remove remove from Batch API} does not allow to use `Node` API because\n * the information about `Node` is still kept in model document.\n *\n * In case of {@link module:engine/model/element~Element element node}, adding and removing children also counts as changing a node and\n * follows same rules.\n */\nvar Node = /*#__PURE__*/function () {\n  /**\n   * Creates a model node.\n   *\n   * This is an abstract class, so this constructor should not be used directly.\n   *\n   * @abstract\n   * @param {Object} [attrs] Node's attributes. See {@link module:utils/tomap~toMap} for a list of accepted values.\n   */\n  function Node(attrs) {\n    _classCallCheck(this, Node);\n    /**\n     * Parent of this node. It could be {@link module:engine/model/element~Element}\n     * or {@link module:engine/model/documentfragment~DocumentFragment}.\n     * Equals to `null` if the node has no parent.\n     *\n     * @readonly\n     * @member {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment|null}\n     */\n    this.parent = null;\n\n    /**\n     * Attributes set on this node.\n     *\n     * @private\n     * @member {Map} module:engine/model/node~Node#_attrs\n     */\n    this._attrs = toMap(attrs);\n  }\n\n  /**\n   * Index of this node in it's parent or `null` if the node has no parent.\n   *\n   * Accessing this property throws an error if this node's parent element does not contain it.\n   * This means that model tree got broken.\n   *\n   * @readonly\n   * @type {Number|null}\n   */\n  return _createClass(Node, [{\n    key: \"index\",\n    get: function get() {\n      var pos;\n      if (!this.parent) {\n        return null;\n      }\n      if ((pos = this.parent.getChildIndex(this)) === null) {\n        throw new CKEditorError('model-node-not-found-in-parent: The node\\'s parent does not contain this node.', this);\n      }\n      return pos;\n    }\n\n    /**\n     * Offset at which this node starts in it's parent. It is equal to the sum of {@link #offsetSize offsetSize}\n     * of all it's previous siblings. Equals to `null` if node has no parent.\n     *\n     * Accessing this property throws an error if this node's parent element does not contain it.\n     * This means that model tree got broken.\n     *\n     * @readonly\n     * @type {Number|null}\n     */\n  }, {\n    key: \"startOffset\",\n    get: function get() {\n      var pos;\n      if (!this.parent) {\n        return null;\n      }\n      if ((pos = this.parent.getChildStartOffset(this)) === null) {\n        throw new CKEditorError('model-node-not-found-in-parent: The node\\'s parent does not contain this node.', this);\n      }\n      return pos;\n    }\n\n    /**\n     * Offset size of this node. Represents how much \"offset space\" is occupied by the node in it's parent.\n     * It is important for {@link module:engine/model/position~Position position}. When node has `offsetSize` greater than `1`, position\n     * can be placed between that node start and end. `offsetSize` greater than `1` is for nodes that represents more\n     * than one entity, i.e. {@link module:engine/model/text~Text text node}.\n     *\n     * @readonly\n     * @type {Number}\n     */\n  }, {\n    key: \"offsetSize\",\n    get: function get() {\n      return 1;\n    }\n\n    /**\n     * Offset at which this node ends in it's parent. It is equal to the sum of this node's\n     * {@link module:engine/model/node~Node#startOffset start offset} and {@link #offsetSize offset size}.\n     * Equals to `null` if the node has no parent.\n     *\n     * @readonly\n     * @type {Number|null}\n     */\n  }, {\n    key: \"endOffset\",\n    get: function get() {\n      if (!this.parent) {\n        return null;\n      }\n      return this.startOffset + this.offsetSize;\n    }\n\n    /**\n     * Node's next sibling or `null` if the node is a last child of it's parent or if the node has no parent.\n     *\n     * @readonly\n     * @type {module:engine/model/node~Node|null}\n     */\n  }, {\n    key: \"nextSibling\",\n    get: function get() {\n      var index = this.index;\n      return index !== null && this.parent.getChild(index + 1) || null;\n    }\n\n    /**\n     * Node's previous sibling or `null` if the node is a first child of it's parent or if the node has no parent.\n     *\n     * @readonly\n     * @type {module:engine/model/node~Node|null}\n     */\n  }, {\n    key: \"previousSibling\",\n    get: function get() {\n      var index = this.index;\n      return index !== null && this.parent.getChild(index - 1) || null;\n    }\n\n    /**\n     * The top-most ancestor of the node. If node has no parent it is the root itself. If the node is a part\n     * of {@link module:engine/model/documentfragment~DocumentFragment}, it's `root` is equal to that `DocumentFragment`.\n     *\n     * @readonly\n     * @type {module:engine/model/node~Node|module:engine/model/documentfragment~DocumentFragment}\n     */\n  }, {\n    key: \"root\",\n    get: function get() {\n      var root = this; // eslint-disable-line consistent-this\n\n      while (root.parent) {\n        root = root.parent;\n      }\n      return root;\n    }\n\n    /**\n     * {@link module:engine/model/document~Document Document} that owns this node or `null` if the node has no parent or is inside\n     * a {@link module:engine/model/documentfragment~DocumentFragment DocumentFragment}.\n     *\n     * @readonly\n     * @type {module:engine/model/document~Document|null}\n     */\n  }, {\n    key: \"document\",\n    get: function get() {\n      // This is a top element of a sub-tree.\n      if (this.root == this) {\n        return null;\n      }\n\n      // Root may be `DocumentFragment` which does not have document property.\n      return this.root.document || null;\n    }\n\n    /**\n     * Gets path to the node. The path is an array containing starting offsets of consecutive ancestors of this node,\n     * beginning from {@link module:engine/model/node~Node#root root}, down to this node's starting offset. The path can be used to\n     * create {@link module:engine/model/position~Position Position} instance.\n     *\n     *\t\tconst abc = new Text( 'abc' );\n     *\t\tconst foo = new Text( 'foo' );\n     *\t\tconst h1 = new Element( 'h1', null, new Text( 'header' ) );\n     *\t\tconst p = new Element( 'p', null, [ abc, foo ] );\n     *\t\tconst div = new Element( 'div', null, [ h1, p ] );\n     *\t\tfoo.getPath(); // Returns [ 1, 3 ]. `foo` is in `p` which is in `div`. `p` starts at offset 1, while `foo` at 3.\n     *\t\th1.getPath(); // Returns [ 0 ].\n     *\t\tdiv.getPath(); // Returns [].\n     *\n     * @returns {Array.<Number>} The path.\n     */\n  }, {\n    key: \"getPath\",\n    value: function getPath() {\n      var path = [];\n      var node = this; // eslint-disable-line consistent-this\n\n      while (node.parent) {\n        path.unshift(node.startOffset);\n        node = node.parent;\n      }\n      return path;\n    }\n\n    /**\n     * Returns ancestors array of this node.\n     *\n     * @param {Object} options Options object.\n     * @param {Boolean} [options.includeSelf=false] When set to `true` this node will be also included in parent's array.\n     * @param {Boolean} [options.parentFirst=false] When set to `true`, array will be sorted from node's parent to root element,\n     * otherwise root element will be the first item in the array.\n     * @returns {Array} Array with ancestors.\n     */\n  }, {\n    key: \"getAncestors\",\n    value: function getAncestors() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n        includeSelf: false,\n        parentFirst: false\n      };\n      var ancestors = [];\n      var parent = options.includeSelf ? this : this.parent;\n      while (parent) {\n        ancestors[options.parentFirst ? 'push' : 'unshift'](parent);\n        parent = parent.parent;\n      }\n      return ancestors;\n    }\n\n    /**\n     * Returns a {@link module:engine/model/element~Element} or {@link module:engine/model/documentfragment~DocumentFragment}\n     * which is a common ancestor of both nodes.\n     *\n     * @param {module:engine/model/node~Node} node The second node.\n     * @param {Object} options Options object.\n     * @param {Boolean} [options.includeSelf=false] When set to `true` both nodes will be considered \"ancestors\" too.\n     * Which means that if e.g. node A is inside B, then their common ancestor will be B.\n     * @returns {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment|null}\n     */\n  }, {\n    key: \"getCommonAncestor\",\n    value: function getCommonAncestor(node) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var ancestorsA = this.getAncestors(options);\n      var ancestorsB = node.getAncestors(options);\n      var i = 0;\n      while (ancestorsA[i] == ancestorsB[i] && ancestorsA[i]) {\n        i++;\n      }\n      return i === 0 ? null : ancestorsA[i - 1];\n    }\n\n    /**\n     * Returns whether this node is before given node. `false` is returned if nodes are in different trees (for example,\n     * in different {@link module:engine/model/documentfragment~DocumentFragment}s).\n     *\n     * @param {module:engine/model/node~Node} node Node to compare with.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"isBefore\",\n    value: function isBefore(node) {\n      // Given node is not before this node if they are same.\n      if (this == node) {\n        return false;\n      }\n\n      // Return `false` if it is impossible to compare nodes.\n      if (this.root !== node.root) {\n        return false;\n      }\n      var thisPath = this.getPath();\n      var nodePath = node.getPath();\n      var result = compareArrays(thisPath, nodePath);\n      switch (result) {\n        case 'prefix':\n          return true;\n        case 'extension':\n          return false;\n        default:\n          return thisPath[result] < nodePath[result];\n      }\n    }\n\n    /**\n     * Returns whether this node is after given node. `false` is returned if nodes are in different trees (for example,\n     * in different {@link module:engine/model/documentfragment~DocumentFragment}s).\n     *\n     * @param {module:engine/model/node~Node} node Node to compare with.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"isAfter\",\n    value: function isAfter(node) {\n      // Given node is not before this node if they are same.\n      if (this == node) {\n        return false;\n      }\n\n      // Return `false` if it is impossible to compare nodes.\n      if (this.root !== node.root) {\n        return false;\n      }\n\n      // In other cases, just check if the `node` is before, and return the opposite.\n      return !this.isBefore(node);\n    }\n\n    /**\n     * Checks if the node has an attribute with given key.\n     *\n     * @param {String} key Key of attribute to check.\n     * @returns {Boolean} `true` if attribute with given key is set on node, `false` otherwise.\n     */\n  }, {\n    key: \"hasAttribute\",\n    value: function hasAttribute(key) {\n      return this._attrs.has(key);\n    }\n\n    /**\n     * Gets an attribute value for given key or `undefined` if that attribute is not set on node.\n     *\n     * @param {String} key Key of attribute to look for.\n     * @returns {*} Attribute value or `undefined`.\n     */\n  }, {\n    key: \"getAttribute\",\n    value: function getAttribute(key) {\n      return this._attrs.get(key);\n    }\n\n    /**\n     * Returns iterator that iterates over this node's attributes.\n     *\n     * Attributes are returned as arrays containing two items. First one is attribute key and second is attribute value.\n     * This format is accepted by native `Map` object and also can be passed in `Node` constructor.\n     *\n     * @returns {Iterable.<*>}\n     */\n  }, {\n    key: \"getAttributes\",\n    value: function getAttributes() {\n      return this._attrs.entries();\n    }\n\n    /**\n     * Returns iterator that iterates over this node's attribute keys.\n     *\n     * @returns {Iterable.<String>}\n     */\n  }, {\n    key: \"getAttributeKeys\",\n    value: function getAttributeKeys() {\n      return this._attrs.keys();\n    }\n\n    /**\n     * Converts `Node` to plain object and returns it.\n     *\n     * @returns {Object} `Node` converted to plain object.\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var json = {};\n\n      // Serializes attributes to the object.\n      // attributes = { a: 'foo', b: 1, c: true }.\n      if (this._attrs.size) {\n        json.attributes = Array.from(this._attrs).reduce(function (result, attr) {\n          result[attr[0]] = attr[1];\n          return result;\n        }, {});\n      }\n      return json;\n    }\n\n    /**\n     * Checks whether this object is of the given type.\n     *\n     * This method is useful when processing model objects that are of unknown type. For example, a function\n     * may return a {@link module:engine/model/documentfragment~DocumentFragment} or a {@link module:engine/model/node~Node}\n     * that can be either a text node or an element. This method can be used to check what kind of object is returned.\n     *\n     *\t\tsomeObject.is( 'element' ); // -> true if this is an element\n     *\t\tsomeObject.is( 'node' ); // -> true if this is a node (a text node or an element)\n     *\t\tsomeObject.is( 'documentFragment' ); // -> true if this is a document fragment\n     *\n     * Since this method is also available on a range of view objects, you can prefix the type of the object with\n     * `model:` or `view:` to check, for example, if this is the model's or view's element:\n     *\n     *\t\tmodelElement.is( 'model:element' ); // -> true\n     *\t\tmodelElement.is( 'view:element' ); // -> false\n     *\n     * By using this method it is also possible to check a name of an element:\n     *\n     *\t\timageElement.is( 'image' ); // -> true\n     *\t\timageElement.is( 'element', 'image' ); // -> same as above\n     *\t\timageElement.is( 'model:element', 'image' ); // -> same as above, but more precise\n     *\n     * The list of model objects which implement the `is()` method:\n     *\n     * * {@link module:engine/model/node~Node#is `Node#is()`}\n     * * {@link module:engine/model/text~Text#is `Text#is()`}\n     * * {@link module:engine/model/element~Element#is `Element#is()`}\n     * * {@link module:engine/model/rootelement~RootElement#is `RootElement#is()`}\n     * * {@link module:engine/model/position~Position#is `Position#is()`}\n     * * {@link module:engine/model/liveposition~LivePosition#is `LivePosition#is()`}\n     * * {@link module:engine/model/range~Range#is `Range#is()`}\n     * * {@link module:engine/model/liverange~LiveRange#is `LiveRange#is()`}\n     * * {@link module:engine/model/documentfragment~DocumentFragment#is `DocumentFragment#is()`}\n     * * {@link module:engine/model/selection~Selection#is `Selection#is()`}\n     * * {@link module:engine/model/documentselection~DocumentSelection#is `DocumentSelection#is()`}\n     * * {@link module:engine/model/markercollection~Marker#is `Marker#is()`}\n     * * {@link module:engine/model/textproxy~TextProxy#is `TextProxy#is()`}\n     *\n     * @method #is\n     * @param {String} type\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'node' || type == 'model:node';\n    }\n\n    /**\n     * Creates a copy of this node, that is a node with exactly same attributes, and returns it.\n     *\n     * @protected\n     * @returns {module:engine/model/node~Node} Node with same attributes as this node.\n     */\n  }, {\n    key: \"_clone\",\n    value: function _clone() {\n      return new Node(this._attrs);\n    }\n\n    /**\n     * Removes this node from it's parent.\n     *\n     * @see module:engine/model/writer~Writer#remove\n     * @protected\n     */\n  }, {\n    key: \"_remove\",\n    value: function _remove() {\n      this.parent._removeChildren(this.index);\n    }\n\n    /**\n     * Sets attribute on the node. If attribute with the same key already is set, it's value is overwritten.\n     *\n     * @see module:engine/model/writer~Writer#setAttribute\n     * @protected\n     * @param {String} key Key of attribute to set.\n     * @param {*} value Attribute value.\n     */\n  }, {\n    key: \"_setAttribute\",\n    value: function _setAttribute(key, value) {\n      this._attrs.set(key, value);\n    }\n\n    /**\n     * Removes all attributes from the node and sets given attributes.\n     *\n     * @see module:engine/model/writer~Writer#setAttributes\n     * @protected\n     * @param {Object} [attrs] Attributes to set. See {@link module:utils/tomap~toMap} for a list of accepted values.\n     */\n  }, {\n    key: \"_setAttributesTo\",\n    value: function _setAttributesTo(attrs) {\n      this._attrs = toMap(attrs);\n    }\n\n    /**\n     * Removes an attribute with given key from the node.\n     *\n     * @see module:engine/model/writer~Writer#removeAttribute\n     * @protected\n     * @param {String} key Key of attribute to remove.\n     * @returns {Boolean} `true` if the attribute was set on the element, `false` otherwise.\n     */\n  }, {\n    key: \"_removeAttribute\",\n    value: function _removeAttribute(key) {\n      return this._attrs.delete(key);\n    }\n\n    /**\n     * Removes all attributes from the node.\n     *\n     * @see module:engine/model/writer~Writer#clearAttributes\n     * @protected\n     */\n  }, {\n    key: \"_clearAttributes\",\n    value: function _clearAttributes() {\n      this._attrs.clear();\n    }\n  }]);\n}();\n/**\n * The node's parent does not contain this node.\n *\n * This error may be thrown from corrupted trees.\n *\n * @error model-node-not-found-in-parent\n */\nexport { Node as default };","import _toConsumableArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.reduce.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/nodelist\n */\n\nimport Node from './node';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * Provides an interface to operate on a list of {@link module:engine/model/node~Node nodes}. `NodeList` is used internally\n * in classes like {@link module:engine/model/element~Element Element}\n * or {@link module:engine/model/documentfragment~DocumentFragment DocumentFragment}.\n */\nvar NodeList = /*#__PURE__*/function () {\n  /**\n   * Creates an empty node list.\n   *\n   * @protected\n   * @param {Iterable.<module:engine/model/node~Node>} nodes Nodes contained in this node list.\n   */\n  function NodeList(nodes) {\n    _classCallCheck(this, NodeList);\n    /**\n     * Nodes contained in this node list.\n     *\n     * @private\n     * @member {Array.<module:engine/model/node~Node>}\n     */\n    this._nodes = [];\n    if (nodes) {\n      this._insertNodes(0, nodes);\n    }\n  }\n\n  /**\n   * Iterable interface.\n   *\n   * Iterates over all nodes contained inside this node list.\n   *\n   * @returns {Iterable.<module:engine/model/node~Node>}\n   */\n  return _createClass(NodeList, [{\n    key: Symbol.iterator,\n    value: function value() {\n      return this._nodes[Symbol.iterator]();\n    }\n\n    /**\n     * Number of nodes contained inside this node list.\n     *\n     * @readonly\n     * @type {Number}\n     */\n  }, {\n    key: \"length\",\n    get: function get() {\n      return this._nodes.length;\n    }\n\n    /**\n     * Sum of {@link module:engine/model/node~Node#offsetSize offset sizes} of all nodes contained inside this node list.\n     *\n     * @readonly\n     * @type {Number}\n     */\n  }, {\n    key: \"maxOffset\",\n    get: function get() {\n      return this._nodes.reduce(function (sum, node) {\n        return sum + node.offsetSize;\n      }, 0);\n    }\n\n    /**\n     * Gets the node at the given index. Returns `null` if incorrect index was passed.\n     *\n     * @param {Number} index Index of node.\n     * @returns {module:engine/model/node~Node|null} Node at given index.\n     */\n  }, {\n    key: \"getNode\",\n    value: function getNode(index) {\n      return this._nodes[index] || null;\n    }\n\n    /**\n     * Returns an index of the given node. Returns `null` if given node is not inside this node list.\n     *\n     * @param {module:engine/model/node~Node} node Child node to look for.\n     * @returns {Number|null} Child node's index.\n     */\n  }, {\n    key: \"getNodeIndex\",\n    value: function getNodeIndex(node) {\n      var index = this._nodes.indexOf(node);\n      return index == -1 ? null : index;\n    }\n\n    /**\n     * Returns the starting offset of given node. Starting offset is equal to the sum of\n     * {@link module:engine/model/node~Node#offsetSize offset sizes} of all nodes that are before this node in this node list.\n     *\n     * @param {module:engine/model/node~Node} node Node to look for.\n     * @returns {Number|null} Node's starting offset.\n     */\n  }, {\n    key: \"getNodeStartOffset\",\n    value: function getNodeStartOffset(node) {\n      var index = this.getNodeIndex(node);\n      return index === null ? null : this._nodes.slice(0, index).reduce(function (sum, node) {\n        return sum + node.offsetSize;\n      }, 0);\n    }\n\n    /**\n     * Converts index to offset in node list.\n     *\n     * Returns starting offset of a node that is at given index. Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError}\n     * `model-nodelist-index-out-of-bounds` if given index is less than `0` or more than {@link #length}.\n     *\n     * @param {Number} index Node's index.\n     * @returns {Number} Node's starting offset.\n     */\n  }, {\n    key: \"indexToOffset\",\n    value: function indexToOffset(index) {\n      if (index == this._nodes.length) {\n        return this.maxOffset;\n      }\n      var node = this._nodes[index];\n      if (!node) {\n        /**\n         * Given index cannot be found in the node list.\n         *\n         * @error nodelist-index-out-of-bounds\n         */\n        throw new CKEditorError('model-nodelist-index-out-of-bounds: Given index cannot be found in the node list.', this);\n      }\n      return this.getNodeStartOffset(node);\n    }\n\n    /**\n     * Converts offset in node list to index.\n     *\n     * Returns index of a node that occupies given offset. Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError}\n     * `model-nodelist-offset-out-of-bounds` if given offset is less than `0` or more than {@link #maxOffset}.\n     *\n     * @param {Number} offset Offset to look for.\n     * @returns {Number} Index of a node that occupies given offset.\n     */\n  }, {\n    key: \"offsetToIndex\",\n    value: function offsetToIndex(offset) {\n      var totalOffset = 0;\n      var _iterator = _createForOfIteratorHelper(this._nodes),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var node = _step.value;\n          if (offset >= totalOffset && offset < totalOffset + node.offsetSize) {\n            return this.getNodeIndex(node);\n          }\n          totalOffset += node.offsetSize;\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      if (totalOffset != offset) {\n        /**\n         * Given offset cannot be found in the node list.\n         *\n         * @error model-nodelist-offset-out-of-bounds\n         * @param {Number} offset\n         * @param {module:engine/model/nodelist~NodeList} nodeList Stringified node list.\n         */\n        throw new CKEditorError('model-nodelist-offset-out-of-bounds: Given offset cannot be found in the node list.', this, {\n          offset: offset,\n          nodeList: this\n        });\n      }\n      return this.length;\n    }\n\n    /**\n     * Inserts given nodes at given index.\n     *\n     * @protected\n     * @param {Number} index Index at which nodes should be inserted.\n     * @param {Iterable.<module:engine/model/node~Node>} nodes Nodes to be inserted.\n     */\n  }, {\n    key: \"_insertNodes\",\n    value: function _insertNodes(index, nodes) {\n      var _this$_nodes;\n      // Validation.\n      var _iterator2 = _createForOfIteratorHelper(nodes),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var node = _step2.value;\n          if (!(node instanceof Node)) {\n            /**\n             * Trying to insert an object which is not a Node instance.\n             *\n             * @error nodelist-insertNodes-not-node\n             */\n            throw new CKEditorError('model-nodelist-insertNodes-not-node: Trying to insert an object which is not a Node instance.', this);\n          }\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      (_this$_nodes = this._nodes).splice.apply(_this$_nodes, [index, 0].concat(_toConsumableArray(nodes)));\n    }\n\n    /**\n     * Removes one or more nodes starting at the given index.\n     *\n     * @protected\n     * @param {Number} indexStart Index of the first node to remove.\n     * @param {Number} [howMany=1] Number of nodes to remove.\n     * @returns {Array.<module:engine/model/node~Node>} Array containing removed nodes.\n     */\n  }, {\n    key: \"_removeNodes\",\n    value: function _removeNodes(indexStart) {\n      var howMany = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      return this._nodes.splice(indexStart, howMany);\n    }\n\n    /**\n     * Converts `NodeList` instance to an array containing nodes that were inserted in the node list. Nodes\n     * are also converted to their plain object representation.\n     *\n     * @returns {Array.<module:engine/model/node~Node>} `NodeList` instance converted to `Array`.\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return this._nodes.map(function (node) {\n        return node.toJSON();\n      });\n    }\n  }]);\n}();\nexport { NodeList as default };","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/operation/attributeoperation\n */\n\nimport Operation from './operation';\nimport Range from '../range';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport { _setAttribute } from './utils';\nimport { isEqual } from 'lodash-es';\n\n/**\n * Operation to change nodes' attribute.\n *\n * Using this class you can add, remove or change value of the attribute.\n *\n * @extends module:engine/model/operation/operation~Operation\n */\nvar AttributeOperation = /*#__PURE__*/function (_Operation) {\n  /**\n   * Creates an operation that changes, removes or adds attributes.\n   *\n   * If only `newValue` is set, attribute will be added on a node. Note that all nodes in operation's range must not\n   * have an attribute with the same key as the added attribute.\n   *\n   * If only `oldValue` is set, then attribute with given key will be removed. Note that all nodes in operation's range\n   * must have an attribute with that key added.\n   *\n   * If both `newValue` and `oldValue` are set, then the operation will change the attribute value. Note that all nodes in\n   * operation's ranges must already have an attribute with given key and `oldValue` as value\n   *\n   * @param {module:engine/model/range~Range} range Range on which the operation should be applied. Must be a flat range.\n   * @param {String} key Key of an attribute to change or remove.\n   * @param {*} oldValue Old value of the attribute with given key or `null`, if attribute was not set before.\n   * @param {*} newValue New value of the attribute with given key or `null`, if operation should remove attribute.\n   * @param {Number|null} baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  function AttributeOperation(range, key, oldValue, newValue, baseVersion) {\n    var _this;\n    _classCallCheck(this, AttributeOperation);\n    _this = _callSuper(this, AttributeOperation, [baseVersion]);\n\n    /**\n     * Range on which operation should be applied.\n     *\n     * @readonly\n     * @member {module:engine/model/range~Range}\n     */\n    _this.range = range.clone();\n\n    /**\n     * Key of an attribute to change or remove.\n     *\n     * @readonly\n     * @member {String}\n     */\n    _this.key = key;\n\n    /**\n     * Old value of the attribute with given key or `null`, if attribute was not set before.\n     *\n     * @readonly\n     * @member {*}\n     */\n    _this.oldValue = oldValue === undefined ? null : oldValue;\n\n    /**\n     * New value of the attribute with given key or `null`, if operation should remove attribute.\n     *\n     * @readonly\n     * @member {*}\n     */\n    _this.newValue = newValue === undefined ? null : newValue;\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(AttributeOperation, _Operation);\n  return _createClass(AttributeOperation, [{\n    key: \"type\",\n    get: function get() {\n      if (this.oldValue === null) {\n        return 'addAttribute';\n      } else if (this.newValue === null) {\n        return 'removeAttribute';\n      } else {\n        return 'changeAttribute';\n      }\n    }\n\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     *\n     * @returns {module:engine/model/operation/attributeoperation~AttributeOperation} Clone of this operation.\n     */\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      return new AttributeOperation(this.range, this.key, this.oldValue, this.newValue, this.baseVersion);\n    }\n\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     *\n     * @returns {module:engine/model/operation/attributeoperation~AttributeOperation}\n     */\n  }, {\n    key: \"getReversed\",\n    value: function getReversed() {\n      return new AttributeOperation(this.range, this.key, this.newValue, this.oldValue, this.baseVersion + 1);\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var json = _superPropGet(AttributeOperation, \"toJSON\", this, 3)([]);\n      json.range = this.range.toJSON();\n      return json;\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"_validate\",\n    value: function _validate() {\n      if (!this.range.isFlat) {\n        /**\n         * The range to change is not flat.\n         *\n         * @error attribute-operation-range-not-flat\n         */\n        throw new CKEditorError('attribute-operation-range-not-flat: The range to change is not flat.', this);\n      }\n      var _iterator = _createForOfIteratorHelper(this.range.getItems({\n          shallow: true\n        })),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var item = _step.value;\n          if (this.oldValue !== null && !isEqual(item.getAttribute(this.key), this.oldValue)) {\n            /**\n             * Changed node has different attribute value than operation's old attribute value.\n             *\n             * @error attribute-operation-wrong-old-value\n             * @param {module:engine/model/item~Item} item\n             * @param {String} key\n             * @param {*} value\n             */\n            throw new CKEditorError('attribute-operation-wrong-old-value: Changed node has different attribute value than operation\\'s ' + 'old attribute value.', this, {\n              item: item,\n              key: this.key,\n              value: this.oldValue\n            });\n          }\n          if (this.oldValue === null && this.newValue !== null && item.hasAttribute(this.key)) {\n            /**\n             * The attribute with given key already exists for the given node.\n             *\n             * @error attribute-operation-attribute-exists\n             * @param {module:engine/model/node~Node} node\n             * @param {String} key\n             */\n            throw new CKEditorError('attribute-operation-attribute-exists: The attribute with given key already exists.', this, {\n              node: item,\n              key: this.key\n            });\n          }\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"_execute\",\n    value: function _execute() {\n      // If value to set is same as old value, don't do anything.\n      if (!isEqual(this.oldValue, this.newValue)) {\n        // Execution.\n        _setAttribute(this.range, this.key, this.newValue);\n      }\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }], [{\n    key: \"className\",\n    get: function get() {\n      return 'AttributeOperation';\n    }\n\n    /**\n     * Creates `AttributeOperation` object from deserilized object, i.e. from parsed JSON string.\n     *\n     * @param {Object} json Deserialized JSON object.\n     * @param {module:engine/model/document~Document} document Document on which this operation will be applied.\n     * @returns {module:engine/model/operation/attributeoperation~AttributeOperation}\n     */\n  }, {\n    key: \"fromJSON\",\n    value: function fromJSON(json, document) {\n      return new AttributeOperation(Range.fromJSON(json.range, document), json.key, json.oldValue, json.newValue, json.baseVersion);\n    }\n  }]);\n}(Operation);\nexport { AttributeOperation as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/operation/detachoperation\n */\n\nimport Operation from './operation';\nimport Range from '../range';\nimport { _remove } from './utils';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * Operation to permanently remove node from detached root.\n * Note this operation is only a local operation and won't be send to the other clients.\n *\n * @extends module:engine/model/operation/operation~Operation\n */\nvar DetachOperation = /*#__PURE__*/function (_Operation) {\n  /**\n   * Creates an insert operation.\n   *\n   * @param {module:engine/model/position~Position} sourcePosition\n   * Position before the first {@link module:engine/model/item~Item model item} to move.\n   * @param {Number} howMany Offset size of moved range. Moved range will start from `sourcePosition` and end at\n   * `sourcePosition` with offset shifted by `howMany`.\n   */\n  function DetachOperation(sourcePosition, howMany) {\n    var _this;\n    _classCallCheck(this, DetachOperation);\n    _this = _callSuper(this, DetachOperation, [null]);\n\n    /**\n     * Position before the first {@link module:engine/model/item~Item model item} to detach.\n     *\n     * @member {module:engine/model/position~Position} #sourcePosition\n     */\n    _this.sourcePosition = sourcePosition.clone();\n\n    /**\n     * Offset size of moved range.\n     *\n     * @member {Number} #howMany\n     */\n    _this.howMany = howMany;\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(DetachOperation, _Operation);\n  return _createClass(DetachOperation, [{\n    key: \"type\",\n    get: function get() {\n      return 'detach';\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var json = _superPropGet(DetachOperation, \"toJSON\", this, 3)([]);\n      json.sourcePosition = this.sourcePosition.toJSON();\n      return json;\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"_validate\",\n    value: function _validate() {\n      if (this.sourcePosition.root.document) {\n        /**\n         * Cannot detach document node.\n         *\n         * @error detach-operation-on-document-node\n         */\n        throw new CKEditorError('detach-operation-on-document-node: Cannot detach document node.', this);\n      }\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"_execute\",\n    value: function _execute() {\n      _remove(Range._createFromPositionAndShift(this.sourcePosition, this.howMany));\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }], [{\n    key: \"className\",\n    get: function get() {\n      return 'DetachOperation';\n    }\n  }]);\n}(Operation);\nexport { DetachOperation as default };","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _toConsumableArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.object.to-string.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/operation/insertoperation\n */\n\nimport Operation from './operation';\nimport Position from '../position';\nimport NodeList from '../nodelist';\nimport MoveOperation from './moveoperation';\nimport { _insert, _normalizeNodes } from './utils';\nimport Text from '../text';\nimport Element from '../element';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * Operation to insert one or more nodes at given position in the model.\n *\n * @extends module:engine/model/operation/operation~Operation\n */\nvar InsertOperation = /*#__PURE__*/function (_Operation) {\n  /**\n   * Creates an insert operation.\n   *\n   * @param {module:engine/model/position~Position} position Position of insertion.\n   * @param {module:engine/model/node~NodeSet} nodes The list of nodes to be inserted.\n   * @param {Number|null} baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  function InsertOperation(position, nodes, baseVersion) {\n    var _this;\n    _classCallCheck(this, InsertOperation);\n    _this = _callSuper(this, InsertOperation, [baseVersion]);\n\n    /**\n     * Position of insertion.\n     *\n     * @readonly\n     * @member {module:engine/model/position~Position} module:engine/model/operation/insertoperation~InsertOperation#position\n     */\n    _this.position = position.clone();\n    _this.position.stickiness = 'toNone';\n\n    /**\n     * List of nodes to insert.\n     *\n     * @readonly\n     * @member {module:engine/model/nodelist~NodeList} module:engine/model/operation/insertoperation~InsertOperation#nodeList\n     */\n    _this.nodes = new NodeList(_normalizeNodes(nodes));\n\n    /**\n     * Flag deciding how the operation should be transformed. If set to `true`, nodes might get additional attributes\n     * during operational transformation. This happens when the operation insertion position is inside of a range\n     * where attributes have changed.\n     *\n     * @member {Boolean} module:engine/model/operation/insertoperation~InsertOperation#shouldReceiveAttributes\n     */\n    _this.shouldReceiveAttributes = false;\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(InsertOperation, _Operation);\n  return _createClass(InsertOperation, [{\n    key: \"type\",\n    get: function get() {\n      return 'insert';\n    }\n\n    /**\n     * Total offset size of inserted nodes.\n     *\n     * @returns {Number}\n     */\n  }, {\n    key: \"howMany\",\n    get: function get() {\n      return this.nodes.maxOffset;\n    }\n\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     *\n     * @returns {module:engine/model/operation/insertoperation~InsertOperation} Clone of this operation.\n     */\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      var nodes = new NodeList(_toConsumableArray(this.nodes).map(function (node) {\n        return node._clone(true);\n      }));\n      var insert = new InsertOperation(this.position, nodes, this.baseVersion);\n      insert.shouldReceiveAttributes = this.shouldReceiveAttributes;\n      return insert;\n    }\n\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     *\n     * @returns {module:engine/model/operation/moveoperation~MoveOperation}\n     */\n  }, {\n    key: \"getReversed\",\n    value: function getReversed() {\n      var graveyard = this.position.root.document.graveyard;\n      var gyPosition = new Position(graveyard, [0]);\n      return new MoveOperation(this.position, this.nodes.maxOffset, gyPosition, this.baseVersion + 1);\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"_validate\",\n    value: function _validate() {\n      var targetElement = this.position.parent;\n      if (!targetElement || targetElement.maxOffset < this.position.offset) {\n        /**\n         * Insertion position is invalid.\n         *\n         * @error insert-operation-position-invalid\n         */\n        throw new CKEditorError('insert-operation-position-invalid: Insertion position is invalid.', this);\n      }\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"_execute\",\n    value: function _execute() {\n      // What happens here is that we want original nodes be passed to writer because we want original nodes\n      // to be inserted to the model. But in InsertOperation, we want to keep those nodes as they were added\n      // to the operation, not modified. For example, text nodes can get merged or cropped while Elements can\n      // get children. It is important that InsertOperation has the copy of original nodes in intact state.\n      var originalNodes = this.nodes;\n      this.nodes = new NodeList(_toConsumableArray(originalNodes).map(function (node) {\n        return node._clone(true);\n      }));\n      _insert(this.position, originalNodes);\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var json = _superPropGet(InsertOperation, \"toJSON\", this, 3)([]);\n      json.position = this.position.toJSON();\n      json.nodes = this.nodes.toJSON();\n      return json;\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }], [{\n    key: \"className\",\n    get: function get() {\n      return 'InsertOperation';\n    }\n\n    /**\n     * Creates `InsertOperation` object from deserilized object, i.e. from parsed JSON string.\n     *\n     * @param {Object} json Deserialized JSON object.\n     * @param {module:engine/model/document~Document} document Document on which this operation will be applied.\n     * @returns {module:engine/model/operation/insertoperation~InsertOperation}\n     */\n  }, {\n    key: \"fromJSON\",\n    value: function fromJSON(json, document) {\n      var children = [];\n      var _iterator = _createForOfIteratorHelper(json.nodes),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var child = _step.value;\n          if (child.name) {\n            // If child has name property, it is an Element.\n            children.push(Element.fromJSON(child));\n          } else {\n            // Otherwise, it is a Text node.\n            children.push(Text.fromJSON(child));\n          }\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      var insert = new InsertOperation(Position.fromJSON(json.position, document), children, json.baseVersion);\n      insert.shouldReceiveAttributes = json.shouldReceiveAttributes;\n      return insert;\n    }\n  }]);\n}(Operation);\nexport { InsertOperation as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.function.name.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/operation/markeroperation\n */\n\nimport Operation from './operation';\nimport Range from '../range';\n\n/**\n * @extends module:engine/model/operation/operation~Operation\n */\nvar MarkerOperation = /*#__PURE__*/function (_Operation) {\n  /**\n   * @param {String} name Marker name.\n   * @param {module:engine/model/range~Range} oldRange Marker range before the change.\n   * @param {module:engine/model/range~Range} newRange Marker range after the change.\n   * @param {module:engine/model/markercollection~MarkerCollection} markers Marker collection on which change should be executed.\n   * @param {Boolean} affectsData Specifies whether the marker operation affects the data produced by the data pipeline\n   * (is persisted in the editor's data).\n   * @param {Number|null} baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  function MarkerOperation(name, oldRange, newRange, markers, affectsData, baseVersion) {\n    var _this;\n    _classCallCheck(this, MarkerOperation);\n    _this = _callSuper(this, MarkerOperation, [baseVersion]);\n\n    /**\n     * Marker name.\n     *\n     * @readonly\n     * @member {String}\n     */\n    _this.name = name;\n\n    /**\n     * Marker range before the change.\n     *\n     * @readonly\n     * @member {module:engine/model/range~Range}\n     */\n    _this.oldRange = oldRange ? oldRange.clone() : null;\n\n    /**\n     * Marker range after the change.\n     *\n     * @readonly\n     * @member {module:engine/model/range~Range}\n     */\n    _this.newRange = newRange ? newRange.clone() : null;\n\n    /**\n     * Specifies whether the marker operation affects the data produced by the data pipeline\n     * (is persisted in the editor's data).\n     *\n     * @readonly\n     * @member {Boolean}\n     */\n    _this.affectsData = affectsData;\n\n    /**\n     * Marker collection on which change should be executed.\n     *\n     * @private\n     * @member {module:engine/model/markercollection~MarkerCollection}\n     */\n    _this._markers = markers;\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(MarkerOperation, _Operation);\n  return _createClass(MarkerOperation, [{\n    key: \"type\",\n    get: function get() {\n      return 'marker';\n    }\n\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     *\n     * @returns {module:engine/model/operation/markeroperation~MarkerOperation} Clone of this operation.\n     */\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      return new MarkerOperation(this.name, this.oldRange, this.newRange, this._markers, this.affectsData, this.baseVersion);\n    }\n\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     *\n     * @returns {module:engine/model/operation/markeroperation~MarkerOperation}\n     */\n  }, {\n    key: \"getReversed\",\n    value: function getReversed() {\n      return new MarkerOperation(this.name, this.newRange, this.oldRange, this._markers, this.affectsData, this.baseVersion + 1);\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"_execute\",\n    value: function _execute() {\n      var type = this.newRange ? '_set' : '_remove';\n      this._markers[type](this.name, this.newRange, true, this.affectsData);\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var json = _superPropGet(MarkerOperation, \"toJSON\", this, 3)([]);\n      if (this.oldRange) {\n        json.oldRange = this.oldRange.toJSON();\n      }\n      if (this.newRange) {\n        json.newRange = this.newRange.toJSON();\n      }\n      delete json._markers;\n      return json;\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }], [{\n    key: \"className\",\n    get: function get() {\n      return 'MarkerOperation';\n    }\n\n    /**\n     * Creates `MarkerOperation` object from deserialized object, i.e. from parsed JSON string.\n     *\n     * @param {Object} json Deserialized JSON object.\n     * @param {module:engine/model/document~Document} document Document on which this operation will be applied.\n     * @returns {module:engine/model/operation/markeroperation~MarkerOperation}\n     */\n  }, {\n    key: \"fromJSON\",\n    value: function fromJSON(json, document) {\n      return new MarkerOperation(json.name, json.oldRange ? Range.fromJSON(json.oldRange, document) : null, json.newRange ? Range.fromJSON(json.newRange, document) : null, document.model.markers, json.affectsData, json.baseVersion);\n    }\n  }]);\n}(Operation);\nexport { MarkerOperation as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.number.constructor.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/operation/mergeoperation\n */\n\nimport Operation from './operation';\nimport SplitOperation from './splitoperation';\nimport Position from '../position';\nimport Range from '../range';\nimport { _move } from './utils';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * Operation to merge two {@link module:engine/model/element~Element elements}.\n *\n * The merged element is the parent of {@link ~MergeOperation#sourcePosition} and it is merged into the parent of\n * {@link ~MergeOperation#targetPosition}. All nodes from the merged element are moved to {@link ~MergeOperation#targetPosition}.\n *\n * The merged element is moved to the graveyard at {@link ~MergeOperation#graveyardPosition}.\n *\n * @extends module:engine/model/operation/operation~Operation\n */\nvar MergeOperation = /*#__PURE__*/function (_Operation) {\n  /**\n   * Creates a merge operation.\n   *\n   * @param {module:engine/model/position~Position} sourcePosition Position inside the merged element. All nodes from that\n   * element after that position will be moved to {@link ~#targetPosition}.\n   * @param {Number} howMany Summary offset size of nodes which will be moved from the merged element to the new parent.\n   * @param {module:engine/model/position~Position} targetPosition Position which the nodes from the merged elements will be moved to.\n   * @param {module:engine/model/position~Position} graveyardPosition Position in graveyard to which the merged element will be moved.\n   * @param {Number|null} baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  function MergeOperation(sourcePosition, howMany, targetPosition, graveyardPosition, baseVersion) {\n    var _this;\n    _classCallCheck(this, MergeOperation);\n    _this = _callSuper(this, MergeOperation, [baseVersion]);\n\n    /**\n     * Position inside the merged element. All nodes from that element after that position will be moved to {@link ~#targetPosition}.\n     *\n     * @member {module:engine/model/position~Position} module:engine/model/operation/mergeoperation~MergeOperation#sourcePosition\n     */\n    _this.sourcePosition = sourcePosition.clone();\n    // This is, and should always remain, the first position in its parent.\n    _this.sourcePosition.stickiness = 'toPrevious';\n\n    /**\n     * Summary offset size of nodes which will be moved from the merged element to the new parent.\n     *\n     * @member {Number} module:engine/model/operation/mergeoperation~MergeOperation#howMany\n     */\n    _this.howMany = howMany;\n\n    /**\n     * Position which the nodes from the merged elements will be moved to.\n     *\n     * @member {module:engine/model/position~Position} module:engine/model/operation/mergeoperation~MergeOperation#targetPosition\n     */\n    _this.targetPosition = targetPosition.clone();\n    // Except of a rare scenario in `MergeOperation` x `MergeOperation` transformation,\n    // this is, and should always remain, the last position in its parent.\n    _this.targetPosition.stickiness = 'toNext';\n\n    /**\n     * Position in graveyard to which the merged element will be moved.\n     *\n     * @member {module:engine/model/position~Position} module:engine/model/operation/mergeoperation~MergeOperation#graveyardPosition\n     */\n    _this.graveyardPosition = graveyardPosition.clone();\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(MergeOperation, _Operation);\n  return _createClass(MergeOperation, [{\n    key: \"type\",\n    get: function get() {\n      return 'merge';\n    }\n\n    /**\n     * Position before the merged element (which will be deleted).\n     *\n     * @readonly\n     * @type {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"deletionPosition\",\n    get: function get() {\n      return new Position(this.sourcePosition.root, this.sourcePosition.path.slice(0, -1));\n    }\n\n    /**\n     * Artificial range that contains all the nodes from the merged element that will be moved to {@link ~MergeOperation#sourcePosition}.\n     * The range starts at {@link ~MergeOperation#sourcePosition} and ends in the same parent, at `POSITIVE_INFINITY` offset.\n     *\n     * @readonly\n     * @type {module:engine/model/range~Range}\n     */\n  }, {\n    key: \"movedRange\",\n    get: function get() {\n      var end = this.sourcePosition.getShiftedBy(Number.POSITIVE_INFINITY);\n      return new Range(this.sourcePosition, end);\n    }\n\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     *\n     * @returns {module:engine/model/operation/mergeoperation~MergeOperation} Clone of this operation.\n     */\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      return new this.constructor(this.sourcePosition, this.howMany, this.targetPosition, this.graveyardPosition, this.baseVersion);\n    }\n\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     *\n     * @returns {module:engine/model/operation/splitoperation~SplitOperation}\n     */\n  }, {\n    key: \"getReversed\",\n    value: function getReversed() {\n      // Positions in this method are transformed by this merge operation because the split operation bases on\n      // the context after this merge operation happened (because split operation reverses it).\n      // So we need to acknowledge that the merge operation happened and those positions changed a little.\n      var targetPosition = this.targetPosition._getTransformedByMergeOperation(this);\n      var path = this.sourcePosition.path.slice(0, -1);\n      var insertionPosition = new Position(this.sourcePosition.root, path)._getTransformedByMergeOperation(this);\n      var split = new SplitOperation(targetPosition, this.howMany, this.graveyardPosition, this.baseVersion + 1);\n      split.insertionPosition = insertionPosition;\n      return split;\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"_validate\",\n    value: function _validate() {\n      var sourceElement = this.sourcePosition.parent;\n      var targetElement = this.targetPosition.parent;\n\n      // Validate whether merge operation has correct parameters.\n      if (!sourceElement.parent) {\n        /**\n         * Merge source position is invalid. The element to be merged must have a parent node.\n         *\n         * @error merge-operation-source-position-invalid\n         */\n        throw new CKEditorError('merge-operation-source-position-invalid: Merge source position is invalid.', this);\n      } else if (!targetElement.parent) {\n        /**\n         * Merge target position is invalid. The element to be merged must have a parent node.\n         *\n         * @error merge-operation-target-position-invalid\n         */\n        throw new CKEditorError('merge-operation-target-position-invalid: Merge target position is invalid.', this);\n      } else if (this.howMany != sourceElement.maxOffset) {\n        /**\n         * Merge operation specifies wrong number of nodes to move.\n         *\n         * @error merge-operation-how-many-invalid\n         */\n        throw new CKEditorError('merge-operation-how-many-invalid: Merge operation specifies wrong number of nodes to move.', this);\n      }\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"_execute\",\n    value: function _execute() {\n      var mergedElement = this.sourcePosition.parent;\n      var sourceRange = Range._createIn(mergedElement);\n      _move(sourceRange, this.targetPosition);\n      _move(Range._createOn(mergedElement), this.graveyardPosition);\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var json = _superPropGet(MergeOperation, \"toJSON\", this, 3)([]);\n      json.sourcePosition = json.sourcePosition.toJSON();\n      json.targetPosition = json.targetPosition.toJSON();\n      json.graveyardPosition = json.graveyardPosition.toJSON();\n      return json;\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }], [{\n    key: \"className\",\n    get: function get() {\n      return 'MergeOperation';\n    }\n\n    /**\n     * Creates `MergeOperation` object from deserilized object, i.e. from parsed JSON string.\n     *\n     * @param {Object} json Deserialized JSON object.\n     * @param {module:engine/model/document~Document} document Document on which this operation will be applied.\n     * @returns {module:engine/model/operation/mergeoperation~MergeOperation}\n     */\n  }, {\n    key: \"fromJSON\",\n    value: function fromJSON(json, document) {\n      var sourcePosition = Position.fromJSON(json.sourcePosition, document);\n      var targetPosition = Position.fromJSON(json.targetPosition, document);\n      var graveyardPosition = Position.fromJSON(json.graveyardPosition, document);\n      return new this(sourcePosition, json.howMany, targetPosition, graveyardPosition, json.baseVersion);\n    }\n  }]);\n}(Operation);\nexport { MergeOperation as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/operation/moveoperation\n */\n\nimport Operation from './operation';\nimport Position from '../position';\nimport Range from '../range';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport compareArrays from '@ckeditor/ckeditor5-utils/src/comparearrays';\nimport { _move } from './utils';\n\n/**\n * Operation to move a range of {@link module:engine/model/item~Item model items}\n * to given {@link module:engine/model/position~Position target position}.\n *\n * @extends module:engine/model/operation/operation~Operation\n */\nvar MoveOperation = /*#__PURE__*/function (_Operation) {\n  /**\n   * Creates a move operation.\n   *\n   * @param {module:engine/model/position~Position} sourcePosition\n   * Position before the first {@link module:engine/model/item~Item model item} to move.\n   * @param {Number} howMany Offset size of moved range. Moved range will start from `sourcePosition` and end at\n   * `sourcePosition` with offset shifted by `howMany`.\n   * @param {module:engine/model/position~Position} targetPosition Position at which moved nodes will be inserted.\n   * @param {Number|null} baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  function MoveOperation(sourcePosition, howMany, targetPosition, baseVersion) {\n    var _this;\n    _classCallCheck(this, MoveOperation);\n    _this = _callSuper(this, MoveOperation, [baseVersion]);\n\n    /**\n     * Position before the first {@link module:engine/model/item~Item model item} to move.\n     *\n     * @member {module:engine/model/position~Position} module:engine/model/operation/moveoperation~MoveOperation#sourcePosition\n     */\n    _this.sourcePosition = sourcePosition.clone();\n    // `'toNext'` because `sourcePosition` is a bit like a start of the moved range.\n    _this.sourcePosition.stickiness = 'toNext';\n\n    /**\n     * Offset size of moved range.\n     *\n     * @member {Number} module:engine/model/operation/moveoperation~MoveOperation#howMany\n     */\n    _this.howMany = howMany;\n\n    /**\n     * Position at which moved nodes will be inserted.\n     *\n     * @member {module:engine/model/position~Position} module:engine/model/operation/moveoperation~MoveOperation#targetPosition\n     */\n    _this.targetPosition = targetPosition.clone();\n    _this.targetPosition.stickiness = 'toNone';\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(MoveOperation, _Operation);\n  return _createClass(MoveOperation, [{\n    key: \"type\",\n    get: function get() {\n      if (this.targetPosition.root.rootName == '$graveyard') {\n        return 'remove';\n      } else if (this.sourcePosition.root.rootName == '$graveyard') {\n        return 'reinsert';\n      }\n      return 'move';\n    }\n\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     *\n     * @returns {module:engine/model/operation/moveoperation~MoveOperation} Clone of this operation.\n     */\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      return new this.constructor(this.sourcePosition, this.howMany, this.targetPosition, this.baseVersion);\n    }\n\n    /**\n     * Returns the start position of the moved range after it got moved. This may be different than\n     * {@link module:engine/model/operation/moveoperation~MoveOperation#targetPosition} in some cases, i.e. when a range is moved\n     * inside the same parent but {@link module:engine/model/operation/moveoperation~MoveOperation#targetPosition targetPosition}\n     * is after {@link module:engine/model/operation/moveoperation~MoveOperation#sourcePosition sourcePosition}.\n     *\n     *\t\t vv              vv\n     *\t\tabcdefg ===> adefbcg\n     *\t\t     ^          ^\n     *\t\t     targetPos\tmovedRangeStart\n     *\t\t     offset 6\toffset 4\n     *\n     * @returns {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"getMovedRangeStart\",\n    value: function getMovedRangeStart() {\n      return this.targetPosition._getTransformedByDeletion(this.sourcePosition, this.howMany);\n    }\n\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     *\n     * @returns {module:engine/model/operation/moveoperation~MoveOperation}\n     */\n  }, {\n    key: \"getReversed\",\n    value: function getReversed() {\n      var newTargetPosition = this.sourcePosition._getTransformedByInsertion(this.targetPosition, this.howMany);\n      return new this.constructor(this.getMovedRangeStart(), this.howMany, newTargetPosition, this.baseVersion + 1);\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"_validate\",\n    value: function _validate() {\n      var sourceElement = this.sourcePosition.parent;\n      var targetElement = this.targetPosition.parent;\n      var sourceOffset = this.sourcePosition.offset;\n      var targetOffset = this.targetPosition.offset;\n\n      // Validate whether move operation has correct parameters.\n      // Validation is pretty complex but move operation is one of the core ways to manipulate the document state.\n      // We expect that many errors might be connected with one of scenarios described below.\n      if (sourceOffset + this.howMany > sourceElement.maxOffset) {\n        /**\n         * The nodes which should be moved do not exist.\n         *\n         * @error move-operation-nodes-do-not-exist\n         */\n        throw new CKEditorError('move-operation-nodes-do-not-exist: The nodes which should be moved do not exist.', this);\n      } else if (sourceElement === targetElement && sourceOffset < targetOffset && targetOffset < sourceOffset + this.howMany) {\n        /**\n         * Trying to move a range of nodes into the middle of that range.\n         *\n         * @error move-operation-range-into-itself\n         */\n        throw new CKEditorError('move-operation-range-into-itself: Trying to move a range of nodes to the inside of that range.', this);\n      } else if (this.sourcePosition.root == this.targetPosition.root) {\n        if (compareArrays(this.sourcePosition.getParentPath(), this.targetPosition.getParentPath()) == 'prefix') {\n          var i = this.sourcePosition.path.length - 1;\n          if (this.targetPosition.path[i] >= sourceOffset && this.targetPosition.path[i] < sourceOffset + this.howMany) {\n            /**\n             * Trying to move a range of nodes into one of nodes from that range.\n             *\n             * @error move-operation-node-into-itself\n             */\n            throw new CKEditorError('move-operation-node-into-itself: Trying to move a range of nodes into one of nodes from that range.', this);\n          }\n        }\n      }\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"_execute\",\n    value: function _execute() {\n      _move(Range._createFromPositionAndShift(this.sourcePosition, this.howMany), this.targetPosition);\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var json = _superPropGet(MoveOperation, \"toJSON\", this, 3)([]);\n      json.sourcePosition = this.sourcePosition.toJSON();\n      json.targetPosition = this.targetPosition.toJSON();\n      return json;\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }], [{\n    key: \"className\",\n    get: function get() {\n      return 'MoveOperation';\n    }\n\n    /**\n     * Creates `MoveOperation` object from deserilized object, i.e. from parsed JSON string.\n     *\n     * @param {Object} json Deserialized JSON object.\n     * @param {module:engine/model/document~Document} document Document on which this operation will be applied.\n     * @returns {module:engine/model/operation/moveoperation~MoveOperation}\n     */\n  }, {\n    key: \"fromJSON\",\n    value: function fromJSON(json, document) {\n      var sourcePosition = Position.fromJSON(json.sourcePosition, document);\n      var targetPosition = Position.fromJSON(json.targetPosition, document);\n      return new this(sourcePosition, json.howMany, targetPosition, json.baseVersion);\n    }\n  }]);\n}(Operation);\nexport { MoveOperation as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/operation/nooperation\n */\n\nimport Operation from './operation';\n\n/**\n * Operation which is doing nothing (\"empty operation\", \"do-nothing operation\", \"noop\"). This is an operation,\n * which when executed does not change the tree model. It still has some parameters defined for transformation purposes.\n *\n * In most cases this operation is a result of transforming operations. When transformation returns\n * {@link module:engine/model/operation/nooperation~NoOperation} it means that changes done by the transformed operation\n * have already been applied.\n *\n * @extends module:engine/model/operation/operation~Operation\n */\nvar NoOperation = /*#__PURE__*/function (_Operation) {\n  function NoOperation() {\n    _classCallCheck(this, NoOperation);\n    return _callSuper(this, NoOperation, arguments);\n  }\n  _inherits(NoOperation, _Operation);\n  return _createClass(NoOperation, [{\n    key: \"type\",\n    get: function get() {\n      return 'noop';\n    }\n\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     *\n     * @returns {module:engine/model/operation/nooperation~NoOperation} Clone of this operation.\n     */\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      return new NoOperation(this.baseVersion);\n    }\n\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     *\n     * @returns {module:engine/model/operation/nooperation~NoOperation}\n     */\n  }, {\n    key: \"getReversed\",\n    value: function getReversed() {\n      return new NoOperation(this.baseVersion + 1);\n    }\n  }, {\n    key: \"_execute\",\n    value: function _execute() {}\n\n    /**\n     * @inheritDoc\n     */\n  }], [{\n    key: \"className\",\n    get: function get() {\n      return 'NoOperation';\n    }\n  }]);\n}(Operation);\nexport { NoOperation as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/operation/operation\n */\n/**\n * Abstract base operation class.\n *\n * @abstract\n */\nvar Operation = /*#__PURE__*/function () {\n  /**\n   * Base operation constructor.\n   *\n   * @param {Number|null} baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  function Operation(baseVersion) {\n    _classCallCheck(this, Operation);\n    /**\n     * {@link module:engine/model/document~Document#version} on which operation can be applied. If you try to\n     * {@link module:engine/model/model~Model#applyOperation apply} operation with different base version than the\n     * {@link module:engine/model/document~Document#version document version} the\n     * {@link module:utils/ckeditorerror~CKEditorError model-document-applyOperation-wrong-version} error is thrown.\n     *\n     * @member {Number}\n     */\n    this.baseVersion = baseVersion;\n\n    /**\n     * Defines whether operation is executed on attached or detached {@link module:engine/model/item~Item items}.\n     *\n     * @readonly\n     * @member {Boolean} #isDocumentOperation\n     */\n    this.isDocumentOperation = this.baseVersion !== null;\n\n    /**\n     * {@link module:engine/model/batch~Batch Batch} to which the operation is added or `null` if the operation is not\n     * added to any batch yet.\n     *\n     * @member {module:engine/model/batch~Batch|null} #batch\n     */\n    this.batch = null;\n\n    /**\n     * Operation type.\n     *\n     * @readonly\n     * @member {String} #type\n     */\n\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     *\n     * @method #clone\n     * @returns {module:engine/model/operation/operation~Operation} Clone of this operation.\n     */\n\n    /**\n     * Creates and returns a reverse operation. Reverse operation when executed right after\n     * the original operation will bring back tree model state to the point before the original\n     * operation execution. In other words, it reverses changes done by the original operation.\n     *\n     * Keep in mind that tree model state may change since executing the original operation,\n     * so reverse operation will be \"outdated\". In that case you will need to transform it by\n     * all operations that were executed after the original operation.\n     *\n     * @method #getReversed\n     * @returns {module:engine/model/operation/operation~Operation} Reversed operation.\n     */\n\n    /**\n     * Executes the operation - modifications described by the operation properties will be applied to the model tree.\n     *\n     * @protected\n     * @method #_execute\n     */\n  }\n\n  /**\n   * Checks whether the operation's parameters are correct and the operation can be correctly executed. Throws\n   * an error if operation is not valid.\n   *\n   * @protected\n   * @method #_validate\n   */\n  return _createClass(Operation, [{\n    key: \"_validate\",\n    value: function _validate() {}\n\n    /**\n     * Custom toJSON method to solve child-parent circular dependencies.\n     *\n     * @method #toJSON\n     * @returns {Object} Clone of this object with the operation property replaced with string.\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      // This method creates only a shallow copy, all nested objects should be defined separately.\n      // See https://github.com/ckeditor/ckeditor5-engine/issues/1477.\n      var json = Object.assign({}, this);\n      json.__className = this.constructor.className;\n\n      // Remove reference to the parent `Batch` to avoid circular dependencies.\n      delete json.batch;\n\n      // Only document operations are shared with other clients so it is not necessary to keep this information.\n      delete json.isDocumentOperation;\n      return json;\n    }\n\n    /**\n     * Name of the operation class used for serialization.\n     *\n     * @type {String}\n     */\n  }], [{\n    key: \"className\",\n    get: function get() {\n      return 'Operation';\n    }\n\n    /**\n     * Creates Operation object from deserilized object, i.e. from parsed JSON string.\n     *\n     * @param {Object} json Deserialized JSON object.\n     * @param {module:engine/model/document~Document} doc Document on which this operation will be applied.\n     * @returns {module:engine/model/operation/operation~Operation}\n     */\n  }, {\n    key: \"fromJSON\",\n    value: function fromJSON(json) {\n      return new this(json.baseVersion);\n    }\n  }]);\n}();\nexport { Operation as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.function.name.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/operation/renameoperation\n */\n\nimport Operation from './operation';\nimport Element from '../element';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport Position from '../position';\n\n/**\n * Operation to change element's name.\n *\n * Using this class you can change element's name.\n *\n * @extends module:engine/model/operation/operation~Operation\n */\nvar RenameOperation = /*#__PURE__*/function (_Operation) {\n  /**\n   * Creates an operation that changes element's name.\n   *\n   * @param {module:engine/model/position~Position} position Position before an element to change.\n   * @param {String} oldName Current name of the element.\n   * @param {String} newName New name for the element.\n   * @param {Number|null} baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  function RenameOperation(position, oldName, newName, baseVersion) {\n    var _this;\n    _classCallCheck(this, RenameOperation);\n    _this = _callSuper(this, RenameOperation, [baseVersion]);\n\n    /**\n     * Position before an element to change.\n     *\n     * @member {module:engine/model/position~Position} module:engine/model/operation/renameoperation~RenameOperation#position\n     */\n    _this.position = position;\n    // This position sticks to the next node because it is a position before the node that we want to change.\n    _this.position.stickiness = 'toNext';\n\n    /**\n     * Current name of the element.\n     *\n     * @member {String} module:engine/model/operation/renameoperation~RenameOperation#oldName\n     */\n    _this.oldName = oldName;\n\n    /**\n     * New name for the element.\n     *\n     * @member {String} module:engine/model/operation/renameoperation~RenameOperation#newName\n     */\n    _this.newName = newName;\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(RenameOperation, _Operation);\n  return _createClass(RenameOperation, [{\n    key: \"type\",\n    get: function get() {\n      return 'rename';\n    }\n\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     *\n     * @returns {module:engine/model/operation/renameoperation~RenameOperation} Clone of this operation.\n     */\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      return new RenameOperation(this.position.clone(), this.oldName, this.newName, this.baseVersion);\n    }\n\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     *\n     * @returns {module:engine/model/operation/renameoperation~RenameOperation}\n     */\n  }, {\n    key: \"getReversed\",\n    value: function getReversed() {\n      return new RenameOperation(this.position.clone(), this.newName, this.oldName, this.baseVersion + 1);\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"_validate\",\n    value: function _validate() {\n      var element = this.position.nodeAfter;\n      if (!(element instanceof Element)) {\n        /**\n         * Given position is invalid or node after it is not instance of Element.\n         *\n         * @error rename-operation-wrong-position\n         */\n        throw new CKEditorError('rename-operation-wrong-position: Given position is invalid or node after it is not an instance of Element.', this);\n      } else if (element.name !== this.oldName) {\n        /**\n         * Element to change has different name than operation's old name.\n         *\n         * @error rename-operation-wrong-name\n         */\n        throw new CKEditorError('rename-operation-wrong-name: Element to change has different name than operation\\'s old name.', this);\n      }\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"_execute\",\n    value: function _execute() {\n      var element = this.position.nodeAfter;\n      element.name = this.newName;\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var json = _superPropGet(RenameOperation, \"toJSON\", this, 3)([]);\n      json.position = this.position.toJSON();\n      return json;\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }], [{\n    key: \"className\",\n    get: function get() {\n      return 'RenameOperation';\n    }\n\n    /**\n     * Creates `RenameOperation` object from deserialized object, i.e. from parsed JSON string.\n     *\n     * @param {Object} json Deserialized JSON object.\n     * @param {module:engine/model/document~Document} document Document on which this operation will be applied.\n     * @returns {module:engine/model/operation/attributeoperation~AttributeOperation}\n     */\n  }, {\n    key: \"fromJSON\",\n    value: function fromJSON(json, document) {\n      return new RenameOperation(Position.fromJSON(json.position, document), json.oldName, json.newName, json.baseVersion);\n    }\n  }]);\n}(Operation);\nexport { RenameOperation as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/operation/rootattributeoperation\n */\n\nimport Operation from './operation';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * Operation to change root element's attribute. Using this class you can add, remove or change value of the attribute.\n *\n * This operation is needed, because root elements can't be changed through\n * @link module:engine/model/operation/attributeoperation~AttributeOperation}.\n * It is because {@link module:engine/model/operation/attributeoperation~AttributeOperation}\n * requires a range to change and root element can't\n * be a part of range because every {@link module:engine/model/position~Position} has to be inside a root.\n * {@link module:engine/model/position~Position} can't be created before a root element.\n *\n * @extends module:engine/model/operation/operation~Operation\n */\nvar RootAttributeOperation = /*#__PURE__*/function (_Operation) {\n  /**\n   * Creates an operation that changes, removes or adds attributes on root element.\n   *\n   * @see module:engine/model/operation/attributeoperation~AttributeOperation\n   * @param {module:engine/model/rootelement~RootElement} root Root element to change.\n   * @param {String} key Key of an attribute to change or remove.\n   * @param {*} oldValue Old value of the attribute with given key or `null` if adding a new attribute.\n   * @param {*} newValue New value to set for the attribute. If `null`, then the operation just removes the attribute.\n   * @param {Number|null} baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  function RootAttributeOperation(root, key, oldValue, newValue, baseVersion) {\n    var _this;\n    _classCallCheck(this, RootAttributeOperation);\n    _this = _callSuper(this, RootAttributeOperation, [baseVersion]);\n\n    /**\n     * Root element to change.\n     *\n     * @readonly\n     * @member {module:engine/model/rootelement~RootElement}\n     */\n    _this.root = root;\n\n    /**\n     * Key of an attribute to change or remove.\n     *\n     * @readonly\n     * @member {String}\n     */\n    _this.key = key;\n\n    /**\n     * Old value of the attribute with given key or `null` if adding a new attribute.\n     *\n     * @readonly\n     * @member {*}\n     */\n    _this.oldValue = oldValue;\n\n    /**\n     * New value to set for the attribute. If `null`, then the operation just removes the attribute.\n     *\n     * @readonly\n     * @member {*}\n     */\n    _this.newValue = newValue;\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(RootAttributeOperation, _Operation);\n  return _createClass(RootAttributeOperation, [{\n    key: \"type\",\n    get: function get() {\n      if (this.oldValue === null) {\n        return 'addRootAttribute';\n      } else if (this.newValue === null) {\n        return 'removeRootAttribute';\n      } else {\n        return 'changeRootAttribute';\n      }\n    }\n\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     *\n     * @returns {module:engine/model/operation/rootattributeoperation~RootAttributeOperation} Clone of this operation.\n     */\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      return new RootAttributeOperation(this.root, this.key, this.oldValue, this.newValue, this.baseVersion);\n    }\n\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     *\n     * @returns {module:engine/model/operation/rootattributeoperation~RootAttributeOperation}\n     */\n  }, {\n    key: \"getReversed\",\n    value: function getReversed() {\n      return new RootAttributeOperation(this.root, this.key, this.newValue, this.oldValue, this.baseVersion + 1);\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"_validate\",\n    value: function _validate() {\n      if (this.root != this.root.root || this.root.is('documentFragment')) {\n        /**\n         * The element to change is not a root element.\n         *\n         * @error rootattribute-operation-not-a-root\n         * @param {module:engine/model/rootelement~RootElement} root\n         * @param {String} key\n         * @param {*} value\n         */\n        throw new CKEditorError('rootattribute-operation-not-a-root: The element to change is not a root element.', this, {\n          root: this.root,\n          key: this.key\n        });\n      }\n      if (this.oldValue !== null && this.root.getAttribute(this.key) !== this.oldValue) {\n        /**\n         * The attribute which should be removed does not exists for the given node.\n         *\n         * @error rootattribute-operation-wrong-old-value\n         * @param {module:engine/model/rootelement~RootElement} root\n         * @param {String} key\n         * @param {*} value\n         */\n        throw new CKEditorError('rootattribute-operation-wrong-old-value: Changed node has different attribute value than operation\\'s ' + 'old attribute value.', this, {\n          root: this.root,\n          key: this.key\n        });\n      }\n      if (this.oldValue === null && this.newValue !== null && this.root.hasAttribute(this.key)) {\n        /**\n         * The attribute with given key already exists for the given node.\n         *\n         * @error rootattribute-operation-attribute-exists\n         * @param {module:engine/model/rootelement~RootElement} root\n         * @param {String} key\n         */\n        throw new CKEditorError('rootattribute-operation-attribute-exists: The attribute with given key already exists.', this, {\n          root: this.root,\n          key: this.key\n        });\n      }\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"_execute\",\n    value: function _execute() {\n      if (this.newValue !== null) {\n        this.root._setAttribute(this.key, this.newValue);\n      } else {\n        this.root._removeAttribute(this.key);\n      }\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var json = _superPropGet(RootAttributeOperation, \"toJSON\", this, 3)([]);\n      json.root = this.root.toJSON();\n      return json;\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }], [{\n    key: \"className\",\n    get: function get() {\n      return 'RootAttributeOperation';\n    }\n\n    /**\n     * Creates RootAttributeOperation object from deserilized object, i.e. from parsed JSON string.\n     *\n     * @param {Object} json Deserialized JSON object.\n     * @param {module:engine/model/document~Document} document Document on which this operation will be applied.\n     * @returns {module:engine/model/operation/rootattributeoperation~RootAttributeOperation}\n     */\n  }, {\n    key: \"fromJSON\",\n    value: function fromJSON(json, document) {\n      if (!document.getRoot(json.root)) {\n        /**\n         * Cannot create RootAttributeOperation for document. Root with specified name does not exist.\n         *\n         * @error rootattributeoperation-fromjson-no-root\n         * @param {String} rootName\n         */\n        throw new CKEditorError('rootattribute-operation-fromjson-no-root: Cannot create RootAttributeOperation. Root with specified name does not exist.', this, {\n          rootName: json.root\n        });\n      }\n      return new RootAttributeOperation(document.getRoot(json.root), json.key, json.oldValue, json.newValue, json.baseVersion);\n    }\n  }]);\n}(Operation);\nexport { RootAttributeOperation as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.number.constructor.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/operation/splitoperation\n */\n\nimport Operation from './operation';\nimport MergeOperation from './mergeoperation';\nimport Position from '../position';\nimport Range from '../range';\nimport { _insert, _move } from './utils';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * Operation to split {@link module:engine/model/element~Element an element} at given\n * {@link module:engine/model/operation/splitoperation~SplitOperation#splitPosition split position} into two elements,\n * both containing a part of the element's original content.\n *\n * @extends module:engine/model/operation/operation~Operation\n */\nvar SplitOperation = /*#__PURE__*/function (_Operation) {\n  /**\n   * Creates a split operation.\n   *\n   * @param {module:engine/model/position~Position} splitPosition Position at which an element should be split.\n   * @param {Number} howMany Total offset size of elements that are in the split element after `position`.\n   * @param {module:engine/model/position~Position|null} graveyardPosition Position in the graveyard root before the element which\n   * should be used as a parent of the nodes after `position`. If it is not set, a copy of the the `position` parent will be used.\n   * @param {Number|null} baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  function SplitOperation(splitPosition, howMany, graveyardPosition, baseVersion) {\n    var _this;\n    _classCallCheck(this, SplitOperation);\n    _this = _callSuper(this, SplitOperation, [baseVersion]);\n\n    /**\n     * Position at which an element should be split.\n     *\n     * @member {module:engine/model/position~Position} module:engine/model/operation/splitoperation~SplitOperation#splitPosition\n     */\n    _this.splitPosition = splitPosition.clone();\n    // Keep position sticking to the next node. This way any new content added at the place where the element is split\n    // will be left in the original element.\n    _this.splitPosition.stickiness = 'toNext';\n\n    /**\n     * Total offset size of elements that are in the split element after `position`.\n     *\n     * @member {Number} module:engine/model/operation/splitoperation~SplitOperation#howMany\n     */\n    _this.howMany = howMany;\n\n    /**\n     * Position at which the clone of split element (or element from graveyard) will be inserted.\n     *\n     * @member {module:engine/model/position~Position} module:engine/model/operation/splitoperation~SplitOperation#insertionPosition\n     */\n    _this.insertionPosition = SplitOperation.getInsertionPosition(splitPosition);\n    _this.insertionPosition.stickiness = 'toNone';\n\n    /**\n     * Position in the graveyard root before the element which should be used as a parent of the nodes after `position`.\n     * If it is not set, a copy of the the `position` parent will be used.\n     *\n     * The default behavior is to clone the split element. Element from graveyard is used during undo.\n     *\n     * @member {module:engine/model/position~Position|null} #graveyardPosition\n     */\n    _this.graveyardPosition = graveyardPosition ? graveyardPosition.clone() : null;\n    if (_this.graveyardPosition) {\n      _this.graveyardPosition.stickiness = 'toNext';\n    }\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(SplitOperation, _Operation);\n  return _createClass(SplitOperation, [{\n    key: \"type\",\n    get: function get() {\n      return 'split';\n    }\n\n    /**\n     * Position inside the new clone of a split element.\n     *\n     * This is a position where nodes that are after the split position will be moved to.\n     *\n     * @readonly\n     * @type {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"moveTargetPosition\",\n    get: function get() {\n      var path = this.insertionPosition.path.slice();\n      path.push(0);\n      return new Position(this.insertionPosition.root, path);\n    }\n\n    /**\n     * Artificial range that contains all the nodes from the split element that will be moved to the new element.\n     * The range starts at {@link ~#splitPosition} and ends in the same parent, at `POSITIVE_INFINITY` offset.\n     *\n     * @readonly\n     * @type {module:engine/model/range~Range}\n     */\n  }, {\n    key: \"movedRange\",\n    get: function get() {\n      var end = this.splitPosition.getShiftedBy(Number.POSITIVE_INFINITY);\n      return new Range(this.splitPosition, end);\n    }\n\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     *\n     * @returns {module:engine/model/operation/splitoperation~SplitOperation} Clone of this operation.\n     */\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      var split = new this.constructor(this.splitPosition, this.howMany, this.graveyardPosition, this.baseVersion);\n      split.insertionPosition = this.insertionPosition;\n      return split;\n    }\n\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     *\n     * @returns {module:engine/model/operation/mergeoperation~MergeOperation}\n     */\n  }, {\n    key: \"getReversed\",\n    value: function getReversed() {\n      var graveyard = this.splitPosition.root.document.graveyard;\n      var graveyardPosition = new Position(graveyard, [0]);\n      return new MergeOperation(this.moveTargetPosition, this.howMany, this.splitPosition, graveyardPosition, this.baseVersion + 1);\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"_validate\",\n    value: function _validate() {\n      var element = this.splitPosition.parent;\n      var offset = this.splitPosition.offset;\n\n      // Validate whether split operation has correct parameters.\n      if (!element || element.maxOffset < offset) {\n        /**\n         * Split position is invalid.\n         *\n         * @error split-operation-position-invalid\n         */\n        throw new CKEditorError('split-operation-position-invalid: Split position is invalid.', this);\n      } else if (!element.parent) {\n        /**\n         * Cannot split root element.\n         *\n         * @error split-operation-split-in-root\n         */\n        throw new CKEditorError('split-operation-split-in-root: Cannot split root element.', this);\n      } else if (this.howMany != element.maxOffset - this.splitPosition.offset) {\n        /**\n         * Split operation specifies wrong number of nodes to move.\n         *\n         * @error split-operation-how-many-invalid\n         */\n        throw new CKEditorError('split-operation-how-many-invalid: Split operation specifies wrong number of nodes to move.', this);\n      } else if (this.graveyardPosition && !this.graveyardPosition.nodeAfter) {\n        /**\n         * Graveyard position invalid.\n         *\n         * @error split-operation-graveyard-position-invalid\n         */\n        throw new CKEditorError('split-operation-graveyard-position-invalid: Graveyard position invalid.', this);\n      }\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"_execute\",\n    value: function _execute() {\n      var splitElement = this.splitPosition.parent;\n      if (this.graveyardPosition) {\n        _move(Range._createFromPositionAndShift(this.graveyardPosition, 1), this.insertionPosition);\n      } else {\n        var newElement = splitElement._clone();\n        _insert(this.insertionPosition, newElement);\n      }\n      var sourceRange = new Range(Position._createAt(splitElement, this.splitPosition.offset), Position._createAt(splitElement, splitElement.maxOffset));\n      _move(sourceRange, this.moveTargetPosition);\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var json = _superPropGet(SplitOperation, \"toJSON\", this, 3)([]);\n      json.splitPosition = this.splitPosition.toJSON();\n      json.insertionPosition = this.insertionPosition.toJSON();\n      if (this.graveyardPosition) {\n        json.graveyardPosition = this.graveyardPosition.toJSON();\n      }\n      return json;\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }], [{\n    key: \"className\",\n    get: function get() {\n      return 'SplitOperation';\n    }\n\n    /**\n     * Helper function that returns a default insertion position basing on given `splitPosition`. The default insertion\n     * position is after the split element.\n     *\n     * @param {module:engine/model/position~Position} splitPosition\n     * @returns {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"getInsertionPosition\",\n    value: function getInsertionPosition(splitPosition) {\n      var path = splitPosition.path.slice(0, -1);\n      path[path.length - 1]++;\n      return new Position(splitPosition.root, path);\n    }\n\n    /**\n     * Creates `SplitOperation` object from deserilized object, i.e. from parsed JSON string.\n     *\n     * @param {Object} json Deserialized JSON object.\n     * @param {module:engine/model/document~Document} document Document on which this operation will be applied.\n     * @returns {module:engine/model/operation/splitoperation~SplitOperation}\n     */\n  }, {\n    key: \"fromJSON\",\n    value: function fromJSON(json, document) {\n      var splitPosition = Position.fromJSON(json.splitPosition, document);\n      var insertionPosition = Position.fromJSON(json.insertionPosition, document);\n      var graveyardPosition = json.graveyardPosition ? Position.fromJSON(json.graveyardPosition, document) : null;\n      var split = new this(splitPosition, json.howMany, graveyardPosition, json.baseVersion);\n      split.insertionPosition = insertionPosition;\n      return split;\n    }\n  }]);\n}(Operation);\nexport { SplitOperation as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _toConsumableArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\nimport InsertOperation from './insertoperation';\nimport AttributeOperation from './attributeoperation';\nimport RenameOperation from './renameoperation';\nimport MarkerOperation from './markeroperation';\nimport MoveOperation from './moveoperation';\nimport RootAttributeOperation from './rootattributeoperation';\nimport MergeOperation from './mergeoperation';\nimport SplitOperation from './splitoperation';\nimport NoOperation from './nooperation';\nimport Range from '../range';\nimport Position from '../position';\nimport compareArrays from '@ckeditor/ckeditor5-utils/src/comparearrays';\nvar transformations = new Map();\n\n/**\n * @module engine/model/operation/transform\n */\n\n/**\n * Sets a transformation function to be be used to transform instances of class `OperationA` by instances of class `OperationB`.\n *\n * The `transformationFunction` is passed three parameters:\n *\n * * `a` - operation to be transformed, an instance of `OperationA`,\n * * `b` - operation to be transformed by, an instance of `OperationB`,\n * * {@link module:engine/model/operation/transform~TransformationContext `context`} - object with additional information about\n * transformation context.\n *\n * The `transformationFunction` should return transformation result, which is an array with one or multiple\n * {@link module:engine/model/operation/operation~Operation operation} instances.\n *\n * @protected\n * @param {Function} OperationA\n * @param {Function} OperationB\n * @param {Function} transformationFunction Function to use for transforming.\n */\nfunction setTransformation(OperationA, OperationB, transformationFunction) {\n  var aGroup = transformations.get(OperationA);\n  if (!aGroup) {\n    aGroup = new Map();\n    transformations.set(OperationA, aGroup);\n  }\n  aGroup.set(OperationB, transformationFunction);\n}\n\n/**\n * Returns a previously set transformation function for transforming an instance of `OperationA` by an instance of `OperationB`.\n *\n * If no transformation was set for given pair of operations, {@link module:engine/model/operation/transform~noUpdateTransformation}\n * is returned. This means that if no transformation was set, the `OperationA` instance will not change when transformed\n * by the `OperationB` instance.\n *\n * @private\n * @param {Function} OperationA\n * @param {Function} OperationB\n * @returns {Function} Function set to transform an instance of `OperationA` by an instance of `OperationB`.\n */\nfunction getTransformation(OperationA, OperationB) {\n  var aGroup = transformations.get(OperationA);\n  if (aGroup && aGroup.has(OperationB)) {\n    return aGroup.get(OperationB);\n  }\n  return noUpdateTransformation;\n}\n\n/**\n * A transformation function that only clones operation to transform, without changing it.\n *\n * @private\n * @param {module:engine/model/operation/operation~Operation} a Operation to transform.\n * @returns {Array.<module:engine/model/operation/operation~Operation>}\n */\nfunction noUpdateTransformation(a) {\n  return [a];\n}\n\n/**\n * Transforms operation `a` by operation `b`.\n *\n * @param {module:engine/model/operation/operation~Operation} a Operation to be transformed.\n * @param {module:engine/model/operation/operation~Operation} b Operation to transform by.\n * @param {module:engine/model/operation/transform~TransformationContext} context Transformation context for this transformation.\n * @returns {Array.<module:engine/model/operation/operation~Operation>} Transformation result.\n */\nexport function transform(a, b) {\n  var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var transformationFunction = getTransformation(a.constructor, b.constructor);\n  try {\n    a = a.clone();\n    return transformationFunction(a, b, context);\n  } catch (e) {\n    // @if CK_DEBUG // console.warn( 'Error during operation transformation!', e.message );\n    // @if CK_DEBUG // console.warn( 'Transformed operation', a );\n    // @if CK_DEBUG // console.warn( 'Operation transformed by', b );\n    // @if CK_DEBUG // console.warn( 'context.aIsStrong', context.aIsStrong );\n    // @if CK_DEBUG // console.warn( 'context.aWasUndone', context.aWasUndone );\n    // @if CK_DEBUG // console.warn( 'context.bWasUndone', context.bWasUndone );\n    // @if CK_DEBUG // console.warn( 'context.abRelation', context.abRelation );\n    // @if CK_DEBUG // console.warn( 'context.baRelation', context.baRelation );\n\n    throw e;\n  }\n}\n\n/**\n * Performs a transformation of two sets of operations - `operationsA` and `operationsB`. The transformation is two-way -\n * both transformed `operationsA` and transformed `operationsB` are returned.\n *\n * Note, that the first operation in each set should base on the same document state (\n * {@link module:engine/model/document~Document#version document version}).\n *\n * It is assumed that `operationsA` are \"more important\" during conflict resolution between two operations.\n *\n * New copies of both passed arrays and operations inside them are returned. Passed arguments are not altered.\n *\n * Base versions of the transformed operations sets are updated accordingly. For example, assume that base versions are `4`\n * and there are `3` operations in `operationsA` and `5` operations in `operationsB`. Then:\n *\n * * transformed `operationsA` will start from base version `9` (`4` base version + `5` operations B),\n * * transformed `operationsB` will start from base version `7` (`4` base version + `3` operations A).\n *\n * If no operation was broken into two during transformation, then both sets will end up with an operation that bases on version `11`:\n *\n * * transformed `operationsA` start from `9` and there are `3` of them, so the last will have `baseVersion` equal to `11`,\n * * transformed `operationsB` start from `7` and there are `5` of them, so the last will have `baseVersion` equal to `11`.\n *\n * @param {Array.<module:engine/model/operation/operation~Operation>} operationsA\n * @param {Array.<module:engine/model/operation/operation~Operation>} operationsB\n * @param {Object} options Additional transformation options.\n * @param {module:engine/model/document~Document|null} options.document Document which the operations change.\n * @param {Boolean} [options.useRelations=false] Whether during transformation relations should be used (used during undo for\n * better conflict resolution).\n * @param {Boolean} [options.padWithNoOps=false] Whether additional {@link module:engine/model/operation/nooperation~NoOperation}s\n * should be added to the transformation results to force the same last base version for both transformed sets (in case\n * if some operations got broken into multiple operations during transformation).\n * @returns {Object} Transformation result.\n * @returns {Array.<module:engine/model/operation/operation~Operation>} return.operationsA Transformed `operationsA`.\n * @returns {Array.<module:engine/model/operation/operation~Operation>} return.operationsB Transformed `operationsB`.\n * @returns {Map} return.originalOperations A map that links transformed operations to original operations. The keys are the transformed\n * operations and the values are the original operations from the input (`operationsA` and `operationsB`).\n */\nexport function transformSets(operationsA, operationsB, options) {\n  // Create new arrays so the originally passed arguments are not changed.\n  // No need to clone operations, they are cloned as they are transformed.\n  operationsA = operationsA.slice();\n  operationsB = operationsB.slice();\n  var contextFactory = new ContextFactory(options.document, options.useRelations, options.forceWeakRemove);\n  contextFactory.setOriginalOperations(operationsA);\n  contextFactory.setOriginalOperations(operationsB);\n  var originalOperations = contextFactory.originalOperations;\n\n  // If one of sets is empty there is simply nothing to transform, so return sets as they are.\n  if (operationsA.length == 0 || operationsB.length == 0) {\n    return {\n      operationsA: operationsA,\n      operationsB: operationsB,\n      originalOperations: originalOperations\n    };\n  }\n  //\n  // Following is a description of transformation process:\n  //\n  // There are `operationsA` and `operationsB` to be transformed, both by both.\n  //\n  // So, suppose we have sets of two operations each: `operationsA` = `[ a1, a2 ]`, `operationsB` = `[ b1, b2 ]`.\n  //\n  // Remember, that we can only transform operations that base on the same context. We assert that `a1` and `b1` base on\n  // the same context and we transform them. Then, we get `a1'` and `b1'`. `a2` bases on a context with `a1` -- `a2`\n  // is an operation that followed `a1`. Similarly, `b2` bases on a context with `b1`.\n  //\n  // However, since `a1'` is a result of transformation by `b1`, `a1'` now also has a context with `b1`. This means that\n  // we can safely transform `a1'` by `b2`. As we finish transforming `a1`, we also transformed all `operationsB`.\n  // All `operationsB` also have context including `a1`. Now, we can properly transform `a2` by those operations.\n  //\n  // The transformation process can be visualized on a transformation diagram (\"diamond diagram\"):\n  //\n  //          [the initial state]\n  //         [common for a1 and b1]\n  //\n  //                   *\n  //                  / \\\n  //                 /   \\\n  //               b1     a1\n  //               /       \\\n  //              /         \\\n  //             *           *\n  //            / \\         / \\\n  //           /   \\       /   \\\n  //         b2    a1'   b1'    a2\n  //         /       \\   /       \\\n  //        /         \\ /         \\\n  //       *           *           *\n  //        \\         / \\         /\n  //         \\       /   \\       /\n  //        a1''   b2'   a2'   b1''\n  //           \\   /       \\   /\n  //            \\ /         \\ /\n  //             *           *\n  //              \\         /\n  //               \\       /\n  //              a2''   b2''\n  //                 \\   /\n  //                  \\ /\n  //                   *\n  //\n  //           [the final state]\n  //\n  // The final state can be reached from the initial state by applying `a1`, `a2`, `b1''` and `b2''`, as well as by\n  // applying `b1`, `b2`, `a1''`, `a2''`. Note how the operations get to a proper common state before each pair is\n  // transformed.\n  //\n  // Another thing to consider is that an operation during transformation can be broken into multiple operations.\n  // Suppose that `a1` * `b1` = `[ a11', a12' ]` (instead of `a1'` that we considered previously).\n  //\n  // In that case, we leave `a12'` for later and we continue transforming `a11'` until it is transformed by all `operationsB`\n  // (in our case it is just `b2`). At this point, `b1` is transformed by \"whole\" `a1`, while `b2` is only transformed\n  // by `a11'`. Similarly, `a12'` is only transformed by `b1`. This leads to a conclusion that we need to start transforming `a12'`\n  // from the moment just after it was broken. So, `a12'` is transformed by `b2`. Now, \"the whole\" `a1` is transformed\n  // by `operationsB`, while all `operationsB` are transformed by \"the whole\" `a1`. This means that we can continue with\n  // following `operationsA` (in our case it is just `a2`).\n  //\n  // Of course, also `operationsB` can be broken. However, since we focus on transforming operation `a` to the end,\n  // the only thing to do is to store both pieces of operation `b`, so that the next transformed operation `a` will\n  // be transformed by both of them.\n  //\n  //                       *\n  //                      / \\\n  //                     /   \\\n  //                    /     \\\n  //                  b1       a1\n  //                  /         \\\n  //                 /           \\\n  //                /             \\\n  //               *               *\n  //              / \\             / \\\n  //             /  a11'         /   \\\n  //            /     \\         /     \\\n  //          b2       *      b1'      a2\n  //          /       / \\     /         \\\n  //         /       /  a12' /           \\\n  //        /       /     \\ /             \\\n  //       *       b2'     *               *\n  //        \\     /       / \\             /\n  //       a11'' /     b21'' \\           /\n  //          \\ /       /     \\         /\n  //           *       *      a2'     b1''\n  //            \\     / \\       \\     /\n  //          a12'' b22''\\       \\   /\n  //              \\ /     \\       \\ /\n  //               *      a2''     *\n  //                \\       \\     /\n  //                 \\       \\  b21'''\n  //                  \\       \\ /\n  //                a2'''      *\n  //                    \\     /\n  //                     \\  b22'''\n  //                      \\ /\n  //                       *\n  //\n  // Note, how `a1` is broken and transformed into `a11'` and `a12'`, while `b2'` got broken and transformed into `b21''` and `b22''`.\n  //\n  // Having all that on mind, here is an outline for the transformation process algorithm:\n  //\n  // 1. We have `operationsA` and `operationsB` array, which we dynamically update as the transformation process goes.\n  //\n  // 2. We take next (or first) operation from `operationsA` and check from which operation `b` we need to start transforming it.\n  // All original `operationsA` are set to be transformed starting from the first operation `b`.\n  //\n  // 3. We take operations from `operationsB`, one by one, starting from the correct one, and transform operation `a`\n  // by operation `b` (and vice versa). We update `operationsA` and `operationsB` by replacing the original operations\n  // with the transformation results.\n  //\n  // 4. If operation is broken into multiple operations, we save all the new operations in the place of the\n  // original operation.\n  //\n  // 5. Additionally, if operation `a` was broken, for the \"new\" operation, we remember from which operation `b` it should\n  // be transformed by.\n  //\n  // 6. We continue transforming \"current\" operation `a` until it is transformed by all `operationsB`. Then, go to 2.\n  // unless the last operation `a` was transformed.\n  //\n  // The actual implementation of the above algorithm is slightly different, as only one loop (while) is used.\n  // The difference is that we have \"current\" `a` operation to transform and we store the index of the next `b` operation\n  // to transform by. Each loop operates on two indexes then: index pointing to currently processed `a` operation and\n  // index pointing to next `b` operation. Each loop is just one `a * b` + `b * a` transformation. After each loop\n  // operation `b` index is updated. If all `b` operations were visited for the current `a` operation, we change\n  // current `a` operation index to the next one.\n  //\n\n  // For each operation `a`, keeps information what is the index in `operationsB` from which the transformation should start.\n  var nextTransformIndex = new WeakMap();\n\n  // For all the original `operationsA`, set that they should be transformed starting from the first of `operationsB`.\n  var _iterator = _createForOfIteratorHelper(operationsA),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var op = _step.value;\n      nextTransformIndex.set(op, 0);\n    }\n\n    // Additional data that is used for some postprocessing after the main transformation process is done.\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  var data = {\n    nextBaseVersionA: operationsA[operationsA.length - 1].baseVersion + 1,\n    nextBaseVersionB: operationsB[operationsB.length - 1].baseVersion + 1,\n    originalOperationsACount: operationsA.length,\n    originalOperationsBCount: operationsB.length\n  };\n\n  // Index of currently transformed operation `a`.\n  var i = 0;\n\n  // While not all `operationsA` are transformed...\n  while (i < operationsA.length) {\n    var _operationsA, _operationsB;\n    // Get \"current\" operation `a`.\n    var opA = operationsA[i];\n\n    // For the \"current\" operation `a`, get the index of the next operation `b` to transform by.\n    var indexB = nextTransformIndex.get(opA);\n\n    // If operation `a` was already transformed by every operation `b`, change \"current\" operation `a` to the next one.\n    if (indexB == operationsB.length) {\n      i++;\n      continue;\n    }\n    var opB = operationsB[indexB];\n\n    // Transform `a` by `b` and `b` by `a`.\n    var newOpsA = transform(opA, opB, contextFactory.getContext(opA, opB, true));\n    var newOpsB = transform(opB, opA, contextFactory.getContext(opB, opA, false));\n    // As a result we get one or more `newOpsA` and one or more `newOpsB` operations.\n\n    // Update contextual information about operations.\n    contextFactory.updateRelation(opA, opB);\n    contextFactory.setOriginalOperations(newOpsA, opA);\n    contextFactory.setOriginalOperations(newOpsB, opB);\n\n    // For new `a` operations, update their index of the next operation `b` to transform them by.\n    //\n    // This is needed even if there was only one result (`a` was not broken) because that information is used\n    // at the beginning of this loop every time.\n    var _iterator2 = _createForOfIteratorHelper(newOpsA),\n      _step2;\n    try {\n      for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n        var newOpA = _step2.value;\n        // Acknowledge, that operation `b` also might be broken into multiple operations.\n        //\n        // This is why we raise `indexB` not just by 1. If `newOpsB` are multiple operations, they will be\n        // spliced in the place of `opB`. So we need to change `transformBy` accordingly, so that an operation won't\n        // be transformed by the same operation (part of it) again.\n        nextTransformIndex.set(newOpA, indexB + newOpsB.length);\n      }\n\n      // Update `operationsA` and `operationsB` with the transformed versions.\n    } catch (err) {\n      _iterator2.e(err);\n    } finally {\n      _iterator2.f();\n    }\n    (_operationsA = operationsA).splice.apply(_operationsA, [i, 1].concat(_toConsumableArray(newOpsA)));\n    (_operationsB = operationsB).splice.apply(_operationsB, [indexB, 1].concat(_toConsumableArray(newOpsB)));\n  }\n  if (options.padWithNoOps) {\n    // If no-operations padding is enabled, count how many extra `a` and `b` operations were generated.\n    var brokenOperationsACount = operationsA.length - data.originalOperationsACount;\n    var brokenOperationsBCount = operationsB.length - data.originalOperationsBCount;\n\n    // Then, if that number is not the same, pad `operationsA` or `operationsB` with correct number of no-ops so\n    // that the base versions are equalled.\n    //\n    // Note that only one array will be updated, as only one of those subtractions can be greater than zero.\n    padWithNoOps(operationsA, brokenOperationsBCount - brokenOperationsACount);\n    padWithNoOps(operationsB, brokenOperationsACount - brokenOperationsBCount);\n  }\n\n  // Finally, update base versions of transformed operations.\n  updateBaseVersions(operationsA, data.nextBaseVersionB);\n  updateBaseVersions(operationsB, data.nextBaseVersionA);\n  return {\n    operationsA: operationsA,\n    operationsB: operationsB,\n    originalOperations: originalOperations\n  };\n}\n\n// Gathers additional data about operations processed during transformation. Can be used to obtain contextual information\n// about two operations that are about to be transformed. This contextual information can be used for better conflict resolution.\nvar ContextFactory = /*#__PURE__*/function () {\n  // Creates `ContextFactory` instance.\n  //\n  // @param {module:engine/model/document~Document} document Document which the operations change.\n  // @param {Boolean} useRelations Whether during transformation relations should be used (used during undo for\n  // better conflict resolution).\n  // @param {Boolean} [forceWeakRemove=false] If set to `false`, remove operation will be always stronger than move operation,\n  // so the removed nodes won't end up back in the document root. When set to `true`, context data will be used.\n  function ContextFactory(document, useRelations) {\n    var forceWeakRemove = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n    _classCallCheck(this, ContextFactory);\n    // For each operation that is created during transformation process, we keep a reference to the original operation\n    // which it comes from. The original operation works as a kind of \"identifier\". Every contextual information\n    // gathered during transformation that we want to save for given operation, is actually saved for the original operation.\n    // This way no matter if operation `a` is cloned, then transformed, even breaks, we still have access to the previously\n    // gathered data through original operation reference.\n    this.originalOperations = new Map();\n\n    // `model.History` instance which information about undone operations will be taken from.\n    this._history = document.history;\n\n    // Whether additional context should be used.\n    this._useRelations = useRelations;\n    this._forceWeakRemove = !!forceWeakRemove;\n\n    // Relations is a double-map structure (maps in map) where for two operations we store how those operations were related\n    // to each other. Those relations are evaluated during transformation process. For every transformated pair of operations\n    // we keep relations between them.\n    this._relations = new Map();\n  }\n\n  // Sets \"original operation\" for given operations.\n  //\n  // During transformation process, operations are cloned, then changed, then processed again, sometimes broken into two\n  // or multiple operations. When gathering additional data it is important that all operations can be somehow linked\n  // so a cloned and transformed \"version\" still kept track of the data assigned earlier to it.\n  //\n  // The original operation object will be used as such an universal linking id. Throughout the transformation process\n  // all cloned operations will refer to \"the original operation\" when storing and reading additional data.\n  //\n  // If `takeFrom` is not set, each operation from `operations` array will be assigned itself as \"the original operation\".\n  // This should be used as an initialization step.\n  //\n  // If `takeFrom` is set, each operation from `operations` will be assigned the same original operation as assigned\n  // for `takeFrom` operation. This should be used to update original operations. It should be used in a way that\n  // `operations` are the result of `takeFrom` transformation to ensure proper \"original operation propagation\".\n  //\n  // @param {Array.<module:engine/model/operation/operation~Operation>} operations\n  // @param {module:engine/model/operation/operation~Operation|null} [takeFrom=null]\n  return _createClass(ContextFactory, [{\n    key: \"setOriginalOperations\",\n    value: function setOriginalOperations(operations) {\n      var takeFrom = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var originalOperation = takeFrom ? this.originalOperations.get(takeFrom) : null;\n      var _iterator3 = _createForOfIteratorHelper(operations),\n        _step3;\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var operation = _step3.value;\n          this.originalOperations.set(operation, originalOperation || operation);\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n    }\n\n    // Saves a relation between operations `opA` and `opB`.\n    //\n    // Relations are then later used to help solve conflicts when operations are transformed.\n    //\n    // @param {module:engine/model/operation/operation~Operation} opA\n    // @param {module:engine/model/operation/operation~Operation} opB\n  }, {\n    key: \"updateRelation\",\n    value: function updateRelation(opA, opB) {\n      // The use of relations is described in a bigger detail in transformation functions.\n      //\n      // In brief, this function, for specified pairs of operation types, checks how positions defined in those operations relate.\n      // Then those relations are saved. For example, for two move operations, it is saved if one of those operations target\n      // position is before the other operation source position. This kind of information gives contextual information when\n      // transformation is used during undo. Similar checks are done for other pairs of operations.\n      //\n      switch (opA.constructor) {\n        case MoveOperation:\n          {\n            switch (opB.constructor) {\n              case MergeOperation:\n                {\n                  if (opA.targetPosition.isEqual(opB.sourcePosition) || opB.movedRange.containsPosition(opA.targetPosition)) {\n                    this._setRelation(opA, opB, 'insertAtSource');\n                  } else if (opA.targetPosition.isEqual(opB.deletionPosition)) {\n                    this._setRelation(opA, opB, 'insertBetween');\n                  } else if (opA.targetPosition.isAfter(opB.sourcePosition)) {\n                    this._setRelation(opA, opB, 'moveTargetAfter');\n                  }\n                  break;\n                }\n              case MoveOperation:\n                {\n                  if (opA.targetPosition.isEqual(opB.sourcePosition) || opA.targetPosition.isBefore(opB.sourcePosition)) {\n                    this._setRelation(opA, opB, 'insertBefore');\n                  } else {\n                    this._setRelation(opA, opB, 'insertAfter');\n                  }\n                  break;\n                }\n            }\n            break;\n          }\n        case SplitOperation:\n          {\n            switch (opB.constructor) {\n              case MergeOperation:\n                {\n                  if (opA.splitPosition.isBefore(opB.sourcePosition)) {\n                    this._setRelation(opA, opB, 'splitBefore');\n                  }\n                  break;\n                }\n              case MoveOperation:\n                {\n                  if (opA.splitPosition.isEqual(opB.sourcePosition) || opA.splitPosition.isBefore(opB.sourcePosition)) {\n                    this._setRelation(opA, opB, 'splitBefore');\n                  }\n                  break;\n                }\n            }\n            break;\n          }\n        case MergeOperation:\n          {\n            switch (opB.constructor) {\n              case MergeOperation:\n                {\n                  if (!opA.targetPosition.isEqual(opB.sourcePosition)) {\n                    this._setRelation(opA, opB, 'mergeTargetNotMoved');\n                  }\n                  if (opA.sourcePosition.isEqual(opB.targetPosition)) {\n                    this._setRelation(opA, opB, 'mergeSourceNotMoved');\n                  }\n                  if (opA.sourcePosition.isEqual(opB.sourcePosition)) {\n                    this._setRelation(opA, opB, 'mergeSameElement');\n                  }\n                  break;\n                }\n              case SplitOperation:\n                {\n                  if (opA.sourcePosition.isEqual(opB.splitPosition)) {\n                    this._setRelation(opA, opB, 'splitAtSource');\n                  }\n                }\n            }\n            break;\n          }\n        case MarkerOperation:\n          {\n            var markerRange = opA.newRange;\n            if (!markerRange) {\n              return;\n            }\n            switch (opB.constructor) {\n              case MoveOperation:\n                {\n                  var movedRange = Range._createFromPositionAndShift(opB.sourcePosition, opB.howMany);\n                  var affectedLeft = movedRange.containsPosition(markerRange.start) || movedRange.start.isEqual(markerRange.start);\n                  var affectedRight = movedRange.containsPosition(markerRange.end) || movedRange.end.isEqual(markerRange.end);\n                  if ((affectedLeft || affectedRight) && !movedRange.containsRange(markerRange)) {\n                    this._setRelation(opA, opB, {\n                      side: affectedLeft ? 'left' : 'right',\n                      path: affectedLeft ? markerRange.start.path.slice() : markerRange.end.path.slice()\n                    });\n                  }\n                  break;\n                }\n              case MergeOperation:\n                {\n                  var wasInLeftElement = markerRange.start.isEqual(opB.targetPosition);\n                  var wasStartBeforeMergedElement = markerRange.start.isEqual(opB.deletionPosition);\n                  var wasEndBeforeMergedElement = markerRange.end.isEqual(opB.deletionPosition);\n                  var wasInRightElement = markerRange.end.isEqual(opB.sourcePosition);\n                  if (wasInLeftElement || wasStartBeforeMergedElement || wasEndBeforeMergedElement || wasInRightElement) {\n                    this._setRelation(opA, opB, {\n                      wasInLeftElement: wasInLeftElement,\n                      wasStartBeforeMergedElement: wasStartBeforeMergedElement,\n                      wasEndBeforeMergedElement: wasEndBeforeMergedElement,\n                      wasInRightElement: wasInRightElement\n                    });\n                  }\n                  break;\n                }\n            }\n            break;\n          }\n      }\n    }\n\n    // Evaluates and returns contextual information about two given operations `opA` and `opB` which are about to be transformed.\n    //\n    // @param {module:engine/model/operation/operation~Operation} opA\n    // @param {module:engine/model/operation/operation~Operation} opB\n    // @returns {module:engine/model/operation/transform~TransformationContext}\n  }, {\n    key: \"getContext\",\n    value: function getContext(opA, opB, aIsStrong) {\n      return {\n        aIsStrong: aIsStrong,\n        aWasUndone: this._wasUndone(opA),\n        bWasUndone: this._wasUndone(opB),\n        abRelation: this._useRelations ? this._getRelation(opA, opB) : null,\n        baRelation: this._useRelations ? this._getRelation(opB, opA) : null,\n        forceWeakRemove: this._forceWeakRemove\n      };\n    }\n\n    // Returns whether given operation `op` has already been undone.\n    //\n    // Information whether an operation was undone gives more context when making a decision when two operations are in conflict.\n    //\n    // @param {module:engine/model/operation/operation~Operation} op\n    // @returns {Boolean}\n  }, {\n    key: \"_wasUndone\",\n    value: function _wasUndone(op) {\n      // For `op`, get its original operation. After all, if `op` is a clone (or even transformed clone) of another\n      // operation, literally `op` couldn't be undone. It was just generated. If anything, it was the operation it origins\n      // from which was undone. So get that original operation.\n      var originalOp = this.originalOperations.get(op);\n\n      // And check with the document if the original operation was undone.\n      return originalOp.wasUndone || this._history.isUndoneOperation(originalOp);\n    }\n\n    // Returns a relation between `opA` and an operation which is undone by `opB`. This can be `String` value if a relation\n    // was set earlier or `null` if there was no relation between those operations.\n    //\n    // This is a little tricky to understand, so let's compare it to `ContextFactory#_wasUndone`.\n    //\n    // When `wasUndone( opB )` is used, we check if the `opB` has already been undone. It is obvious, that the\n    // undoing operation must happen after the undone operation. So, essentially, we have `opB`, we take document history,\n    // we look forward in the future and ask if in that future `opB` was undone.\n    //\n    // Relations is a backward process to `wasUndone()`.\n    //\n    // Long story short - using relations is asking what happened in the past. Looking back. This time we have an undoing\n    // operation `opB` which has undone some other operation. When there is a transformation `opA` x `opB` and there is\n    // a conflict to solve and `opB` is an undoing operation, we can look back in the history and see what was a relation\n    // between `opA` and the operation which `opB` undone. Basing on that relation from the past, we can now make\n    // a better decision when resolving a conflict between two operations, because we know more about the context of\n    // those two operations.\n    //\n    // This is why this function does not return a relation directly between `opA` and `opB` because we need to look\n    // back to search for a meaningful contextual information.\n    //\n    // @param {module:engine/model/operation/operation~Operation} opA\n    // @param {module:engine/model/operation/operation~Operation} opB\n    // @returns {String|null}\n  }, {\n    key: \"_getRelation\",\n    value: function _getRelation(opA, opB) {\n      // Get the original operation. Similarly as in `wasUndone()` it is used as an universal identifier for stored data.\n      var origB = this.originalOperations.get(opB);\n      var undoneB = this._history.getUndoneOperation(origB);\n\n      // If `opB` is not undoing any operation, there is no relation.\n      if (!undoneB) {\n        return null;\n      }\n      var origA = this.originalOperations.get(opA);\n      var relationsA = this._relations.get(origA);\n\n      // Get all relations for `opA`, and check if there is a relation with `opB`-undone-counterpart. If so, return it.\n      if (relationsA) {\n        return relationsA.get(undoneB) || null;\n      }\n      return null;\n    }\n\n    // Helper function for `ContextFactory#updateRelations`.\n    //\n    // @private\n    // @param {module:engine/model/operation/operation~Operation} opA\n    // @param {module:engine/model/operation/operation~Operation} opB\n    // @param {String} relation\n  }, {\n    key: \"_setRelation\",\n    value: function _setRelation(opA, opB, relation) {\n      // As always, setting is for original operations, not the clones/transformed operations.\n      var origA = this.originalOperations.get(opA);\n      var origB = this.originalOperations.get(opB);\n      var relationsA = this._relations.get(origA);\n      if (!relationsA) {\n        relationsA = new Map();\n        this._relations.set(origA, relationsA);\n      }\n      relationsA.set(origB, relation);\n    }\n  }]);\n}();\n/**\n * Holds additional contextual information about a transformed pair of operations (`a` and `b`). Those information\n * can be used for better conflict resolving.\n *\n * @typedef {Object} module:engine/model/operation/transform~TransformationContext\n *\n * @property {Boolean} aIsStrong Whether `a` is strong operation in this transformation, or weak.\n * @property {Boolean} aWasUndone Whether `a` operation was undone.\n * @property {Boolean} bWasUndone Whether `b` operation was undone.\n * @property {String|null} abRelation The relation between `a` operation and an operation undone by `b` operation.\n * @property {String|null} baRelation The relation between `b` operation and an operation undone by `a` operation.\n */\n/**\n * An utility function that updates {@link module:engine/model/operation/operation~Operation#baseVersion base versions}\n * of passed operations.\n *\n * The function simply sets `baseVersion` as a base version of the first passed operation and then increments it for\n * each following operation in `operations`.\n *\n * @private\n * @param {Array.<module:engine/model/operation/operation~Operation>} operations Operations to update.\n * @param {Number} baseVersion Base version to set for the first operation in `operations`.\n */\nfunction updateBaseVersions(operations, baseVersion) {\n  var _iterator4 = _createForOfIteratorHelper(operations),\n    _step4;\n  try {\n    for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n      var operation = _step4.value;\n      operation.baseVersion = baseVersion++;\n    }\n  } catch (err) {\n    _iterator4.e(err);\n  } finally {\n    _iterator4.f();\n  }\n}\n\n/**\n * Adds `howMany` instances of {@link module:engine/model/operation/nooperation~NoOperation} to `operations` set.\n *\n * @private\n * @param {Array.<module:engine/model/operation/operation~Operation>} operations\n * @param {Number} howMany\n */\nfunction padWithNoOps(operations, howMany) {\n  for (var i = 0; i < howMany; i++) {\n    operations.push(new NoOperation(0));\n  }\n}\n\n// -----------------------\n\nsetTransformation(AttributeOperation, AttributeOperation, function (a, b, context) {\n  if (a.key === b.key) {\n    // If operations attributes are in conflict, check if their ranges intersect and manage them properly.\n\n    // First, we want to apply change to the part of a range that has not been changed by the other operation.\n    var operations = a.range.getDifference(b.range).map(function (range) {\n      return new AttributeOperation(range, a.key, a.oldValue, a.newValue, 0);\n    });\n\n    // Then we take care of the common part of ranges.\n    var common = a.range.getIntersection(b.range);\n    if (common) {\n      // If this operation is more important, we also want to apply change to the part of the\n      // original range that has already been changed by the other operation. Since that range\n      // got changed we also have to update `oldValue`.\n      if (context.aIsStrong) {\n        operations.push(new AttributeOperation(common, b.key, b.newValue, a.newValue, 0));\n      }\n    }\n    if (operations.length == 0) {\n      return [new NoOperation(0)];\n    }\n    return operations;\n  } else {\n    // If operations don't conflict, simply return an array containing just a clone of this operation.\n    return [a];\n  }\n});\nsetTransformation(AttributeOperation, InsertOperation, function (a, b) {\n  // Case 1:\n  //\n  // The attribute operation range includes the position where nodes were inserted.\n  // There are two possible scenarios: the inserted nodes were text and they should receive attributes or\n  // the inserted nodes were elements and they should not receive attributes.\n  //\n  if (a.range.start.hasSameParentAs(b.position) && a.range.containsPosition(b.position)) {\n    // If new nodes should not receive attributes, two separated ranges will be returned.\n    // Otherwise, one expanded range will be returned.\n    var range = a.range._getTransformedByInsertion(b.position, b.howMany, !b.shouldReceiveAttributes);\n    var result = range.map(function (r) {\n      return new AttributeOperation(r, a.key, a.oldValue, a.newValue, a.baseVersion);\n    });\n    if (b.shouldReceiveAttributes) {\n      // `AttributeOperation#range` includes some newly inserted text.\n      // The operation should also change the attribute of that text. An example:\n      //\n      // Bold should be applied on the following range:\n      // <p>Fo[zb]ar</p>\n      //\n      // In meantime, new text is typed:\n      // <p>Fozxxbar</p>\n      //\n      // Bold should be applied also on the new text:\n      // <p>Fo[zxxb]ar</p>\n      // <p>Fo<$text bold=\"true\">zxxb</$text>ar</p>\n      //\n      // There is a special case to consider here to consider.\n      //\n      // Consider setting an attribute with multiple possible values, for example `highlight`. The inserted text might\n      // have already an attribute value applied and the `oldValue` property of the attribute operation might be wrong:\n      //\n      // Attribute `highlight=\"yellow\"` should be applied on the following range:\n      // <p>Fo[zb]ar<p>\n      //\n      // In meantime, character `x` with `highlight=\"red\"` is typed:\n      // <p>Fo[z<$text highlight=\"red\">x</$text>b]ar</p>\n      //\n      // In this case we cannot simply apply operation changing the attribute value from `null` to `\"yellow\"` for the whole range\n      // because that would lead to an exception (`oldValue` is incorrect for `x`).\n      //\n      // We also cannot break the original range as this would mess up a scenario when there are multiple following\n      // insert operations, because then only the first inserted character is included in those ranges:\n      // <p>Fo[z][x][b]ar</p>   -->   <p>Fo[z][x]x[b]ar</p>   -->   <p>Fo[z][x]xx[b]ar</p>\n      //\n      // So, the attribute range needs be expanded, no matter what attributes are set on the inserted nodes:\n      //\n      // <p>Fo[z<$text highlight=\"red\">x</$text>b]ar</p>      <--- Change from `null` to `yellow`, throwing an exception.\n      //\n      // But before that operation would be applied, we will add an additional attribute operation that will change\n      // attributes on the inserted nodes in a way which would make the original operation correct:\n      //\n      // <p>Fo[z{<$text highlight=\"red\">}x</$text>b]ar</p>    <--- Change range `{}` from `red` to `null`.\n      // <p>Fo[zxb]ar</p>                                     <--- Now change from `null` to `yellow` is completely fine.\n      //\n\n      // Generate complementary attribute operation. Be sure to add it before the original operation.\n      var op = _getComplementaryAttributeOperations(b, a.key, a.oldValue);\n      if (op) {\n        result.unshift(op);\n      }\n    }\n\n    // If nodes should not receive new attribute, we are done here.\n    return result;\n  }\n\n  // If insert operation is not expanding the attribute operation range, simply transform the range.\n  a.range = a.range._getTransformedByInsertion(b.position, b.howMany, false)[0];\n  return [a];\n});\n\n/**\n * Helper function for `AttributeOperation` x `InsertOperation` (and reverse) transformation.\n *\n * For given `insertOperation` it checks the inserted node if it has an attribute `key` set to a value different\n * than `newValue`. If so, it generates an `AttributeOperation` which changes the value of `key` attribute to `newValue`.\n *\n * @private\n * @param {module:engine/model/operation/insertoperation~InsertOperation} insertOperation\n * @param {String} key\n * @param {*} newValue\n * @returns {module:engine/model/operation/attributeoperation~AttributeOperation|null}\n */\nfunction _getComplementaryAttributeOperations(insertOperation, key, newValue) {\n  var nodes = insertOperation.nodes;\n\n  // At the beginning we store the attribute value from the first node.\n  var insertValue = nodes.getNode(0).getAttribute(key);\n  if (insertValue == newValue) {\n    return null;\n  }\n  var range = new Range(insertOperation.position, insertOperation.position.getShiftedBy(insertOperation.howMany));\n  return new AttributeOperation(range, key, insertValue, newValue, 0);\n}\nsetTransformation(AttributeOperation, MergeOperation, function (a, b) {\n  var ranges = [];\n\n  // Case 1:\n  //\n  // Attribute change on the merged element. In this case, the merged element was moved to the graveyard.\n  // An additional attribute operation that will change the (re)moved element needs to be generated.\n  //\n  if (a.range.start.hasSameParentAs(b.deletionPosition)) {\n    if (a.range.containsPosition(b.deletionPosition) || a.range.start.isEqual(b.deletionPosition)) {\n      ranges.push(Range._createFromPositionAndShift(b.graveyardPosition, 1));\n    }\n  }\n  var range = a.range._getTransformedByMergeOperation(b);\n\n  // Do not add empty (collapsed) ranges to the result. `range` may be collapsed if it contained only the merged element.\n  if (!range.isCollapsed) {\n    ranges.push(range);\n  }\n\n  // Create `AttributeOperation`s out of the ranges.\n  return ranges.map(function (range) {\n    return new AttributeOperation(range, a.key, a.oldValue, a.newValue, a.baseVersion);\n  });\n});\nsetTransformation(AttributeOperation, MoveOperation, function (a, b) {\n  var ranges = _breakRangeByMoveOperation(a.range, b);\n\n  // Create `AttributeOperation`s out of the ranges.\n  return ranges.map(function (range) {\n    return new AttributeOperation(range, a.key, a.oldValue, a.newValue, a.baseVersion);\n  });\n});\n\n// Helper function for `AttributeOperation` x `MoveOperation` transformation.\n//\n// Takes the passed `range` and transforms it by move operation `moveOp` in a specific way. Only top-level nodes of `range`\n// are considered to be in the range. If move operation moves nodes deep from inside of the range, those nodes won't\n// be included in the result. In other words, top-level nodes of the ranges from the result are exactly the same as\n// top-level nodes of the original `range`.\n//\n// This is important for `AttributeOperation` because, for its range, it changes only the top-level nodes. So we need to\n// track only how those nodes have been affected by `MoveOperation`.\n//\n// @private\n// @param {module:engine/model/range~Range} range\n// @param {module:engine/model/operation/moveoperation~MoveOperation} moveOp\n// @returns {Array.<module:engine/model/range~Range>}\nfunction _breakRangeByMoveOperation(range, moveOp) {\n  var moveRange = Range._createFromPositionAndShift(moveOp.sourcePosition, moveOp.howMany);\n\n  // We are transforming `range` (original range) by `moveRange` (range moved by move operation). As usual when it comes to\n  // transforming a ranges, we may have a common part of the ranges and we may have a difference part (zero to two ranges).\n  var common = null;\n  var difference = [];\n\n  // Let's compare the ranges.\n  if (moveRange.containsRange(range, true)) {\n    // If the whole original range is moved, treat it whole as a common part. There's also no difference part.\n    common = range;\n  } else if (range.start.hasSameParentAs(moveRange.start)) {\n    // If the ranges are \"on the same level\" (in the same parent) then move operation may move exactly those nodes\n    // that are changed by the attribute operation. In this case we get common part and difference part in the usual way.\n    difference = range.getDifference(moveRange);\n    common = range.getIntersection(moveRange);\n  } else {\n    // In any other situation we assume that original range is different than move range, that is that move operation\n    // moves other nodes that attribute operation change. Even if the moved range is deep inside in the original range.\n    //\n    // Note that this is different than in `.getIntersection` (we would get a common part in that case) and different\n    // than `.getDifference` (we would get two ranges).\n    difference = [range];\n  }\n  var result = [];\n\n  // The default behaviour of `_getTransformedByMove` might get wrong results for difference part, though, so\n  // we do it by hand.\n  var _iterator5 = _createForOfIteratorHelper(difference),\n    _step5;\n  try {\n    for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n      var diff = _step5.value;\n      // First, transform the range by removing moved nodes. Since this is a difference, this is safe, `null` won't be returned\n      // as the range is different than the moved range.\n      diff = diff._getTransformedByDeletion(moveOp.sourcePosition, moveOp.howMany);\n\n      // Transform also `targetPosition`.\n      var targetPosition = moveOp.getMovedRangeStart();\n\n      // Spread the range only if moved nodes are inserted only between the top-level nodes of the `diff` range.\n      var spread = diff.start.hasSameParentAs(targetPosition);\n\n      // Transform by insertion of moved nodes.\n      diff = diff._getTransformedByInsertion(targetPosition, moveOp.howMany, spread);\n      result.push.apply(result, _toConsumableArray(diff));\n    }\n\n    // Common part can be simply transformed by the move operation. This is because move operation will not target to\n    // that common part (the operation would have to target inside its own moved range).\n  } catch (err) {\n    _iterator5.e(err);\n  } finally {\n    _iterator5.f();\n  }\n  if (common) {\n    result.push(common._getTransformedByMove(moveOp.sourcePosition, moveOp.targetPosition, moveOp.howMany, false)[0]);\n  }\n  return result;\n}\nsetTransformation(AttributeOperation, SplitOperation, function (a, b) {\n  // Case 1:\n  //\n  // Split node is the last node in `AttributeOperation#range`.\n  // `AttributeOperation#range` needs to be expanded to include the new (split) node.\n  //\n  // Attribute `type` to be changed to `numbered` but the `listItem` is split.\n  // <listItem type=\"bulleted\">foobar</listItem>\n  //\n  // After split:\n  // <listItem type=\"bulleted\">foo</listItem><listItem type=\"bulleted\">bar</listItem>\n  //\n  // After attribute change:\n  // <listItem type=\"numbered\">foo</listItem><listItem type=\"numbered\">foo</listItem>\n  //\n  if (a.range.end.isEqual(b.insertionPosition)) {\n    if (!b.graveyardPosition) {\n      a.range.end.offset++;\n    }\n    return [a];\n  }\n\n  // Case 2:\n  //\n  // Split position is inside `AttributeOperation#range`, at the same level, so the nodes to change are\n  // not going to make a flat range.\n  //\n  // Content with range-to-change and split position:\n  // <p>Fo[zb^a]r</p>\n  //\n  // After split:\n  // <p>Fozb</p><p>ar</p>\n  //\n  // Make two separate ranges containing all nodes to change:\n  // <p>Fo[zb]</p><p>[a]r</p>\n  //\n  if (a.range.start.hasSameParentAs(b.splitPosition) && a.range.containsPosition(b.splitPosition)) {\n    var secondPart = a.clone();\n    secondPart.range = new Range(b.moveTargetPosition.clone(), a.range.end._getCombined(b.splitPosition, b.moveTargetPosition));\n    a.range.end = b.splitPosition.clone();\n    a.range.end.stickiness = 'toPrevious';\n    return [a, secondPart];\n  }\n\n  // The default case.\n  //\n  a.range = a.range._getTransformedBySplitOperation(b);\n  return [a];\n});\nsetTransformation(InsertOperation, AttributeOperation, function (a, b) {\n  var result = [a];\n\n  // Case 1:\n  //\n  // The attribute operation range includes the position where nodes were inserted.\n  // There are two possible scenarios: the inserted nodes were text and they should receive attributes or\n  // the inserted nodes were elements and they should not receive attributes.\n  //\n  // This is a mirror scenario to the one described in `AttributeOperation` x `InsertOperation` transformation,\n  // although this case is a little less complicated. In this case we simply need to change attributes of the\n  // inserted nodes and that's it.\n  //\n  if (a.shouldReceiveAttributes && a.position.hasSameParentAs(b.range.start) && b.range.containsPosition(a.position)) {\n    var op = _getComplementaryAttributeOperations(a, b.key, b.newValue);\n    if (op) {\n      result.push(op);\n    }\n  }\n\n  // The default case is: do nothing.\n  // `AttributeOperation` does not change the model tree structure so `InsertOperation` does not need to be changed.\n  //\n  return result;\n});\nsetTransformation(InsertOperation, InsertOperation, function (a, b, context) {\n  // Case 1:\n  //\n  // Two insert operations insert nodes at the same position. Since they are the same, it needs to be decided\n  // what will be the order of inserted nodes. However, there is no additional information to help in that\n  // decision. Also, when `b` will be transformed by `a`, the same order must be maintained.\n  //\n  // To achieve that, we will check if the operation is strong.\n  // If it is, it won't get transformed. If it is not, it will be moved.\n  //\n  if (a.position.isEqual(b.position) && context.aIsStrong) {\n    return [a];\n  }\n\n  // The default case.\n  //\n  a.position = a.position._getTransformedByInsertOperation(b);\n  return [a];\n});\nsetTransformation(InsertOperation, MoveOperation, function (a, b) {\n  // The default case.\n  //\n  a.position = a.position._getTransformedByMoveOperation(b);\n  return [a];\n});\nsetTransformation(InsertOperation, SplitOperation, function (a, b) {\n  // The default case.\n  //\n  a.position = a.position._getTransformedBySplitOperation(b);\n  return [a];\n});\nsetTransformation(InsertOperation, MergeOperation, function (a, b) {\n  a.position = a.position._getTransformedByMergeOperation(b);\n  return [a];\n});\n\n// -----------------------\n\nsetTransformation(MarkerOperation, InsertOperation, function (a, b) {\n  if (a.oldRange) {\n    a.oldRange = a.oldRange._getTransformedByInsertOperation(b)[0];\n  }\n  if (a.newRange) {\n    a.newRange = a.newRange._getTransformedByInsertOperation(b)[0];\n  }\n  return [a];\n});\nsetTransformation(MarkerOperation, MarkerOperation, function (a, b, context) {\n  if (a.name == b.name) {\n    if (context.aIsStrong) {\n      a.oldRange = b.newRange ? b.newRange.clone() : null;\n    } else {\n      return [new NoOperation(0)];\n    }\n  }\n  return [a];\n});\nsetTransformation(MarkerOperation, MergeOperation, function (a, b) {\n  if (a.oldRange) {\n    a.oldRange = a.oldRange._getTransformedByMergeOperation(b);\n  }\n  if (a.newRange) {\n    a.newRange = a.newRange._getTransformedByMergeOperation(b);\n  }\n  return [a];\n});\nsetTransformation(MarkerOperation, MoveOperation, function (a, b, context) {\n  if (a.oldRange) {\n    a.oldRange = Range._createFromRanges(a.oldRange._getTransformedByMoveOperation(b));\n  }\n  if (a.newRange) {\n    if (context.abRelation) {\n      var aNewRange = Range._createFromRanges(a.newRange._getTransformedByMoveOperation(b));\n      if (context.abRelation.side == 'left' && b.targetPosition.isEqual(a.newRange.start)) {\n        a.newRange.start.path = context.abRelation.path;\n        a.newRange.end = aNewRange.end;\n        return [a];\n      } else if (context.abRelation.side == 'right' && b.targetPosition.isEqual(a.newRange.end)) {\n        a.newRange.start = aNewRange.start;\n        a.newRange.end.path = context.abRelation.path;\n        return [a];\n      }\n    }\n    a.newRange = Range._createFromRanges(a.newRange._getTransformedByMoveOperation(b));\n  }\n  return [a];\n});\nsetTransformation(MarkerOperation, SplitOperation, function (a, b, context) {\n  if (a.oldRange) {\n    a.oldRange = a.oldRange._getTransformedBySplitOperation(b);\n  }\n  if (a.newRange) {\n    if (context.abRelation) {\n      var aNewRange = a.newRange._getTransformedBySplitOperation(b);\n      if (a.newRange.start.isEqual(b.splitPosition) && context.abRelation.wasStartBeforeMergedElement) {\n        a.newRange.start = Position._createAt(b.insertionPosition);\n      } else if (a.newRange.start.isEqual(b.splitPosition) && !context.abRelation.wasInLeftElement) {\n        a.newRange.start = Position._createAt(b.moveTargetPosition);\n      }\n      if (a.newRange.end.isEqual(b.splitPosition) && context.abRelation.wasInRightElement) {\n        a.newRange.end = Position._createAt(b.moveTargetPosition);\n      } else if (a.newRange.end.isEqual(b.splitPosition) && context.abRelation.wasEndBeforeMergedElement) {\n        a.newRange.end = Position._createAt(b.insertionPosition);\n      } else {\n        a.newRange.end = aNewRange.end;\n      }\n      return [a];\n    }\n    a.newRange = a.newRange._getTransformedBySplitOperation(b);\n  }\n  return [a];\n});\n\n// -----------------------\n\nsetTransformation(MergeOperation, InsertOperation, function (a, b) {\n  if (a.sourcePosition.hasSameParentAs(b.position)) {\n    a.howMany += b.howMany;\n  }\n  a.sourcePosition = a.sourcePosition._getTransformedByInsertOperation(b);\n  a.targetPosition = a.targetPosition._getTransformedByInsertOperation(b);\n  return [a];\n});\nsetTransformation(MergeOperation, MergeOperation, function (a, b, context) {\n  // Case 1:\n  //\n  // Same merge operations.\n  //\n  // Both operations have same source and target positions. So the element already got merged and there is\n  // theoretically nothing to do.\n  //\n  if (a.sourcePosition.isEqual(b.sourcePosition) && a.targetPosition.isEqual(b.targetPosition)) {\n    // There are two ways that we can provide a do-nothing operation.\n    //\n    // First is simply a NoOperation instance. We will use it if `b` operation was not undone.\n    //\n    // Second is a merge operation that has the source operation in the merged element - in the graveyard -\n    // same target position and `howMany` equal to `0`. So it is basically merging an empty element from graveyard\n    // which is almost the same as NoOperation.\n    //\n    // This way the merge operation can be later transformed by split operation\n    // to provide correct undo. This will be used if `b` operation was undone (only then it is correct).\n    //\n    if (!context.bWasUndone) {\n      return [new NoOperation(0)];\n    } else {\n      var path = b.graveyardPosition.path.slice();\n      path.push(0);\n      a.sourcePosition = new Position(b.graveyardPosition.root, path);\n      a.howMany = 0;\n      return [a];\n    }\n  }\n\n  // Case 2:\n  //\n  // Same merge source position but different target position.\n  //\n  // This can happen during collaboration. For example, if one client merged a paragraph to the previous paragraph\n  // and the other person removed that paragraph and merged the same paragraph to something before:\n  //\n  // Client A:\n  // <p>Foo</p><p>Bar</p><p>[]Xyz</p>\n  // <p>Foo</p><p>BarXyz</p>\n  //\n  // Client B:\n  // <p>Foo</p>[<p>Bar</p>]<p>Xyz</p>\n  // <p>Foo</p><p>[]Xyz</p>\n  // <p>FooXyz</p>\n  //\n  // In this case we need to decide where finally \"Xyz\" will land:\n  //\n  // <p>FooXyz</p>               graveyard: <p>Bar</p>\n  // <p>Foo</p>                  graveyard: <p>BarXyz</p>\n  //\n  // Let's move it in a way so that a merge operation that does not target to graveyard is more important so that\n  // nodes does not end up in the graveyard. It makes sense. Both for Client A and for Client B \"Xyz\" finally did not\n  // end up in the graveyard (see above).\n  //\n  // If neither or both operations point to graveyard, then let `aIsStrong` decide.\n  //\n  if (a.sourcePosition.isEqual(b.sourcePosition) && !a.targetPosition.isEqual(b.targetPosition) && !context.bWasUndone && context.abRelation != 'splitAtSource') {\n    var aToGraveyard = a.targetPosition.root.rootName == '$graveyard';\n    var bToGraveyard = b.targetPosition.root.rootName == '$graveyard';\n\n    // If `aIsWeak` it means that `a` points to graveyard while `b` doesn't. Don't move nodes then.\n    var aIsWeak = aToGraveyard && !bToGraveyard;\n\n    // If `bIsWeak` it means that `b` points to graveyard while `a` doesn't. Force moving nodes then.\n    var bIsWeak = bToGraveyard && !aToGraveyard;\n\n    // Force move if `b` is weak or neither operation is weak but `a` is stronger through `context.aIsStrong`.\n    var forceMove = bIsWeak || !aIsWeak && context.aIsStrong;\n    if (forceMove) {\n      var sourcePosition = b.targetPosition._getTransformedByMergeOperation(b);\n      var targetPosition = a.targetPosition._getTransformedByMergeOperation(b);\n      return [new MoveOperation(sourcePosition, a.howMany, targetPosition, 0)];\n    } else {\n      return [new NoOperation(0)];\n    }\n  }\n\n  // The default case.\n  //\n  if (a.sourcePosition.hasSameParentAs(b.targetPosition)) {\n    a.howMany += b.howMany;\n  }\n  a.sourcePosition = a.sourcePosition._getTransformedByMergeOperation(b);\n  a.targetPosition = a.targetPosition._getTransformedByMergeOperation(b);\n\n  // Handle positions in graveyard.\n  // If graveyard positions are same and `a` operation is strong - do not transform.\n  if (!a.graveyardPosition.isEqual(b.graveyardPosition) || !context.aIsStrong) {\n    a.graveyardPosition = a.graveyardPosition._getTransformedByMergeOperation(b);\n  }\n  return [a];\n});\nsetTransformation(MergeOperation, MoveOperation, function (a, b, context) {\n  // Case 1:\n  //\n  // The element to merge got removed.\n  //\n  // Merge operation does support merging elements which are not siblings. So it would not be a problem\n  // from technical point of view. However, if the element was removed, the intention of the user deleting it\n  // was to have it all deleted, together with its children. From user experience point of view, moving back the\n  // removed nodes might be unexpected. This means that in this scenario we will block the merging.\n  //\n  // The exception of this rule would be if the remove operation was later undone.\n  //\n  var removedRange = Range._createFromPositionAndShift(b.sourcePosition, b.howMany);\n  if (b.type == 'remove' && !context.bWasUndone && !context.forceWeakRemove) {\n    if (a.deletionPosition.hasSameParentAs(b.sourcePosition) && removedRange.containsPosition(a.sourcePosition)) {\n      return [new NoOperation(0)];\n    }\n  }\n\n  // The default case.\n  //\n  if (a.sourcePosition.hasSameParentAs(b.targetPosition)) {\n    a.howMany += b.howMany;\n  }\n  if (a.sourcePosition.hasSameParentAs(b.sourcePosition)) {\n    a.howMany -= b.howMany;\n  }\n  a.sourcePosition = a.sourcePosition._getTransformedByMoveOperation(b);\n  a.targetPosition = a.targetPosition._getTransformedByMoveOperation(b);\n\n  // `MergeOperation` graveyard position is like `MoveOperation` target position. It is a position where element(s) will\n  // be moved. Like in other similar cases, we need to consider the scenario when those positions are same.\n  // Here, we will treat `MergeOperation` like it is always strong (see `InsertOperation` x `InsertOperation` for comparison).\n  // This means that we won't transform graveyard position if it is equal to move operation target position.\n  if (!a.graveyardPosition.isEqual(b.targetPosition)) {\n    a.graveyardPosition = a.graveyardPosition._getTransformedByMoveOperation(b);\n  }\n  return [a];\n});\nsetTransformation(MergeOperation, SplitOperation, function (a, b, context) {\n  if (b.graveyardPosition) {\n    // If `b` operation defines graveyard position, a node from graveyard will be moved. This means that we need to\n    // transform `a.graveyardPosition` accordingly.\n    a.graveyardPosition = a.graveyardPosition._getTransformedByDeletion(b.graveyardPosition, 1);\n\n    // This is a scenario foreseen in `MergeOperation` x `MergeOperation`, with two identical merge operations.\n    //\n    // So, there was `MergeOperation` x `MergeOperation` transformation earlier. Now, `a` is a merge operation which\n    // source position is in graveyard. Interestingly, split operation wants to use the node to be merged by `a`. This\n    // means that `b` is undoing that merge operation from earlier, which caused `a` to be in graveyard.\n    //\n    // If that's the case, at this point, we will only \"fix\" `a.howMany`. It was earlier set to `0` in\n    // `MergeOperation` x `MergeOperation` transformation. Later transformations in this function will change other\n    // properties.\n    //\n    if (a.deletionPosition.isEqual(b.graveyardPosition)) {\n      a.howMany = b.howMany;\n    }\n  }\n\n  // Case 1:\n  //\n  // Merge operation moves nodes to the place where split happens.\n  // This is a classic situation when there are two paragraphs, and there is a split (enter) after the first\n  // paragraph and there is a merge (delete) at the beginning of the second paragraph:\n  //\n  // <p>Foo{}</p><p>[]Bar</p>.\n  //\n  // Split is after `Foo`, while merge is from `Bar` to the end of `Foo`.\n  //\n  // State after split:\n  // <p>Foo</p><p></p><p>Bar</p>\n  //\n  // Now, `Bar` should be merged to the new paragraph:\n  // <p>Foo</p><p>Bar</p>\n  //\n  // Instead of merging it to the original paragraph:\n  // <p>FooBar</p><p></p>\n  //\n  // This means that `targetPosition` needs to be transformed. This is the default case though.\n  // For example, if the split would be after `F`, `targetPosition` should also be transformed.\n  //\n  // There are three exceptions, though, when we want to keep `targetPosition` as it was.\n  //\n  // First exception is when the merge target position is inside an element (not at the end, as usual). This\n  // happens when the merge operation earlier was transformed by \"the same\" merge operation. If merge operation\n  // targets inside the element we want to keep the original target position (and not transform it) because\n  // we have additional context telling us that we want to merge to the original element. We can check if the\n  // merge operation points inside element by checking what is `SplitOperation#howMany`. Since merge target position\n  // is same as split position, if `howMany` is non-zero, it means that the merge target position is inside an element.\n  //\n  // Second exception is when the element to merge is in the graveyard and split operation uses it. In that case\n  // if target position would be transformed, the merge operation would target at the source position:\n  //\n  // root: <p>Foo</p>\t\t\t\tgraveyard: <p></p>\n  //\n  // SplitOperation: root [ 0, 3 ] using graveyard [ 0 ] (howMany = 0)\n  // MergeOperation: graveyard [ 0, 0 ] -> root [ 0, 3 ] (howMany = 0)\n  //\n  // Since split operation moves the graveyard node back to the root, the merge operation source position changes.\n  // We would like to merge from the empty <p> to the \"Foo\" <p>:\n  //\n  // root: <p>Foo</p><p></p>\t\t\tgraveyard:\n  //\n  // MergeOperation#sourcePosition = root [ 1, 0 ]\n  //\n  // If `targetPosition` is transformed, it would become root [ 1, 0 ] as well. It has to be kept as it was.\n  //\n  // Third exception is connected with relations. If this happens during undo and we have explicit information\n  // that target position has not been affected by the operation which is undone by this split then this split should\n  // not move the target position either.\n  //\n  if (a.targetPosition.isEqual(b.splitPosition)) {\n    var mergeInside = b.howMany != 0;\n    var mergeSplittingElement = b.graveyardPosition && a.deletionPosition.isEqual(b.graveyardPosition);\n    if (mergeInside || mergeSplittingElement || context.abRelation == 'mergeTargetNotMoved') {\n      a.sourcePosition = a.sourcePosition._getTransformedBySplitOperation(b);\n      return [a];\n    }\n  }\n\n  // Case 2:\n  //\n  // Merge source is at the same position as split position. This sometimes happen, mostly during undo.\n  // The decision here is mostly to choose whether merge source position should stay where it is (so it will be at the end of the\n  // split element) or should be move to the beginning of the new element.\n  //\n  if (a.sourcePosition.isEqual(b.splitPosition)) {\n    // Use context to check if `SplitOperation` is not undoing a merge operation, that didn't change the `a` operation.\n    // This scenario happens the undone merge operation moved nodes at the source position of `a` operation.\n    // In that case `a` operation source position should stay where it is.\n    if (context.abRelation == 'mergeSourceNotMoved') {\n      a.howMany = 0;\n      a.targetPosition = a.targetPosition._getTransformedBySplitOperation(b);\n      return [a];\n    }\n\n    // This merge operation might have been earlier transformed by a merge operation which both merged the same element.\n    // See that case in `MergeOperation` x `MergeOperation` transformation. In that scenario, if the merge operation has been undone,\n    // the special case is not applied.\n    //\n    // Now, the merge operation is transformed by the split which has undone that previous merge operation.\n    // So now we are fixing situation which was skipped in `MergeOperation` x `MergeOperation` case.\n    //\n    if (context.abRelation == 'mergeSameElement' || a.sourcePosition.offset > 0) {\n      a.sourcePosition = b.moveTargetPosition.clone();\n      a.targetPosition = a.targetPosition._getTransformedBySplitOperation(b);\n      return [a];\n    }\n  }\n\n  // The default case.\n  //\n  if (a.sourcePosition.hasSameParentAs(b.splitPosition)) {\n    a.howMany = b.splitPosition.offset;\n  }\n  a.sourcePosition = a.sourcePosition._getTransformedBySplitOperation(b);\n  a.targetPosition = a.targetPosition._getTransformedBySplitOperation(b);\n  return [a];\n});\n\n// -----------------------\n\nsetTransformation(MoveOperation, InsertOperation, function (a, b) {\n  var moveRange = Range._createFromPositionAndShift(a.sourcePosition, a.howMany);\n  var transformed = moveRange._getTransformedByInsertOperation(b, false)[0];\n  a.sourcePosition = transformed.start;\n  a.howMany = transformed.end.offset - transformed.start.offset;\n\n  // See `InsertOperation` x `MoveOperation` transformation for details on this case.\n  //\n  // In summary, both operations point to the same place, so the order of nodes needs to be decided.\n  // `MoveOperation` is considered weaker, so it is always transformed, unless there was a certain relation\n  // between operations.\n  //\n  if (!a.targetPosition.isEqual(b.position)) {\n    a.targetPosition = a.targetPosition._getTransformedByInsertOperation(b);\n  }\n  return [a];\n});\nsetTransformation(MoveOperation, MoveOperation, function (a, b, context) {\n  //\n  // Setting and evaluating some variables that will be used in special cases and default algorithm.\n  //\n  // Create ranges from `MoveOperations` properties.\n  var rangeA = Range._createFromPositionAndShift(a.sourcePosition, a.howMany);\n  var rangeB = Range._createFromPositionAndShift(b.sourcePosition, b.howMany);\n\n  // Assign `context.aIsStrong` to a different variable, because the value may change during execution of\n  // this algorithm and we do not want to override original `context.aIsStrong` that will be used in later transformations.\n  var aIsStrong = context.aIsStrong;\n\n  // This will be used to decide the order of nodes if both operations target at the same position.\n  // By default, use strong/weak operation mechanism.\n  var insertBefore = !context.aIsStrong;\n\n  // If the relation is set, then use it to decide nodes order.\n  if (context.abRelation == 'insertBefore' || context.baRelation == 'insertAfter') {\n    insertBefore = true;\n  } else if (context.abRelation == 'insertAfter' || context.baRelation == 'insertBefore') {\n    insertBefore = false;\n  }\n\n  // `a.targetPosition` could be affected by the `b` operation. We will transform it.\n  var newTargetPosition;\n  if (a.targetPosition.isEqual(b.targetPosition) && insertBefore) {\n    newTargetPosition = a.targetPosition._getTransformedByDeletion(b.sourcePosition, b.howMany);\n  } else {\n    newTargetPosition = a.targetPosition._getTransformedByMove(b.sourcePosition, b.targetPosition, b.howMany);\n  }\n\n  //\n  // Special case #1 + mirror.\n  //\n  // Special case when both move operations' target positions are inside nodes that are\n  // being moved by the other move operation. So in other words, we move ranges into inside of each other.\n  // This case can't be solved reasonably (on the other hand, it should not happen often).\n  if (_moveTargetIntoMovedRange(a, b) && _moveTargetIntoMovedRange(b, a)) {\n    // Instead of transforming operation, we return a reverse of the operation that we transform by.\n    // So when the results of this \"transformation\" will be applied, `b` MoveOperation will get reversed.\n    return [b.getReversed()];\n  }\n  //\n  // End of special case #1.\n  //\n\n  //\n  // Special case #2.\n  //\n  // Check if `b` operation targets inside `rangeA`.\n  var bTargetsToA = rangeA.containsPosition(b.targetPosition);\n\n  // If `b` targets to `rangeA` and `rangeA` contains `rangeB`, `b` operation has no influence on `a` operation.\n  // You might say that operation `b` is captured inside operation `a`.\n  if (bTargetsToA && rangeA.containsRange(rangeB, true)) {\n    // There is a mini-special case here, where `rangeB` is on other level than `rangeA`. That's why\n    // we need to transform `a` operation anyway.\n    rangeA.start = rangeA.start._getTransformedByMove(b.sourcePosition, b.targetPosition, b.howMany);\n    rangeA.end = rangeA.end._getTransformedByMove(b.sourcePosition, b.targetPosition, b.howMany);\n    return _makeMoveOperationsFromRanges([rangeA], newTargetPosition);\n  }\n\n  //\n  // Special case #2 mirror.\n  //\n  var aTargetsToB = rangeB.containsPosition(a.targetPosition);\n  if (aTargetsToB && rangeB.containsRange(rangeA, true)) {\n    // `a` operation is \"moved together\" with `b` operation.\n    // Here, just move `rangeA` \"inside\" `rangeB`.\n    rangeA.start = rangeA.start._getCombined(b.sourcePosition, b.getMovedRangeStart());\n    rangeA.end = rangeA.end._getCombined(b.sourcePosition, b.getMovedRangeStart());\n    return _makeMoveOperationsFromRanges([rangeA], newTargetPosition);\n  }\n  //\n  // End of special case #2.\n  //\n\n  //\n  // Special case #3 + mirror.\n  //\n  // `rangeA` has a node which is an ancestor of `rangeB`. In other words, `rangeB` is inside `rangeA`\n  // but not on the same tree level. In such case ranges have common part but we have to treat it\n  // differently, because in such case those ranges are not really conflicting and should be treated like\n  // two separate ranges. Also we have to discard two difference parts.\n  var aCompB = compareArrays(a.sourcePosition.getParentPath(), b.sourcePosition.getParentPath());\n  if (aCompB == 'prefix' || aCompB == 'extension') {\n    // Transform `rangeA` by `b` operation and make operation out of it, and that's all.\n    // Note that this is a simplified version of default case, but here we treat the common part (whole `rangeA`)\n    // like a one difference part.\n    rangeA.start = rangeA.start._getTransformedByMove(b.sourcePosition, b.targetPosition, b.howMany);\n    rangeA.end = rangeA.end._getTransformedByMove(b.sourcePosition, b.targetPosition, b.howMany);\n    return _makeMoveOperationsFromRanges([rangeA], newTargetPosition);\n  }\n  //\n  // End of special case #3.\n  //\n\n  //\n  // Default case - ranges are on the same level or are not connected with each other.\n  //\n  // Modifier for default case.\n  // Modifies `aIsStrong` flag in certain conditions.\n  //\n  // If only one of operations is a remove operation, we force remove operation to be the \"stronger\" one\n  // to provide more expected results.\n  if (a.type == 'remove' && b.type != 'remove' && !context.aWasUndone && !context.forceWeakRemove) {\n    aIsStrong = true;\n  } else if (a.type != 'remove' && b.type == 'remove' && !context.bWasUndone && !context.forceWeakRemove) {\n    aIsStrong = false;\n  }\n\n  // Handle operation's source ranges - check how `rangeA` is affected by `b` operation.\n  // This will aggregate transformed ranges.\n  var ranges = [];\n\n  // Get the \"difference part\" of `a` operation source range.\n  // This is an array with one or two ranges. Two ranges if `rangeB` is inside `rangeA`.\n  var difference = rangeA.getDifference(rangeB);\n  var _iterator6 = _createForOfIteratorHelper(difference),\n    _step6;\n  try {\n    for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n      var range = _step6.value;\n      // Transform those ranges by `b` operation. For example if `b` moved range from before those ranges, fix those ranges.\n      range.start = range.start._getTransformedByDeletion(b.sourcePosition, b.howMany);\n      range.end = range.end._getTransformedByDeletion(b.sourcePosition, b.howMany);\n\n      // If `b` operation targets into `rangeA` on the same level, spread `rangeA` into two ranges.\n      var shouldSpread = compareArrays(range.start.getParentPath(), b.getMovedRangeStart().getParentPath()) == 'same';\n      var newRanges = range._getTransformedByInsertion(b.getMovedRangeStart(), b.howMany, shouldSpread);\n      ranges.push.apply(ranges, _toConsumableArray(newRanges));\n    }\n\n    // Then, we have to manage the \"common part\" of both move ranges.\n  } catch (err) {\n    _iterator6.e(err);\n  } finally {\n    _iterator6.f();\n  }\n  var common = rangeA.getIntersection(rangeB);\n  if (common !== null && aIsStrong) {\n    // Calculate the new position of that part of original range.\n    common.start = common.start._getCombined(b.sourcePosition, b.getMovedRangeStart());\n    common.end = common.end._getCombined(b.sourcePosition, b.getMovedRangeStart());\n\n    // Take care of proper range order.\n    //\n    // Put `common` at appropriate place. Keep in mind that we are interested in original order.\n    // Basically there are only three cases: there is zero, one or two difference ranges.\n    //\n    // If there is zero difference ranges, just push `common` in the array.\n    if (ranges.length === 0) {\n      ranges.push(common);\n    }\n    // If there is one difference range, we need to check whether common part was before it or after it.\n    else if (ranges.length == 1) {\n      if (rangeB.start.isBefore(rangeA.start) || rangeB.start.isEqual(rangeA.start)) {\n        ranges.unshift(common);\n      } else {\n        ranges.push(common);\n      }\n    }\n    // If there are more ranges (which means two), put common part between them. This is the only scenario\n    // where there could be two difference ranges so we don't have to make any comparisons.\n    else {\n      ranges.splice(1, 0, common);\n    }\n  }\n  if (ranges.length === 0) {\n    // If there are no \"source ranges\", nothing should be changed.\n    // Note that this can happen only if `aIsStrong == false` and `rangeA.isEqual( rangeB )`.\n    return [new NoOperation(a.baseVersion)];\n  }\n  return _makeMoveOperationsFromRanges(ranges, newTargetPosition);\n});\nsetTransformation(MoveOperation, SplitOperation, function (a, b, context) {\n  var newTargetPosition = a.targetPosition.clone();\n\n  // Do not transform if target position is same as split insertion position and this split comes from undo.\n  // This should be done on relations but it is too much work for now as it would require relations working in collaboration.\n  // We need to make a decision how we will resolve such conflict and this is less harmful way.\n  if (!a.targetPosition.isEqual(b.insertionPosition) || !b.graveyardPosition || context.abRelation == 'moveTargetAfter') {\n    newTargetPosition = a.targetPosition._getTransformedBySplitOperation(b);\n  }\n\n  // Case 1:\n  //\n  // Last element in the moved range got split.\n  //\n  // In this case the default range transformation will not work correctly as the element created by\n  // split operation would be outside the range. The range to move needs to be fixed manually.\n  //\n  var moveRange = Range._createFromPositionAndShift(a.sourcePosition, a.howMany);\n  if (moveRange.end.isEqual(b.insertionPosition)) {\n    // Do it only if this is a \"natural\" split, not a one that comes from undo.\n    // If this is undo split, only `targetPosition` needs to be changed (if the move is a remove).\n    if (!b.graveyardPosition) {\n      a.howMany++;\n    }\n    a.targetPosition = newTargetPosition;\n    return [a];\n  }\n\n  // Case 2:\n  //\n  // Split happened between the moved nodes. In this case two ranges to move need to be generated.\n  //\n  // Characters `ozba` are moved to the end of paragraph `Xyz` but split happened.\n  // <p>F[oz|ba]r</p><p>Xyz</p>\n  //\n  // After split:\n  // <p>F[oz</p><p>ba]r</p><p>Xyz</p>\n  //\n  // Correct ranges:\n  // <p>F[oz]</p><p>[ba]r</p><p>Xyz</p>\n  //\n  // After move:\n  // <p>F</p><p>r</p><p>Xyzozba</p>\n  //\n  if (moveRange.start.hasSameParentAs(b.splitPosition) && moveRange.containsPosition(b.splitPosition)) {\n    var rightRange = new Range(b.splitPosition, moveRange.end);\n    rightRange = rightRange._getTransformedBySplitOperation(b);\n    var _ranges = [new Range(moveRange.start, b.splitPosition), rightRange];\n    return _makeMoveOperationsFromRanges(_ranges, newTargetPosition);\n  }\n\n  // Case 3:\n  //\n  // Move operation targets at the split position. We need to decide if the nodes should be inserted\n  // at the end of the split element or at the beginning of the new element.\n  //\n  if (a.targetPosition.isEqual(b.splitPosition) && context.abRelation == 'insertAtSource') {\n    newTargetPosition = b.moveTargetPosition;\n  }\n\n  // Case 4:\n  //\n  // Move operation targets just after the split element. We need to decide if the nodes should be inserted\n  // between two parts of split element, or after the new element.\n  //\n  // Split at `|`, while move operation moves `<p>Xyz</p>` and targets at `^`:\n  // <p>Foo|bar</p>^<p>baz</p>\n  // <p>Foo</p>^<p>bar</p><p>baz</p> or <p>Foo</p><p>bar</p>^<p>baz</p>?\n  //\n  // If there is no contextual information between operations (for example, they come from collaborative\n  // editing), we don't want to put some unrelated content (move) between parts of related content (split parts).\n  // However, if the split is from undo, in the past, the moved content might be targeting between the\n  // split parts, meaning that was exactly user's intention:\n  //\n  // <p>Foo</p>^<p>bar</p>\t\t<--- original situation, in \"past\".\n  // <p>Foobar</p>^\t\t\t\t<--- after merge target position is transformed.\n  // <p>Foo|bar</p>^\t\t\t\t<--- then the merge is undone, and split happens, which leads us to current situation.\n  //\n  // In this case it is pretty clear that the intention was to put new paragraph between those nodes,\n  // so we need to transform accordingly. We can detect this scenario thanks to relations.\n  //\n  if (a.targetPosition.isEqual(b.insertionPosition) && context.abRelation == 'insertBetween') {\n    newTargetPosition = a.targetPosition;\n  }\n\n  // The default case.\n  //\n  var transformed = moveRange._getTransformedBySplitOperation(b);\n  var ranges = [transformed];\n\n  // Case 5:\n  //\n  // Moved range contains graveyard element used by split operation. Add extra move operation to the result.\n  //\n  if (b.graveyardPosition) {\n    var movesGraveyardElement = moveRange.start.isEqual(b.graveyardPosition) || moveRange.containsPosition(b.graveyardPosition);\n    if (a.howMany > 1 && movesGraveyardElement && !context.aWasUndone) {\n      ranges.push(Range._createFromPositionAndShift(b.insertionPosition, 1));\n    }\n  }\n  return _makeMoveOperationsFromRanges(ranges, newTargetPosition);\n});\nsetTransformation(MoveOperation, MergeOperation, function (a, b, context) {\n  var movedRange = Range._createFromPositionAndShift(a.sourcePosition, a.howMany);\n  if (b.deletionPosition.hasSameParentAs(a.sourcePosition) && movedRange.containsPosition(b.sourcePosition)) {\n    if (a.type == 'remove' && !context.forceWeakRemove) {\n      // Case 1:\n      //\n      // The element to remove got merged.\n      //\n      // Merge operation does support merging elements which are not siblings. So it would not be a problem\n      // from technical point of view. However, if the element was removed, the intention of the user\n      // deleting it was to have it all deleted. From user experience point of view, moving back the\n      // removed nodes might be unexpected. This means that in this scenario we will reverse merging and remove the element.\n      //\n      if (!context.aWasUndone) {\n        var results = [];\n        var gyMoveSource = b.graveyardPosition.clone();\n        var splitNodesMoveSource = b.targetPosition._getTransformedByMergeOperation(b);\n        if (a.howMany > 1) {\n          results.push(new MoveOperation(a.sourcePosition, a.howMany - 1, a.targetPosition, 0));\n          gyMoveSource = gyMoveSource._getTransformedByMove(a.sourcePosition, a.targetPosition, a.howMany - 1);\n          splitNodesMoveSource = splitNodesMoveSource._getTransformedByMove(a.sourcePosition, a.targetPosition, a.howMany - 1);\n        }\n        var gyMoveTarget = b.deletionPosition._getCombined(a.sourcePosition, a.targetPosition);\n        var gyMove = new MoveOperation(gyMoveSource, 1, gyMoveTarget, 0);\n        var splitNodesMoveTargetPath = gyMove.getMovedRangeStart().path.slice();\n        splitNodesMoveTargetPath.push(0);\n        var splitNodesMoveTarget = new Position(gyMove.targetPosition.root, splitNodesMoveTargetPath);\n        splitNodesMoveSource = splitNodesMoveSource._getTransformedByMove(gyMoveSource, gyMoveTarget, 1);\n        var splitNodesMove = new MoveOperation(splitNodesMoveSource, b.howMany, splitNodesMoveTarget, 0);\n        results.push(gyMove);\n        results.push(splitNodesMove);\n        return results;\n      }\n    } else {\n      // Case 2:\n      //\n      // The element to move got merged and it was the only element to move.\n      // In this case just don't do anything, leave the node in the graveyard. Without special case\n      // it would be a move operation that moves 0 nodes, so maybe it is better just to return no-op.\n      //\n      if (a.howMany == 1) {\n        if (!context.bWasUndone) {\n          return [new NoOperation(0)];\n        } else {\n          a.sourcePosition = b.graveyardPosition.clone();\n          a.targetPosition = a.targetPosition._getTransformedByMergeOperation(b);\n          return [a];\n        }\n      }\n    }\n  }\n\n  // The default case.\n  //\n  var moveRange = Range._createFromPositionAndShift(a.sourcePosition, a.howMany);\n  var transformed = moveRange._getTransformedByMergeOperation(b);\n  a.sourcePosition = transformed.start;\n  a.howMany = transformed.end.offset - transformed.start.offset;\n  a.targetPosition = a.targetPosition._getTransformedByMergeOperation(b);\n  return [a];\n});\n\n// -----------------------\n\nsetTransformation(RenameOperation, InsertOperation, function (a, b) {\n  a.position = a.position._getTransformedByInsertOperation(b);\n  return [a];\n});\nsetTransformation(RenameOperation, MergeOperation, function (a, b) {\n  // Case 1:\n  //\n  // Element to rename got merged, so it was moved to `b.graveyardPosition`.\n  //\n  if (a.position.isEqual(b.deletionPosition)) {\n    a.position = b.graveyardPosition.clone();\n    a.position.stickiness = 'toNext';\n    return [a];\n  }\n  a.position = a.position._getTransformedByMergeOperation(b);\n  return [a];\n});\nsetTransformation(RenameOperation, MoveOperation, function (a, b) {\n  a.position = a.position._getTransformedByMoveOperation(b);\n  return [a];\n});\nsetTransformation(RenameOperation, RenameOperation, function (a, b, context) {\n  if (a.position.isEqual(b.position)) {\n    if (context.aIsStrong) {\n      a.oldName = b.newName;\n    } else {\n      return [new NoOperation(0)];\n    }\n  }\n  return [a];\n});\nsetTransformation(RenameOperation, SplitOperation, function (a, b) {\n  // Case 1:\n  //\n  // The element to rename has been split. In this case, the new element should be also renamed.\n  //\n  // User decides to change the paragraph to a list item:\n  // <paragraph>Foobar</paragraph>\n  //\n  // However, in meantime, split happens:\n  // <paragraph>Foo</paragraph><paragraph>bar</paragraph>\n  //\n  // As a result, rename both elements:\n  // <listItem>Foo</listItem><listItem>bar</listItem>\n  //\n  var renamePath = a.position.path;\n  var splitPath = b.splitPosition.getParentPath();\n  if (compareArrays(renamePath, splitPath) == 'same' && !b.graveyardPosition) {\n    var extraRename = new RenameOperation(a.position.getShiftedBy(1), a.oldName, a.newName, 0);\n    return [a, extraRename];\n  }\n\n  // The default case.\n  //\n  a.position = a.position._getTransformedBySplitOperation(b);\n  return [a];\n});\n\n// -----------------------\n\nsetTransformation(RootAttributeOperation, RootAttributeOperation, function (a, b, context) {\n  if (a.root === b.root && a.key === b.key) {\n    if (!context.aIsStrong || a.newValue === b.newValue) {\n      return [new NoOperation(0)];\n    } else {\n      a.oldValue = b.newValue;\n    }\n  }\n  return [a];\n});\n\n// -----------------------\n\nsetTransformation(SplitOperation, InsertOperation, function (a, b) {\n  // The default case.\n  //\n  if (a.splitPosition.hasSameParentAs(b.position) && a.splitPosition.offset < b.position.offset) {\n    a.howMany += b.howMany;\n  }\n  a.splitPosition = a.splitPosition._getTransformedByInsertOperation(b);\n  a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n  return [a];\n});\nsetTransformation(SplitOperation, MergeOperation, function (a, b, context) {\n  // Case 1:\n  //\n  // Split element got merged. If two different elements were merged, clients will have different content.\n  //\n  // Example. Merge at `{}`, split at `[]`:\n  // <heading>Foo</heading>{}<paragraph>B[]ar</paragraph>\n  //\n  // On merge side it will look like this:\n  // <heading>FooB[]ar</heading>\n  // <heading>FooB</heading><heading>ar</heading>\n  //\n  // On split side it will look like this:\n  // <heading>Foo</heading>{}<paragraph>B</paragraph><paragraph>ar</paragraph>\n  // <heading>FooB</heading><paragraph>ar</paragraph>\n  //\n  // Clearly, the second element is different for both clients.\n  //\n  // We could use the removed merge element from graveyard as a split element but then clients would have a different\n  // model state (in graveyard), because the split side client would still have an element in graveyard (removed by merge).\n  //\n  // To overcome this, in `SplitOperation` x `MergeOperation` transformation we will add additional `SplitOperation`\n  // in the graveyard, which will actually clone the merged-and-deleted element. Then, that cloned element will be\n  // used for splitting. Example below.\n  //\n  // Original state:\n  // <heading>Foo</heading>{}<paragraph>B[]ar</paragraph>\n  //\n  // Merge side client:\n  //\n  // After merge:\n  // <heading>FooB[]ar</heading>                                 graveyard: <paragraph></paragraph>\n  //\n  // Extra split:\n  // <heading>FooB[]ar</heading>                                 graveyard: <paragraph></paragraph><paragraph></paragraph>\n  //\n  // Use the \"cloned\" element from graveyard:\n  // <heading>FooB</heading><paragraph>ar</paragraph>            graveyard: <paragraph></paragraph>\n  //\n  // Split side client:\n  //\n  // After split:\n  // <heading>Foo</heading>{}<paragraph>B</paragraph><paragraph>ar</paragraph>\n  //\n  // After merge:\n  // <heading>FooB</heading><paragraph>ar</paragraph>            graveyard: <paragraph></paragraph>\n  //\n  // This special case scenario only applies if the original split operation clones the split element.\n  // If the original split operation has `graveyardPosition` set, it all doesn't have sense because split operation\n  // knows exactly which element it should use. So there would be no original problem with different contents.\n  //\n  // Additionally, the special case applies only if the merge wasn't already undone.\n  //\n  if (!a.graveyardPosition && !context.bWasUndone && a.splitPosition.hasSameParentAs(b.sourcePosition)) {\n    var splitPath = b.graveyardPosition.path.slice();\n    splitPath.push(0);\n    var splitPosition = new Position(b.graveyardPosition.root, splitPath);\n    var insertionPosition = SplitOperation.getInsertionPosition(new Position(b.graveyardPosition.root, splitPath));\n    var additionalSplit = new SplitOperation(splitPosition, 0, null, 0);\n    additionalSplit.insertionPosition = insertionPosition;\n    a.splitPosition = a.splitPosition._getTransformedByMergeOperation(b);\n    a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n    a.graveyardPosition = additionalSplit.insertionPosition.clone();\n    a.graveyardPosition.stickiness = 'toNext';\n    return [additionalSplit, a];\n  }\n\n  // The default case.\n  //\n  if (a.splitPosition.hasSameParentAs(b.deletionPosition) && !a.splitPosition.isAfter(b.deletionPosition)) {\n    a.howMany--;\n  }\n  if (a.splitPosition.hasSameParentAs(b.targetPosition)) {\n    a.howMany += b.howMany;\n  }\n  a.splitPosition = a.splitPosition._getTransformedByMergeOperation(b);\n  a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n  if (a.graveyardPosition) {\n    a.graveyardPosition = a.graveyardPosition._getTransformedByMergeOperation(b);\n  }\n  return [a];\n});\nsetTransformation(SplitOperation, MoveOperation, function (a, b, context) {\n  var rangeToMove = Range._createFromPositionAndShift(b.sourcePosition, b.howMany);\n  if (a.graveyardPosition) {\n    // Case 1:\n    //\n    // Split operation graveyard node was moved. In this case move operation is stronger. Since graveyard element\n    // is already moved to the correct position, we need to only move the nodes after the split position.\n    // This will be done by `MoveOperation` instead of `SplitOperation`.\n    //\n    var gyElementMoved = rangeToMove.start.isEqual(a.graveyardPosition) || rangeToMove.containsPosition(a.graveyardPosition);\n    if (!context.bWasUndone && gyElementMoved) {\n      var sourcePosition = a.splitPosition._getTransformedByMoveOperation(b);\n      var newParentPosition = a.graveyardPosition._getTransformedByMoveOperation(b);\n      var newTargetPath = newParentPosition.path.slice();\n      newTargetPath.push(0);\n      var newTargetPosition = new Position(newParentPosition.root, newTargetPath);\n      var moveOp = new MoveOperation(sourcePosition, a.howMany, newTargetPosition, 0);\n      return [moveOp];\n    }\n    a.graveyardPosition = a.graveyardPosition._getTransformedByMoveOperation(b);\n  }\n\n  // Case 2:\n  //\n  // If the split position is inside the moved range, we need to shift the split position to a proper place.\n  // The position cannot be moved together with moved range because that would result in splitting of an incorrect element.\n  //\n  // Characters `bc` should be moved to the second paragraph while split position is between them:\n  // <paragraph>A[b|c]d</paragraph><paragraph>Xyz</paragraph>\n  //\n  // After move, new split position is incorrect:\n  // <paragraph>Ad</paragraph><paragraph>Xb|cyz</paragraph>\n  //\n  // Correct split position:\n  // <paragraph>A|d</paragraph><paragraph>Xbcyz</paragraph>\n  //\n  // After split:\n  // <paragraph>A</paragraph><paragraph>d</paragraph><paragraph>Xbcyz</paragraph>\n  //\n  if (a.splitPosition.hasSameParentAs(b.sourcePosition) && rangeToMove.containsPosition(a.splitPosition)) {\n    var howManyRemoved = b.howMany - (a.splitPosition.offset - b.sourcePosition.offset);\n    a.howMany -= howManyRemoved;\n    if (a.splitPosition.hasSameParentAs(b.targetPosition) && a.splitPosition.offset < b.targetPosition.offset) {\n      a.howMany += b.howMany;\n    }\n    a.splitPosition = b.sourcePosition.clone();\n    a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n    return [a];\n  }\n\n  // Case 3:\n  //\n  // Split is at a position where nodes were moved.\n  //\n  // This is a scenario described in `MoveOperation` x `SplitOperation` transformation but from the\n  // \"split operation point of view\".\n  //\n  var splitAtTarget = a.splitPosition.isEqual(b.targetPosition);\n  if (splitAtTarget && (context.baRelation == 'insertAtSource' || context.abRelation == 'splitBefore')) {\n    a.howMany += b.howMany;\n    a.splitPosition = a.splitPosition._getTransformedByDeletion(b.sourcePosition, b.howMany);\n    a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n    return [a];\n  }\n\n  // The default case.\n  // Don't change `howMany` if move operation does not really move anything.\n  //\n  if (!b.sourcePosition.isEqual(b.targetPosition)) {\n    if (a.splitPosition.hasSameParentAs(b.sourcePosition) && a.splitPosition.offset <= b.sourcePosition.offset) {\n      a.howMany -= b.howMany;\n    }\n    if (a.splitPosition.hasSameParentAs(b.targetPosition) && a.splitPosition.offset < b.targetPosition.offset) {\n      a.howMany += b.howMany;\n    }\n  }\n\n  // Change position stickiness to force a correct transformation.\n  a.splitPosition.stickiness = 'toNone';\n  a.splitPosition = a.splitPosition._getTransformedByMoveOperation(b);\n  a.splitPosition.stickiness = 'toNext';\n  if (a.graveyardPosition) {\n    a.insertionPosition = a.insertionPosition._getTransformedByMoveOperation(b);\n  } else {\n    a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n  }\n  return [a];\n});\nsetTransformation(SplitOperation, SplitOperation, function (a, b, context) {\n  // Case 1:\n  //\n  // Split at the same position.\n  //\n  // If there already was a split at the same position as in `a` operation, it means that the intention\n  // conveyed by `a` operation has already been fulfilled and `a` should not do anything (to avoid double split).\n  //\n  // However, there is a difference if these are new splits or splits created by undo. These have different\n  // intentions. Also splits moving back different elements from graveyard have different intentions. They\n  // are just different operations.\n  //\n  // So we cancel split operation only if it was really identical.\n  //\n  // Also, there is additional case, where split operations aren't identical and should not be cancelled, however the\n  // default transformation is incorrect too.\n  //\n  if (a.splitPosition.isEqual(b.splitPosition)) {\n    if (!a.graveyardPosition && !b.graveyardPosition) {\n      return [new NoOperation(0)];\n    }\n    if (a.graveyardPosition && b.graveyardPosition && a.graveyardPosition.isEqual(b.graveyardPosition)) {\n      return [new NoOperation(0)];\n    }\n\n    // Use context to know that the `a.splitPosition` should stay where it is.\n    // This happens during undo when first a merge operation moved nodes to `a.splitPosition` and now `b` operation undoes that merge.\n    if (context.abRelation == 'splitBefore') {\n      // Since split is at the same position, there are no nodes left to split.\n      a.howMany = 0;\n\n      // Note: there was `if ( a.graveyardPosition )` here but it was uncovered in tests and I couldn't find any scenarios for now.\n      // That would have to be a `SplitOperation` that didn't come from undo but is transformed by operations that were undone.\n      // It could happen if `context` is enabled in collaboration.\n      a.graveyardPosition = a.graveyardPosition._getTransformedBySplitOperation(b);\n      return [a];\n    }\n  }\n\n  // Case 2:\n  //\n  // Same node is using to split different elements. This happens in undo when previously same element was merged to\n  // two different elements. This is described in `MergeOperation` x `MergeOperation` transformation.\n  //\n  // In this case we will follow the same logic. We will assume that `insertionPosition` is same for both\n  // split operations. This might not always be true but in the real cases that were experienced it was. After all,\n  // if these splits are reverses of merge operations that were merging the same element, then the `insertionPosition`\n  // should be same for both of those splits.\n  //\n  // Again, we will decide which operation is stronger by checking if split happens in graveyard or in non-graveyard root.\n  //\n  if (a.graveyardPosition && b.graveyardPosition && a.graveyardPosition.isEqual(b.graveyardPosition)) {\n    var aInGraveyard = a.splitPosition.root.rootName == '$graveyard';\n    var bInGraveyard = b.splitPosition.root.rootName == '$graveyard';\n\n    // If `aIsWeak` it means that `a` points to graveyard while `b` doesn't. Don't move nodes then.\n    var aIsWeak = aInGraveyard && !bInGraveyard;\n\n    // If `bIsWeak` it means that `b` points to graveyard while `a` doesn't. Force moving nodes then.\n    var bIsWeak = bInGraveyard && !aInGraveyard;\n\n    // Force move if `b` is weak or neither operation is weak but `a` is stronger through `context.aIsStrong`.\n    var forceMove = bIsWeak || !aIsWeak && context.aIsStrong;\n    if (forceMove) {\n      var result = [];\n\n      // First we need to move any nodes split by `b` back to where they were.\n      // Do it only if `b` actually moved something.\n      if (b.howMany) {\n        result.push(new MoveOperation(b.moveTargetPosition, b.howMany, b.splitPosition, 0));\n      }\n\n      // Then we need to move nodes from `a` split position to their new element.\n      // Do it only if `a` actually should move something.\n      if (a.howMany) {\n        result.push(new MoveOperation(a.splitPosition, a.howMany, a.moveTargetPosition, 0));\n      }\n      return result;\n    } else {\n      return [new NoOperation(0)];\n    }\n  }\n  if (a.graveyardPosition) {\n    a.graveyardPosition = a.graveyardPosition._getTransformedBySplitOperation(b);\n  }\n\n  // Case 3:\n  //\n  // Position where operation `b` inserted a new node after split is the same as the operation `a` split position.\n  // As in similar cases, there is ambiguity if the split should be before the new node (created by `b`) or after.\n  //\n  if (a.splitPosition.isEqual(b.insertionPosition) && context.abRelation == 'splitBefore') {\n    a.howMany++;\n    return [a];\n  }\n\n  // Case 4:\n  //\n  // This is a mirror to the case 2. above.\n  //\n  if (b.splitPosition.isEqual(a.insertionPosition) && context.baRelation == 'splitBefore') {\n    var newPositionPath = b.insertionPosition.path.slice();\n    newPositionPath.push(0);\n    var newPosition = new Position(b.insertionPosition.root, newPositionPath);\n    var moveOp = new MoveOperation(a.insertionPosition, 1, newPosition, 0);\n    return [a, moveOp];\n  }\n\n  // The default case.\n  //\n  if (a.splitPosition.hasSameParentAs(b.splitPosition) && a.splitPosition.offset < b.splitPosition.offset) {\n    a.howMany -= b.howMany;\n  }\n  a.splitPosition = a.splitPosition._getTransformedBySplitOperation(b);\n  a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n  return [a];\n});\n\n// Checks whether `MoveOperation` `targetPosition` is inside a node from the moved range of the other `MoveOperation`.\n//\n// @private\n// @param {module:engine/model/operation/moveoperation~MoveOperation} a\n// @param {module:engine/model/operation/moveoperation~MoveOperation} b\n// @returns {Boolean}\nfunction _moveTargetIntoMovedRange(a, b) {\n  return a.targetPosition._getTransformedByDeletion(b.sourcePosition, b.howMany) === null;\n}\n\n// Helper function for `MoveOperation` x `MoveOperation` transformation. Converts given ranges and target position to\n// move operations and returns them.\n//\n// Ranges and target position will be transformed on-the-fly when generating operations.\n//\n// Given `ranges` should be in the order of how they were in the original transformed operation.\n//\n// Given `targetPosition` is the target position of the first range from `ranges`.\n//\n// @private\n// @param {Array.<module:engine/model/range~Range>} ranges\n// @param {module:engine/model/position~Position} targetPosition\n// @returns {Array.<module:engine/model/operation/moveoperation~MoveOperation>}\nfunction _makeMoveOperationsFromRanges(ranges, targetPosition) {\n  // At this moment we have some ranges and a target position, to which those ranges should be moved.\n  // Order in `ranges` array is the go-to order of after transformation.\n  //\n  // We are almost done. We have `ranges` and `targetPosition` to make operations from.\n  // Unfortunately, those operations may affect each other. Precisely, first operation after move\n  // may affect source range and target position of second and third operation. Same with second\n  // operation affecting third.\n  //\n  // We need to fix those source ranges and target positions once again, before converting `ranges` to operations.\n  var operations = [];\n\n  // Keep in mind that nothing will be transformed if there is just one range in `ranges`.\n  for (var i = 0; i < ranges.length; i++) {\n    // Create new operation out of a range and target position.\n    var range = ranges[i];\n    var op = new MoveOperation(range.start, range.end.offset - range.start.offset, targetPosition, 0);\n    operations.push(op);\n\n    // Transform other ranges by the generated operation.\n    for (var j = i + 1; j < ranges.length; j++) {\n      // All ranges in `ranges` array should be:\n      //\n      // * non-intersecting (these are part of original operation source range), and\n      // * `targetPosition` does not target into them (opposite would mean that transformed operation targets \"inside itself\").\n      //\n      // This means that the transformation will be \"clean\" and always return one result.\n      ranges[j] = ranges[j]._getTransformedByMove(op.sourcePosition, op.targetPosition, op.howMany)[0];\n    }\n    targetPosition = targetPosition._getTransformedByMove(op.sourcePosition, op.targetPosition, op.howMany);\n  }\n  return operations;\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.reduce.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.object.to-string.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/operation/utils\n */\n\nimport Node from '../node';\nimport Text from '../text';\nimport TextProxy from '../textproxy';\nimport Range from '../range';\nimport DocumentFragment from '../documentfragment';\nimport NodeList from '../nodelist';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * Contains functions used for composing model tree by {@link module:engine/model/operation/operation~Operation operations}.\n * Those functions are built on top of {@link module:engine/model/node~Node node}, and it's child classes', APIs.\n *\n * @protected\n * @namespace utils\n */\n\n/**\n * Inserts given nodes at given position.\n *\n * @protected\n * @function module:engine/model/operation/utils~utils.insert\n * @param {module:engine/model/position~Position} position Position at which nodes should be inserted.\n * @param {module:engine/model/node~NodeSet} nodes Nodes to insert.\n * @returns {module:engine/model/range~Range} Range spanning over inserted elements.\n */\nexport function _insert(position, nodes) {\n  nodes = _normalizeNodes(nodes);\n\n  // We have to count offset before inserting nodes because they can get merged and we would get wrong offsets.\n  var offset = nodes.reduce(function (sum, node) {\n    return sum + node.offsetSize;\n  }, 0);\n  var parent = position.parent;\n\n  // Insertion might be in a text node, we should split it if that's the case.\n  _splitNodeAtPosition(position);\n  var index = position.index;\n\n  // Insert nodes at given index. After splitting we have a proper index and insertion is between nodes,\n  // using basic `Element` API.\n  parent._insertChild(index, nodes);\n\n  // Merge text nodes, if possible. Merging is needed only at points where inserted nodes \"touch\" \"old\" nodes.\n  _mergeNodesAtIndex(parent, index + nodes.length);\n  _mergeNodesAtIndex(parent, index);\n  return new Range(position, position.getShiftedBy(offset));\n}\n\n/**\n * Removed nodes in given range. Only {@link module:engine/model/range~Range#isFlat flat} ranges are accepted.\n *\n * @protected\n * @function module:engine/model/operation/utils~utils._remove\n * @param {module:engine/model/range~Range} range Range containing nodes to remove.\n * @returns {Array.<module:engine/model/node~Node>}\n */\nexport function _remove(range) {\n  if (!range.isFlat) {\n    /**\n     * Trying to remove a range which starts and ends in different element.\n     *\n     * @error operation-utils-remove-range-not-flat\n     */\n    throw new CKEditorError('operation-utils-remove-range-not-flat: ' + 'Trying to remove a range which starts and ends in different element.', this);\n  }\n  var parent = range.start.parent;\n\n  // Range may be inside text nodes, we have to split them if that's the case.\n  _splitNodeAtPosition(range.start);\n  _splitNodeAtPosition(range.end);\n\n  // Remove the text nodes using basic `Element` API.\n  var removed = parent._removeChildren(range.start.index, range.end.index - range.start.index);\n\n  // Merge text nodes, if possible. After some nodes were removed, node before and after removed range will be\n  // touching at the position equal to the removed range beginning. We check merging possibility there.\n  _mergeNodesAtIndex(parent, range.start.index);\n  return removed;\n}\n\n/**\n * Moves nodes in given range to given target position. Only {@link module:engine/model/range~Range#isFlat flat} ranges are accepted.\n *\n * @protected\n * @function module:engine/model/operation/utils~utils.move\n * @param {module:engine/model/range~Range} sourceRange Range containing nodes to move.\n * @param {module:engine/model/position~Position} targetPosition Position to which nodes should be moved.\n * @returns {module:engine/model/range~Range} Range containing moved nodes.\n */\nexport function _move(sourceRange, targetPosition) {\n  if (!sourceRange.isFlat) {\n    /**\n     * Trying to move a range which starts and ends in different element.\n     *\n     * @error operation-utils-move-range-not-flat\n     */\n    throw new CKEditorError('operation-utils-move-range-not-flat: ' + 'Trying to move a range which starts and ends in different element.', this);\n  }\n  var nodes = _remove(sourceRange);\n\n  // We have to fix `targetPosition` because model changed after nodes from `sourceRange` got removed and\n  // that change might have an impact on `targetPosition`.\n  targetPosition = targetPosition._getTransformedByDeletion(sourceRange.start, sourceRange.end.offset - sourceRange.start.offset);\n  return _insert(targetPosition, nodes);\n}\n\n/**\n * Sets given attribute on nodes in given range. The attributes are only set on top-level nodes of the range, not on its children.\n *\n * @protected\n * @function module:engine/model/operation/utils~utils._setAttribute\n * @param {module:engine/model/range~Range} range Range containing nodes that should have the attribute set. Must be a flat range.\n * @param {String} key Key of attribute to set.\n * @param {*} value Attribute value.\n */\nexport function _setAttribute(range, key, value) {\n  // Range might start or end in text nodes, so we have to split them.\n  _splitNodeAtPosition(range.start);\n  _splitNodeAtPosition(range.end);\n\n  // Iterate over all items in the range.\n  var _iterator = _createForOfIteratorHelper(range.getItems({\n      shallow: true\n    })),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var item = _step.value;\n      // Iterator will return `TextProxy` instances but we know that those text proxies will\n      // always represent full text nodes (this is guaranteed thanks to splitting we did before).\n      // So, we can operate on those text proxies' text nodes.\n      var node = item.is('textProxy') ? item.textNode : item;\n      if (value !== null) {\n        node._setAttribute(key, value);\n      } else {\n        node._removeAttribute(key);\n      }\n\n      // After attributes changing it may happen that some text nodes can be merged. Try to merge with previous node.\n      _mergeNodesAtIndex(node.parent, node.index);\n    }\n\n    // Try to merge last changed node with it's previous sibling (not covered by the loop above).\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  _mergeNodesAtIndex(range.end.parent, range.end.index);\n}\n\n/**\n * Normalizes given object or an array of objects to an array of {@link module:engine/model/node~Node nodes}. See\n * {@link module:engine/model/node~NodeSet NodeSet} for details on how normalization is performed.\n *\n * @protected\n * @function module:engine/model/operation/utils~utils.normalizeNodes\n * @param {module:engine/model/node~NodeSet} nodes Objects to normalize.\n * @returns {Array.<module:engine/model/node~Node>} Normalized nodes.\n */\nexport function _normalizeNodes(nodes) {\n  var normalized = [];\n  if (!(nodes instanceof Array)) {\n    nodes = [nodes];\n  }\n\n  // Convert instances of classes other than Node.\n  for (var i = 0; i < nodes.length; i++) {\n    if (typeof nodes[i] == 'string') {\n      normalized.push(new Text(nodes[i]));\n    } else if (nodes[i] instanceof TextProxy) {\n      normalized.push(new Text(nodes[i].data, nodes[i].getAttributes()));\n    } else if (nodes[i] instanceof DocumentFragment || nodes[i] instanceof NodeList) {\n      var _iterator2 = _createForOfIteratorHelper(nodes[i]),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var child = _step2.value;\n          normalized.push(child);\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n    } else if (nodes[i] instanceof Node) {\n      normalized.push(nodes[i]);\n    }\n    // Skip unrecognized type.\n  }\n\n  // Merge text nodes.\n  for (var _i = 1; _i < normalized.length; _i++) {\n    var node = normalized[_i];\n    var prev = normalized[_i - 1];\n    if (node instanceof Text && prev instanceof Text && _haveSameAttributes(node, prev)) {\n      // Doing this instead changing `prev.data` because `data` is readonly.\n      normalized.splice(_i - 1, 2, new Text(prev.data + node.data, prev.getAttributes()));\n      _i--;\n    }\n  }\n  return normalized;\n}\n\n// Checks if nodes before and after given index in given element are {@link module:engine/model/text~Text text nodes} and\n// merges them into one node if they have same attributes.\n//\n// Merging is done by removing two text nodes and inserting a new text node containing data from both merged text nodes.\n//\n// @private\n// @param {module:engine/model/element~Element} element Parent element of nodes to merge.\n// @param {Number} index Index between nodes to merge.\nfunction _mergeNodesAtIndex(element, index) {\n  var nodeBefore = element.getChild(index - 1);\n  var nodeAfter = element.getChild(index);\n\n  // Check if both of those nodes are text objects with same attributes.\n  if (nodeBefore && nodeAfter && nodeBefore.is('text') && nodeAfter.is('text') && _haveSameAttributes(nodeBefore, nodeAfter)) {\n    // Append text of text node after index to the before one.\n    var mergedNode = new Text(nodeBefore.data + nodeAfter.data, nodeBefore.getAttributes());\n\n    // Remove separate text nodes.\n    element._removeChildren(index - 1, 2);\n\n    // Insert merged text node.\n    element._insertChild(index - 1, mergedNode);\n  }\n}\n\n// Checks if given position is in a text node, and if so, splits the text node in two text nodes, each of them\n// containing a part of original text node.\n//\n// @private\n// @param {module:engine/model/position~Position} position Position at which node should be split.\nfunction _splitNodeAtPosition(position) {\n  var textNode = position.textNode;\n  var element = position.parent;\n  if (textNode) {\n    var offsetDiff = position.offset - textNode.startOffset;\n    var index = textNode.index;\n    element._removeChildren(index, 1);\n    var firstPart = new Text(textNode.data.substr(0, offsetDiff), textNode.getAttributes());\n    var secondPart = new Text(textNode.data.substr(offsetDiff), textNode.getAttributes());\n    element._insertChild(index, [firstPart, secondPart]);\n  }\n}\n\n// Checks whether two given nodes have same attributes.\n//\n// @private\n// @param {module:engine/model/node~Node} nodeA Node to check.\n// @param {module:engine/model/node~Node} nodeB Node to check.\n// @returns {Boolean} `true` if nodes have same attributes, `false` otherwise.\nfunction _haveSameAttributes(nodeA, nodeB) {\n  var iteratorA = nodeA.getAttributes();\n  var iteratorB = nodeB.getAttributes();\n  var _iterator3 = _createForOfIteratorHelper(iteratorA),\n    _step3;\n  try {\n    for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n      var attr = _step3.value;\n      if (attr[1] !== nodeB.getAttribute(attr[0])) {\n        return false;\n      }\n      iteratorB.next();\n    }\n  } catch (err) {\n    _iterator3.e(err);\n  } finally {\n    _iterator3.f();\n  }\n  return iteratorB.next().done;\n}\n\n/**\n * Value that can be normalized to an array of {@link module:engine/model/node~Node nodes}.\n *\n * Non-arrays are normalized as follows:\n * * {@link module:engine/model/node~Node Node} is left as is,\n * * {@link module:engine/model/textproxy~TextProxy TextProxy} and `String` are normalized to {@link module:engine/model/text~Text Text},\n * * {@link module:engine/model/nodelist~NodeList NodeList} is normalized to an array containing all nodes that are in that node list,\n * * {@link module:engine/model/documentfragment~DocumentFragment DocumentFragment} is normalized to an array containing all of it's\n * * children.\n *\n * Arrays are processed item by item like non-array values and flattened to one array. Normalization always results in\n * a flat array of {@link module:engine/model/node~Node nodes}. Consecutive text nodes (or items normalized to text nodes) will be\n * merged if they have same attributes.\n *\n * @typedef {module:engine/model/node~Node|module:engine/model/textproxy~TextProxy|String|\n * module:engine/model/nodelist~NodeList|module:engine/model/documentfragment~DocumentFragment|Iterable}\n * module:engine/model/node~NodeSet\n */","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.string.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/position\n */\n\nimport TreeWalker from './treewalker';\nimport compareArrays from '@ckeditor/ckeditor5-utils/src/comparearrays';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport Text from './text';\nimport { last } from 'lodash-es';\n\n// To check if component is loaded more than once.\nimport '@ckeditor/ckeditor5-utils/src/version';\n\n/**\n * Represents a position in the model tree.\n *\n * A position is represented by its {@link module:engine/model/position~Position#root} and\n * a {@link module:engine/model/position~Position#path} in that root.\n *\n * You can create position instances via its constructor or the `createPosition*()` factory methods of\n * {@link module:engine/model/model~Model} and {@link module:engine/model/writer~Writer}.\n *\n * **Note:** Position is based on offsets, not indexes. This means that a position between two text nodes\n * `foo` and `bar` has offset `3`, not `1`. See {@link module:engine/model/position~Position#path} for more information.\n *\n * Since a position in the model is represented by a {@link module:engine/model/position~Position#root position root} and\n * {@link module:engine/model/position~Position#path position path} it is possible to create positions placed in non-existing places.\n * This requirement is important for operational transformation algorithms.\n *\n * Also, {@link module:engine/model/operation/operation~Operation operations}\n * kept in the {@link module:engine/model/document~Document#history document history}\n * are storing positions (and ranges) which were correct when those operations were applied, but may not be correct\n * after the document has changed.\n *\n * When changes are applied to the model, it may also happen that {@link module:engine/model/position~Position#parent position parent}\n * will change even if position path has not changed. Keep in mind, that if a position leads to non-existing element,\n * {@link module:engine/model/position~Position#parent} and some other properties and methods will throw errors.\n *\n * In most cases, position with wrong path is caused by an error in code, but it is sometimes needed, as described above.\n */\nvar Position = /*#__PURE__*/function () {\n  /**\n   * Creates a position.\n   *\n   * @param {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment} root Root of the position.\n   * @param {Array.<Number>} path Position path. See {@link module:engine/model/position~Position#path}.\n   * @param {module:engine/model/position~PositionStickiness} [stickiness='toNone'] Position stickiness.\n   * See {@link module:engine/model/position~PositionStickiness}.\n   */\n  function Position(root, path) {\n    var stickiness = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'toNone';\n    _classCallCheck(this, Position);\n    if (!root.is('element') && !root.is('documentFragment')) {\n      /**\n       * Position root is invalid.\n       *\n       * Positions can only be anchored in elements or document fragments.\n       *\n       * @error model-position-root-invalid\n       */\n      throw new CKEditorError('model-position-root-invalid: Position root invalid.', root);\n    }\n    if (!(path instanceof Array) || path.length === 0) {\n      /**\n       * Position path must be an array with at least one item.\n       *\n       * @error model-position-path-incorrect-format\n       * @param path\n       */\n      throw new CKEditorError('model-position-path-incorrect-format: Position path must be an array with at least one item.', root, {\n        path: path\n      });\n    }\n\n    // Normalize the root and path (if element was passed).\n    path = root.getPath().concat(path);\n    root = root.root;\n\n    /**\n     * Root of the position path.\n     *\n     * @readonly\n     * @member {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment}\n     * module:engine/model/position~Position#root\n     */\n    this.root = root;\n\n    /**\n     * Position of the node in the tree. **Path contains offsets, not indexes.**\n     *\n     * Position can be placed before, after or in a {@link module:engine/model/node~Node node} if that node has\n     * {@link module:engine/model/node~Node#offsetSize} greater than `1`. Items in position path are\n     * {@link module:engine/model/node~Node#startOffset starting offsets} of position ancestors, starting from direct root children,\n     * down to the position offset in it's parent.\n     *\n     *\t\t ROOT\n     *\t\t  |- P            before: [ 0 ]         after: [ 1 ]\n     *\t\t  |- UL           before: [ 1 ]         after: [ 2 ]\n     *\t\t     |- LI        before: [ 1, 0 ]      after: [ 1, 1 ]\n     *\t\t     |  |- foo    before: [ 1, 0, 0 ]   after: [ 1, 0, 3 ]\n     *\t\t     |- LI        before: [ 1, 1 ]      after: [ 1, 2 ]\n     *\t\t        |- bar    before: [ 1, 1, 0 ]   after: [ 1, 1, 3 ]\n     *\n     * `foo` and `bar` are representing {@link module:engine/model/text~Text text nodes}. Since text nodes has offset size\n     * greater than `1` you can place position offset between their start and end:\n     *\n     *\t\t ROOT\n     *\t\t  |- P\n     *\t\t  |- UL\n     *\t\t     |- LI\n     *\t\t     |  |- f^o|o  ^ has path: [ 1, 0, 1 ]   | has path: [ 1, 0, 2 ]\n     *\t\t     |- LI\n     *\t\t        |- b^a|r  ^ has path: [ 1, 1, 1 ]   | has path: [ 1, 1, 2 ]\n     *\n     * @readonly\n     * @member {Array.<Number>} module:engine/model/position~Position#path\n     */\n    this.path = path;\n\n    /**\n     * Position stickiness. See {@link module:engine/model/position~PositionStickiness}.\n     *\n     * @member {module:engine/model/position~PositionStickiness} module:engine/model/position~Position#stickiness\n     */\n    this.stickiness = stickiness;\n  }\n\n  /**\n   * Offset at which this position is located in its {@link module:engine/model/position~Position#parent parent}. It is equal\n   * to the last item in position {@link module:engine/model/position~Position#path path}.\n   *\n   * @type {Number}\n   */\n  return _createClass(Position, [{\n    key: \"offset\",\n    get: function get() {\n      return last(this.path);\n    }\n\n    /**\n     * @param {Number} newOffset\n     */,\n    set: function set(newOffset) {\n      this.path[this.path.length - 1] = newOffset;\n    }\n\n    /**\n     * Parent element of this position.\n     *\n     * Keep in mind that `parent` value is calculated when the property is accessed.\n     * If {@link module:engine/model/position~Position#path position path}\n     * leads to a non-existing element, `parent` property will throw error.\n     *\n     * Also it is a good idea to cache `parent` property if it is used frequently in an algorithm (i.e. in a long loop).\n     *\n     * @readonly\n     * @type {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment}\n     */\n  }, {\n    key: \"parent\",\n    get: function get() {\n      var parent = this.root;\n      for (var i = 0; i < this.path.length - 1; i++) {\n        parent = parent.getChild(parent.offsetToIndex(this.path[i]));\n        if (!parent) {\n          throw new CKEditorError('model-position-path-incorrect: The position\\'s path is incorrect.', this, {\n            position: this\n          });\n        }\n      }\n      if (parent.is('text')) {\n        /**\n         * The position's path is incorrect. This means that a position does not point to\n         * a correct place in the tree and hence, some of its methods and getters cannot work correctly.\n         *\n         * **Note**: Unlike DOM and view positions, in the model, the\n         * {@link module:engine/model/position~Position#parent position's parent} is always an element or a document fragment.\n         * The last offset in the {@link module:engine/model/position~Position#path position's path} is the point in this element where\n         * this position points.\n         *\n         * Read more about model positions and offsets in\n         * the {@glink framework/guides/architecture/editing-engine#indexes-and-offsets Editing engine architecture guide}.\n         *\n         * @error position-incorrect-path\n         * @param {module:engine/model/position~Position} position The incorrect position.\n         */\n        throw new CKEditorError('model-position-path-incorrect: The position\\'s path is incorrect.', this, {\n          position: this\n        });\n      }\n      return parent;\n    }\n\n    /**\n     * Position {@link module:engine/model/position~Position#offset offset} converted to an index in position's parent node. It is\n     * equal to the {@link module:engine/model/node~Node#index index} of a node after this position. If position is placed\n     * in text node, position index is equal to the index of that text node.\n     *\n     * @readonly\n     * @type {Number}\n     */\n  }, {\n    key: \"index\",\n    get: function get() {\n      return this.parent.offsetToIndex(this.offset);\n    }\n\n    /**\n     * Returns {@link module:engine/model/text~Text text node} instance in which this position is placed or `null` if this\n     * position is not in a text node.\n     *\n     * @readonly\n     * @type {module:engine/model/text~Text|null}\n     */\n  }, {\n    key: \"textNode\",\n    get: function get() {\n      var node = this.parent.getChild(this.index);\n      return node instanceof Text && node.startOffset < this.offset ? node : null;\n    }\n\n    /**\n     * Node directly after this position or `null` if this position is in text node.\n     *\n     * @readonly\n     * @type {module:engine/model/node~Node|null}\n     */\n  }, {\n    key: \"nodeAfter\",\n    get: function get() {\n      return this.textNode === null ? this.parent.getChild(this.index) : null;\n    }\n\n    /**\n     * Node directly before this position or `null` if this position is in text node.\n     *\n     * @readonly\n     * @type {Node}\n     */\n  }, {\n    key: \"nodeBefore\",\n    get: function get() {\n      return this.textNode === null ? this.parent.getChild(this.index - 1) : null;\n    }\n\n    /**\n     * Is `true` if position is at the beginning of its {@link module:engine/model/position~Position#parent parent}, `false` otherwise.\n     *\n     * @readonly\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isAtStart\",\n    get: function get() {\n      return this.offset === 0;\n    }\n\n    /**\n     * Is `true` if position is at the end of its {@link module:engine/model/position~Position#parent parent}, `false` otherwise.\n     *\n     * @readonly\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isAtEnd\",\n    get: function get() {\n      return this.offset == this.parent.maxOffset;\n    }\n\n    /**\n     * Checks whether this position is before or after given position.\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     *\n     * @param {module:engine/model/position~Position} otherPosition Position to compare with.\n     * @returns {module:engine/model/position~PositionRelation}\n     */\n  }, {\n    key: \"compareWith\",\n    value: function compareWith(otherPosition) {\n      if (this.root != otherPosition.root) {\n        return 'different';\n      }\n      var result = compareArrays(this.path, otherPosition.path);\n      switch (result) {\n        case 'same':\n          return 'same';\n        case 'prefix':\n          return 'before';\n        case 'extension':\n          return 'after';\n        default:\n          return this.path[result] < otherPosition.path[result] ? 'before' : 'after';\n      }\n    }\n\n    /**\n     * Gets the farthest position which matches the callback using\n     * {@link module:engine/model/treewalker~TreeWalker TreeWalker}.\n     *\n     * For example:\n     *\n     * \t\tgetLastMatchingPosition( value => value.type == 'text' );\n     * \t\t// <paragraph>[]foo</paragraph> -> <paragraph>foo[]</paragraph>\n     *\n     * \t\tgetLastMatchingPosition( value => value.type == 'text', { direction: 'backward' } );\n     * \t\t// <paragraph>foo[]</paragraph> -> <paragraph>[]foo</paragraph>\n     *\n     * \t\tgetLastMatchingPosition( value => false );\n     * \t\t// Do not move the position.\n     *\n     * @param {Function} skip Callback function. Gets {@link module:engine/model/treewalker~TreeWalkerValue} and should\n     * return `true` if the value should be skipped or `false` if not.\n     * @param {Object} options Object with configuration options. See {@link module:engine/model/treewalker~TreeWalker}.\n     *\n     * @returns {module:engine/model/position~Position} The position after the last item which matches the `skip` callback test.\n     */\n  }, {\n    key: \"getLastMatchingPosition\",\n    value: function getLastMatchingPosition(skip) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      options.startPosition = this;\n      var treeWalker = new TreeWalker(options);\n      treeWalker.skip(skip);\n      return treeWalker.position;\n    }\n\n    /**\n     * Returns a path to this position's parent. Parent path is equal to position {@link module:engine/model/position~Position#path path}\n     * but without the last item.\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     *\n     * @returns {Array.<Number>} Path to the parent.\n     */\n  }, {\n    key: \"getParentPath\",\n    value: function getParentPath() {\n      return this.path.slice(0, -1);\n    }\n\n    /**\n     * Returns ancestors array of this position, that is this position's parent and its ancestors.\n     *\n     * @returns {Array.<module:engine/model/item~Item>} Array with ancestors.\n     */\n  }, {\n    key: \"getAncestors\",\n    value: function getAncestors() {\n      if (this.parent.is('documentFragment')) {\n        return [this.parent];\n      } else {\n        return this.parent.getAncestors({\n          includeSelf: true\n        });\n      }\n    }\n\n    /**\n     * Returns the slice of two position {@link #path paths} which is identical. The {@link #root roots}\n     * of these two paths must be identical.\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     *\n     * @param {module:engine/model/position~Position} position The second position.\n     * @returns {Array.<Number>} The common path.\n     */\n  }, {\n    key: \"getCommonPath\",\n    value: function getCommonPath(position) {\n      if (this.root != position.root) {\n        return [];\n      }\n\n      // We find on which tree-level start and end have the lowest common ancestor\n      var cmp = compareArrays(this.path, position.path);\n      // If comparison returned string it means that arrays are same.\n      var diffAt = typeof cmp == 'string' ? Math.min(this.path.length, position.path.length) : cmp;\n      return this.path.slice(0, diffAt);\n    }\n\n    /**\n     * Returns an {@link module:engine/model/element~Element} or {@link module:engine/model/documentfragment~DocumentFragment}\n     * which is a common ancestor of both positions. The {@link #root roots} of these two positions must be identical.\n     *\n     * @param {module:engine/model/position~Position} position The second position.\n     * @returns {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment|null}\n     */\n  }, {\n    key: \"getCommonAncestor\",\n    value: function getCommonAncestor(position) {\n      var ancestorsA = this.getAncestors();\n      var ancestorsB = position.getAncestors();\n      var i = 0;\n      while (ancestorsA[i] == ancestorsB[i] && ancestorsA[i]) {\n        i++;\n      }\n      return i === 0 ? null : ancestorsA[i - 1];\n    }\n\n    /**\n     * Returns a new instance of `Position`, that has same {@link #parent parent} but it's offset\n     * is shifted by `shift` value (can be a negative value).\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     *\n     * @param {Number} shift Offset shift. Can be a negative value.\n     * @returns {module:engine/model/position~Position} Shifted position.\n     */\n  }, {\n    key: \"getShiftedBy\",\n    value: function getShiftedBy(shift) {\n      var shifted = this.clone();\n      var offset = shifted.offset + shift;\n      shifted.offset = offset < 0 ? 0 : offset;\n      return shifted;\n    }\n\n    /**\n     * Checks whether this position is after given position.\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     *\n     * @see module:engine/model/position~Position#isBefore\n     * @param {module:engine/model/position~Position} otherPosition Position to compare with.\n     * @returns {Boolean} True if this position is after given position.\n     */\n  }, {\n    key: \"isAfter\",\n    value: function isAfter(otherPosition) {\n      return this.compareWith(otherPosition) == 'after';\n    }\n\n    /**\n     * Checks whether this position is before given position.\n     *\n     * **Note:** watch out when using negation of the value returned by this method, because the negation will also\n     * be `true` if positions are in different roots and you might not expect this. You should probably use\n     * `a.isAfter( b ) || a.isEqual( b )` or `!a.isBefore( p ) && a.root == b.root` in most scenarios. If your\n     * condition uses multiple `isAfter` and `isBefore` checks, build them so they do not use negated values, i.e.:\n     *\n     *\t\tif ( a.isBefore( b ) && c.isAfter( d ) ) {\n     *\t\t\t// do A.\n     *\t\t} else {\n     *\t\t\t// do B.\n     *\t\t}\n     *\n     * or, if you have only one if-branch:\n     *\n     *\t\tif ( !( a.isBefore( b ) && c.isAfter( d ) ) {\n     *\t\t\t// do B.\n     *\t\t}\n     *\n     * rather than:\n     *\n     *\t\tif ( !a.isBefore( b ) || && !c.isAfter( d ) ) {\n     *\t\t\t// do B.\n     *\t\t} else {\n     *\t\t\t// do A.\n     *\t\t}\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     *\n     * @param {module:engine/model/position~Position} otherPosition Position to compare with.\n     * @returns {Boolean} True if this position is before given position.\n     */\n  }, {\n    key: \"isBefore\",\n    value: function isBefore(otherPosition) {\n      return this.compareWith(otherPosition) == 'before';\n    }\n\n    /**\n     * Checks whether this position is equal to given position.\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     *\n     * @param {module:engine/model/position~Position} otherPosition Position to compare with.\n     * @returns {Boolean} True if positions are same.\n     */\n  }, {\n    key: \"isEqual\",\n    value: function isEqual(otherPosition) {\n      return this.compareWith(otherPosition) == 'same';\n    }\n\n    /**\n     * Checks whether this position is touching given position. Positions touch when there are no text nodes\n     * or empty nodes in a range between them. Technically, those positions are not equal but in many cases\n     * they are very similar or even indistinguishable.\n     *\n     * @param {module:engine/model/position~Position} otherPosition Position to compare with.\n     * @returns {Boolean} True if positions touch.\n     */\n  }, {\n    key: \"isTouching\",\n    value: function isTouching(otherPosition) {\n      var left = null;\n      var right = null;\n      var compare = this.compareWith(otherPosition);\n      switch (compare) {\n        case 'same':\n          return true;\n        case 'before':\n          left = Position._createAt(this);\n          right = Position._createAt(otherPosition);\n          break;\n        case 'after':\n          left = Position._createAt(otherPosition);\n          right = Position._createAt(this);\n          break;\n        default:\n          return false;\n      }\n\n      // Cached for optimization purposes.\n      var leftParent = left.parent;\n      while (left.path.length + right.path.length) {\n        if (left.isEqual(right)) {\n          return true;\n        }\n        if (left.path.length > right.path.length) {\n          if (left.offset !== leftParent.maxOffset) {\n            return false;\n          }\n          left.path = left.path.slice(0, -1);\n          leftParent = leftParent.parent;\n          left.offset++;\n        } else {\n          if (right.offset !== 0) {\n            return false;\n          }\n          right.path = right.path.slice(0, -1);\n        }\n      }\n    }\n\n    /**\n     * Checks whether this object is of the given.\n     *\n     *\t\tposition.is( 'position' ); // -> true\n     *\t\tposition.is( 'model:position' ); // -> true\n     *\n     *\t\tposition.is( 'view:position' ); // -> false\n     *\t\tposition.is( 'documentSelection' ); // -> false\n     *\n     * {@link module:engine/model/node~Node#is Check the entire list of model objects} which implement the `is()` method.\n     *\n     * @param {String} type\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'position' || type == 'model:position';\n    }\n\n    /**\n     * Checks if two positions are in the same parent.\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     *\n     * @param {module:engine/model/position~Position} position Position to compare with.\n     * @returns {Boolean} `true` if positions have the same parent, `false` otherwise.\n     */\n  }, {\n    key: \"hasSameParentAs\",\n    value: function hasSameParentAs(position) {\n      if (this.root !== position.root) {\n        return false;\n      }\n      var thisParentPath = this.getParentPath();\n      var posParentPath = position.getParentPath();\n      return compareArrays(thisParentPath, posParentPath) == 'same';\n    }\n\n    /**\n     * Returns a copy of this position that is transformed by given `operation`.\n     *\n     * The new position's parameters are updated accordingly to the effect of the `operation`.\n     *\n     * For example, if `n` nodes are inserted before the position, the returned position {@link ~Position#offset} will be\n     * increased by `n`. If the position was in a merged element, it will be accordingly moved to the new element, etc.\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     *\n     * @param {module:engine/model/operation/operation~Operation} operation Operation to transform by.\n     * @returns {module:engine/model/position~Position} Transformed position.\n     */\n  }, {\n    key: \"getTransformedByOperation\",\n    value: function getTransformedByOperation(operation) {\n      var result;\n      switch (operation.type) {\n        case 'insert':\n          result = this._getTransformedByInsertOperation(operation);\n          break;\n        case 'move':\n        case 'remove':\n        case 'reinsert':\n          result = this._getTransformedByMoveOperation(operation);\n          break;\n        case 'split':\n          result = this._getTransformedBySplitOperation(operation);\n          break;\n        case 'merge':\n          result = this._getTransformedByMergeOperation(operation);\n          break;\n        default:\n          result = Position._createAt(this);\n          break;\n      }\n      return result;\n    }\n\n    /**\n     * Returns a copy of this position transformed by an insert operation.\n     *\n     * @protected\n     * @param {module:engine/model/operation/insertoperation~InsertOperation} operation\n     * @returns {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"_getTransformedByInsertOperation\",\n    value: function _getTransformedByInsertOperation(operation) {\n      return this._getTransformedByInsertion(operation.position, operation.howMany);\n    }\n\n    /**\n     * Returns a copy of this position transformed by a move operation.\n     *\n     * @protected\n     * @param {module:engine/model/operation/moveoperation~MoveOperation} operation\n     * @returns {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"_getTransformedByMoveOperation\",\n    value: function _getTransformedByMoveOperation(operation) {\n      return this._getTransformedByMove(operation.sourcePosition, operation.targetPosition, operation.howMany);\n    }\n\n    /**\n     * Returns a copy of this position transformed by a split operation.\n     *\n     * @protected\n     * @param {module:engine/model/operation/splitoperation~SplitOperation} operation\n     * @returns {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"_getTransformedBySplitOperation\",\n    value: function _getTransformedBySplitOperation(operation) {\n      var movedRange = operation.movedRange;\n      var isContained = movedRange.containsPosition(this) || movedRange.start.isEqual(this) && this.stickiness == 'toNext';\n      if (isContained) {\n        return this._getCombined(operation.splitPosition, operation.moveTargetPosition);\n      } else {\n        if (operation.graveyardPosition) {\n          return this._getTransformedByMove(operation.graveyardPosition, operation.insertionPosition, 1);\n        } else {\n          return this._getTransformedByInsertion(operation.insertionPosition, 1);\n        }\n      }\n    }\n\n    /**\n     * Returns a copy of this position transformed by merge operation.\n     *\n     * @protected\n     * @param {module:engine/model/operation/mergeoperation~MergeOperation} operation\n     * @returns {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"_getTransformedByMergeOperation\",\n    value: function _getTransformedByMergeOperation(operation) {\n      var movedRange = operation.movedRange;\n      var isContained = movedRange.containsPosition(this) || movedRange.start.isEqual(this);\n      var pos;\n      if (isContained) {\n        pos = this._getCombined(operation.sourcePosition, operation.targetPosition);\n        if (operation.sourcePosition.isBefore(operation.targetPosition)) {\n          // Above happens during OT when the merged element is moved before the merged-to element.\n          pos = pos._getTransformedByDeletion(operation.deletionPosition, 1);\n        }\n      } else if (this.isEqual(operation.deletionPosition)) {\n        pos = Position._createAt(operation.deletionPosition);\n      } else {\n        pos = this._getTransformedByMove(operation.deletionPosition, operation.graveyardPosition, 1);\n      }\n      return pos;\n    }\n\n    /**\n     * Returns a copy of this position that is updated by removing `howMany` nodes starting from `deletePosition`.\n     * It may happen that this position is in a removed node. If that is the case, `null` is returned instead.\n     *\n     * @protected\n     * @param {module:engine/model/position~Position} deletePosition Position before the first removed node.\n     * @param {Number} howMany How many nodes are removed.\n     * @returns {module:engine/model/position~Position|null} Transformed position or `null`.\n     */\n  }, {\n    key: \"_getTransformedByDeletion\",\n    value: function _getTransformedByDeletion(deletePosition, howMany) {\n      var transformed = Position._createAt(this);\n\n      // This position can't be affected if deletion was in a different root.\n      if (this.root != deletePosition.root) {\n        return transformed;\n      }\n      if (compareArrays(deletePosition.getParentPath(), this.getParentPath()) == 'same') {\n        // If nodes are removed from the node that is pointed by this position...\n        if (deletePosition.offset < this.offset) {\n          // And are removed from before an offset of that position...\n          if (deletePosition.offset + howMany > this.offset) {\n            // Position is in removed range, it's no longer in the tree.\n            return null;\n          } else {\n            // Decrement the offset accordingly.\n            transformed.offset -= howMany;\n          }\n        }\n      } else if (compareArrays(deletePosition.getParentPath(), this.getParentPath()) == 'prefix') {\n        // If nodes are removed from a node that is on a path to this position...\n        var i = deletePosition.path.length - 1;\n        if (deletePosition.offset <= this.path[i]) {\n          // And are removed from before next node of that path...\n          if (deletePosition.offset + howMany > this.path[i]) {\n            // If the next node of that path is removed return null\n            // because the node containing this position got removed.\n            return null;\n          } else {\n            // Otherwise, decrement index on that path.\n            transformed.path[i] -= howMany;\n          }\n        }\n      }\n      return transformed;\n    }\n\n    /**\n     * Returns a copy of this position that is updated by inserting `howMany` nodes at `insertPosition`.\n     *\n     * @protected\n     * @param {module:engine/model/position~Position} insertPosition Position where nodes are inserted.\n     * @param {Number} howMany How many nodes are inserted.\n     * @returns {module:engine/model/position~Position} Transformed position.\n     */\n  }, {\n    key: \"_getTransformedByInsertion\",\n    value: function _getTransformedByInsertion(insertPosition, howMany) {\n      var transformed = Position._createAt(this);\n\n      // This position can't be affected if insertion was in a different root.\n      if (this.root != insertPosition.root) {\n        return transformed;\n      }\n      if (compareArrays(insertPosition.getParentPath(), this.getParentPath()) == 'same') {\n        // If nodes are inserted in the node that is pointed by this position...\n        if (insertPosition.offset < this.offset || insertPosition.offset == this.offset && this.stickiness != 'toPrevious') {\n          // And are inserted before an offset of that position...\n          // \"Push\" this positions offset.\n          transformed.offset += howMany;\n        }\n      } else if (compareArrays(insertPosition.getParentPath(), this.getParentPath()) == 'prefix') {\n        // If nodes are inserted in a node that is on a path to this position...\n        var i = insertPosition.path.length - 1;\n        if (insertPosition.offset <= this.path[i]) {\n          // And are inserted before next node of that path...\n          // \"Push\" the index on that path.\n          transformed.path[i] += howMany;\n        }\n      }\n      return transformed;\n    }\n\n    /**\n     * Returns a copy of this position that is updated by moving `howMany` nodes from `sourcePosition` to `targetPosition`.\n     *\n     * @protected\n     * @param {module:engine/model/position~Position} sourcePosition Position before the first element to move.\n     * @param {module:engine/model/position~Position} targetPosition Position where moved elements will be inserted.\n     * @param {Number} howMany How many consecutive nodes to move, starting from `sourcePosition`.\n     * @returns {module:engine/model/position~Position} Transformed position.\n     */\n  }, {\n    key: \"_getTransformedByMove\",\n    value: function _getTransformedByMove(sourcePosition, targetPosition, howMany) {\n      // Update target position, as it could be affected by nodes removal.\n      targetPosition = targetPosition._getTransformedByDeletion(sourcePosition, howMany);\n      if (sourcePosition.isEqual(targetPosition)) {\n        // If `targetPosition` is equal to `sourcePosition` this isn't really any move. Just return position as it is.\n        return Position._createAt(this);\n      }\n\n      // Moving a range removes nodes from their original position. We acknowledge this by proper transformation.\n      var transformed = this._getTransformedByDeletion(sourcePosition, howMany);\n      var isMoved = transformed === null || sourcePosition.isEqual(this) && this.stickiness == 'toNext' || sourcePosition.getShiftedBy(howMany).isEqual(this) && this.stickiness == 'toPrevious';\n      if (isMoved) {\n        // This position is inside moved range (or sticks to it).\n        // In this case, we calculate a combination of this position, move source position and target position.\n        return this._getCombined(sourcePosition, targetPosition);\n      } else {\n        // This position is not inside a removed range.\n        //\n        // In next step, we simply reflect inserting `howMany` nodes, which might further affect the position.\n        return transformed._getTransformedByInsertion(targetPosition, howMany);\n      }\n    }\n\n    /**\n     * Returns a new position that is a combination of this position and given positions.\n     *\n     * The combined position is a copy of this position transformed by moving a range starting at `source` position\n     * to the `target` position. It is expected that this position is inside the moved range.\n     *\n     * Example:\n     *\n     *\t\tlet original = model.createPositionFromPath( root, [ 2, 3, 1 ] );\n     *\t\tlet source = model.createPositionFromPath( root, [ 2, 2 ] );\n     *\t\tlet target = model.createPositionFromPath( otherRoot, [ 1, 1, 3 ] );\n     *\t\toriginal._getCombined( source, target ); // path is [ 1, 1, 4, 1 ], root is `otherRoot`\n     *\n     * Explanation:\n     *\n     * We have a position `[ 2, 3, 1 ]` and move some nodes from `[ 2, 2 ]` to `[ 1, 1, 3 ]`. The original position\n     * was inside moved nodes and now should point to the new place. The moved nodes will be after\n     * positions `[ 1, 1, 3 ]`, `[ 1, 1, 4 ]`, `[ 1, 1, 5 ]`. Since our position was in the second moved node,\n     * the transformed position will be in a sub-tree of a node at `[ 1, 1, 4 ]`. Looking at original path, we\n     * took care of `[ 2, 3 ]` part of it. Now we have to add the rest of the original path to the transformed path.\n     * Finally, the transformed position will point to `[ 1, 1, 4, 1 ]`.\n     *\n     * @protected\n     * @param {module:engine/model/position~Position} source Beginning of the moved range.\n     * @param {module:engine/model/position~Position} target Position where the range is moved.\n     * @returns {module:engine/model/position~Position} Combined position.\n     */\n  }, {\n    key: \"_getCombined\",\n    value: function _getCombined(source, target) {\n      var i = source.path.length - 1;\n\n      // The first part of a path to combined position is a path to the place where nodes were moved.\n      var combined = Position._createAt(target);\n      combined.stickiness = this.stickiness;\n\n      // Then we have to update the rest of the path.\n\n      // Fix the offset because this position might be after `from` position and we have to reflect that.\n      combined.offset = combined.offset + this.path[i] - source.offset;\n\n      // Then, add the rest of the path.\n      // If this position is at the same level as `from` position nothing will get added.\n      combined.path = combined.path.concat(this.path.slice(i + 1));\n      return combined;\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return {\n        root: this.root.toJSON(),\n        path: Array.from(this.path),\n        stickiness: this.stickiness\n      };\n    }\n\n    /**\n     * Returns a new position that is equal to current position.\n     *\n     * @returns {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      return new this.constructor(this.root, this.path, this.stickiness);\n    }\n\n    /**\n     * Creates position at the given location. The location can be specified as:\n     *\n     * * a {@link module:engine/model/position~Position position},\n     * * parent element and offset (offset defaults to `0`),\n     * * parent element and `'end'` (sets position at the end of that element),\n     * * {@link module:engine/model/item~Item model item} and `'before'` or `'after'` (sets position before or after given model item).\n     *\n     * This method is a shortcut to other factory methods such as:\n     *\n     * * {@link module:engine/model/position~Position._createBefore},\n     * * {@link module:engine/model/position~Position._createAfter}.\n     *\n     * @param {module:engine/model/item~Item|module:engine/model/position~Position} itemOrPosition\n     * @param {Number|'end'|'before'|'after'} [offset] Offset or one of the flags. Used only when the\n     * first parameter is a {@link module:engine/model/item~Item model item}.\n     * @param {module:engine/model/position~PositionStickiness} [stickiness='toNone'] Position stickiness. Used only when the\n     * first parameter is a {@link module:engine/model/item~Item model item}.\n     * @protected\n     */\n  }], [{\n    key: \"_createAt\",\n    value: function _createAt(itemOrPosition, offset) {\n      var stickiness = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'toNone';\n      if (itemOrPosition instanceof Position) {\n        return new Position(itemOrPosition.root, itemOrPosition.path, itemOrPosition.stickiness);\n      } else {\n        var node = itemOrPosition;\n        if (offset == 'end') {\n          offset = node.maxOffset;\n        } else if (offset == 'before') {\n          return this._createBefore(node, stickiness);\n        } else if (offset == 'after') {\n          return this._createAfter(node, stickiness);\n        } else if (offset !== 0 && !offset) {\n          /**\n           * {@link module:engine/model/model~Model#createPositionAt `Model#createPositionAt()`}\n           * requires the offset to be specified when the first parameter is a model item.\n           *\n           * @error model-createPositionAt-offset-required\n           */\n          throw new CKEditorError('model-createPositionAt-offset-required: ' + 'Model#createPositionAt() requires the offset when the first parameter is a model item.', [this, itemOrPosition]);\n        }\n        if (!node.is('element') && !node.is('documentFragment')) {\n          /**\n           * Position parent have to be a model element or model document fragment.\n           *\n           * @error model-position-parent-incorrect\n           */\n          throw new CKEditorError('model-position-parent-incorrect: Position parent have to be a element or document fragment.', [this, itemOrPosition]);\n        }\n        var path = node.getPath();\n        path.push(offset);\n        return new this(node.root, path, stickiness);\n      }\n    }\n\n    /**\n     * Creates a new position, after given {@link module:engine/model/item~Item model item}.\n     *\n     * @param {module:engine/model/item~Item} item Item after which the position should be placed.\n     * @param {module:engine/model/position~PositionStickiness} [stickiness='toNone'] Position stickiness.\n     * @returns {module:engine/model/position~Position}\n     * @protected\n     */\n  }, {\n    key: \"_createAfter\",\n    value: function _createAfter(item, stickiness) {\n      if (!item.parent) {\n        /**\n         * You can not make a position after a root element.\n         *\n         * @error model-position-after-root\n         * @param {module:engine/model/item~Item} root\n         */\n        throw new CKEditorError('model-position-after-root: You cannot make a position after root.', [this, item], {\n          root: item\n        });\n      }\n      return this._createAt(item.parent, item.endOffset, stickiness);\n    }\n\n    /**\n     * Creates a new position, before the given {@link module:engine/model/item~Item model item}.\n     *\n     * @param {module:engine/model/item~Item} item Item before which the position should be placed.\n     * @param {module:engine/model/position~PositionStickiness} [stickiness='toNone'] Position stickiness.\n     * @returns {module:engine/model/position~Position}\n     * @protected\n     */\n  }, {\n    key: \"_createBefore\",\n    value: function _createBefore(item, stickiness) {\n      if (!item.parent) {\n        /**\n         * You can not make a position before a root element.\n         *\n         * @error model-position-before-root\n         * @param {module:engine/model/item~Item} root\n         */\n        throw new CKEditorError('model-position-before-root: You cannot make a position before root.', item, {\n          root: item\n        });\n      }\n      return this._createAt(item.parent, item.startOffset, stickiness);\n    }\n\n    /**\n     * Creates a `Position` instance from given plain object (i.e. parsed JSON string).\n     *\n     * @param {Object} json Plain object to be converted to `Position`.\n     * @param {module:engine/model/document~Document} doc Document object that will be position owner.\n     * @returns {module:engine/model/position~Position} `Position` instance created using given plain object.\n     */\n  }, {\n    key: \"fromJSON\",\n    value: function fromJSON(json, doc) {\n      if (json.root === '$graveyard') {\n        var pos = new Position(doc.graveyard, json.path);\n        pos.stickiness = json.stickiness;\n        return pos;\n      }\n      if (!doc.getRoot(json.root)) {\n        /**\n         * Cannot create position for document. Root with specified name does not exist.\n         *\n         * @error model-position-fromjson-no-root\n         * @param {String} rootName\n         */\n        throw new CKEditorError('model-position-fromjson-no-root: Cannot create position for document. Root with specified name does not exist.', doc, {\n          rootName: json.root\n        });\n      }\n      return new Position(doc.getRoot(json.root), json.path, json.stickiness);\n    }\n  }]);\n}();\n/**\n * A flag indicating whether this position is `'before'` or `'after'` or `'same'` as given position.\n * If positions are in different roots `'different'` flag is returned.\n *\n * @typedef {String} module:engine/model/position~PositionRelation\n */\n/**\n * Represents how position is \"sticking\" with neighbour nodes. Used to define how position should be transformed (moved)\n * in edge cases. Possible values: `'toNone'`, `'toNext'`, `'toPrevious'`.\n *\n * Examples:\n *\n *\t\tInsert. Position is at | and nodes are inserted at the same position, marked as ^:\n *\n *\t\t- sticks to none:           <p>f^|oo</p>  ->  <p>fbar|oo</p>\n *\t\t- sticks to next node:      <p>f^|oo</p>  ->  <p>fbar|oo</p>\n *\t\t- sticks to previous node:  <p>f|^oo</p>  ->  <p>f|baroo</p>\n *\n *\n *\t\tMove. Position is at | and range [oo] is moved to position ^:\n *\n *\t\t- sticks to none:           <p>f|[oo]</p><p>b^ar</p>  ->  <p>f|</p><p>booar</p>\n *\t\t- sticks to none:           <p>f[oo]|</p><p>b^ar</p>  ->  <p>f|</p><p>booar</p>\n *\n *\t\t- sticks to next node:      <p>f|[oo]</p><p>b^ar</p>  ->  <p>f</p><p>b|ooar</p>\n *\t\t- sticks to next node:      <p>f[oo]|</p><p>b^ar</p>  ->  <p>f|</p><p>booar</p>\n *\n *\t\t- sticks to previous node:  <p>f|[oo]</p><p>b^ar</p>  ->  <p>f|</p><p>booar</p>\n *\t\t- sticks to previous node:  <p>f[oo]|</p><p>b^ar</p>  ->  <p>f</p><p>boo|ar</p>\n *\n * @typedef {String} module:engine/model/position~PositionStickiness\n */\nexport { Position as default };","import _toConsumableArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _regeneratorValues from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regeneratorValues.js\";\nimport _regenerator from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regenerator.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/range\n */\n\nimport Position from './position';\nimport TreeWalker from './treewalker';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport compareArrays from '@ckeditor/ckeditor5-utils/src/comparearrays';\n\n/**\n * Represents a range in the model tree.\n *\n * A range is defined by its {@link module:engine/model/range~Range#start} and {@link module:engine/model/range~Range#end}\n * positions.\n *\n * You can create range instances via its constructor or the `createRange*()` factory methods of\n * {@link module:engine/model/model~Model} and {@link module:engine/model/writer~Writer}.\n */\nvar Range = /*#__PURE__*/function () {\n  /**\n   * Creates a range spanning from `start` position to `end` position.\n   *\n   * @param {module:engine/model/position~Position} start Start position.\n   * @param {module:engine/model/position~Position} [end] End position. If not set, range will be collapsed at `start` position.\n   */\n  function Range(start) {\n    var end = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    _classCallCheck(this, Range);\n    /**\n     * Start position.\n     *\n     * @readonly\n     * @member {module:engine/model/position~Position}\n     */\n    this.start = Position._createAt(start);\n\n    /**\n     * End position.\n     *\n     * @readonly\n     * @member {module:engine/model/position~Position}\n     */\n    this.end = end ? Position._createAt(end) : Position._createAt(start);\n\n    // If the range is collapsed, treat in a similar way as a position and set its boundaries stickiness to 'toNone'.\n    // In other case, make the boundaries stick to the \"inside\" of the range.\n    this.start.stickiness = this.isCollapsed ? 'toNone' : 'toNext';\n    this.end.stickiness = this.isCollapsed ? 'toNone' : 'toPrevious';\n  }\n\n  /**\n   * Iterable interface.\n   *\n   * Iterates over all {@link module:engine/model/item~Item items} that are in this range and returns\n   * them together with additional information like length or {@link module:engine/model/position~Position positions},\n   * grouped as {@link module:engine/model/treewalker~TreeWalkerValue}.\n   * It iterates over all {@link module:engine/model/textproxy~TextProxy text contents} that are inside the range\n   * and all the {@link module:engine/model/element~Element}s that are entered into when iterating over this range.\n   *\n   * This iterator uses {@link module:engine/model/treewalker~TreeWalker} with `boundaries` set to this range\n   * and `ignoreElementEnd` option set to `true`.\n   *\n   * @returns {Iterable.<module:engine/model/treewalker~TreeWalkerValue>}\n   */\n  return _createClass(Range, [{\n    key: Symbol.iterator,\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function value() {\n      return _regenerator().w(function (_context) {\n        while (1) switch (_context.n) {\n          case 0:\n            return _context.d(_regeneratorValues(new TreeWalker({\n              boundaries: this,\n              ignoreElementEnd: true\n            })), 1);\n          case 1:\n            return _context.a(2);\n        }\n      }, value, this);\n    })\n    /**\n     * Returns whether the range is collapsed, that is if {@link #start} and\n     * {@link #end} positions are equal.\n     *\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isCollapsed\",\n    get: function get() {\n      return this.start.isEqual(this.end);\n    }\n\n    /**\n     * Returns whether this range is flat, that is if {@link #start} position and\n     * {@link #end} position are in the same {@link module:engine/model/position~Position#parent}.\n     *\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isFlat\",\n    get: function get() {\n      var startParentPath = this.start.getParentPath();\n      var endParentPath = this.end.getParentPath();\n      return compareArrays(startParentPath, endParentPath) == 'same';\n    }\n\n    /**\n     * Range root element.\n     *\n     * @type {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment}\n     */\n  }, {\n    key: \"root\",\n    get: function get() {\n      return this.start.root;\n    }\n\n    /**\n     * Checks whether this range contains given {@link module:engine/model/position~Position position}.\n     *\n     * @param {module:engine/model/position~Position} position Position to check.\n     * @returns {Boolean} `true` if given {@link module:engine/model/position~Position position} is contained\n     * in this range,`false` otherwise.\n     */\n  }, {\n    key: \"containsPosition\",\n    value: function containsPosition(position) {\n      return position.isAfter(this.start) && position.isBefore(this.end);\n    }\n\n    /**\n     * Checks whether this range contains given {@link ~Range range}.\n     *\n     * @param {module:engine/model/range~Range} otherRange Range to check.\n     * @param {Boolean} [loose=false] Whether the check is loose or strict. If the check is strict (`false`), compared range cannot\n     * start or end at the same position as this range boundaries. If the check is loose (`true`), compared range can start, end or\n     * even be equal to this range. Note that collapsed ranges are always compared in strict mode.\n     * @returns {Boolean} `true` if given {@link ~Range range} boundaries are contained by this range, `false` otherwise.\n     */\n  }, {\n    key: \"containsRange\",\n    value: function containsRange(otherRange) {\n      var loose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      if (otherRange.isCollapsed) {\n        loose = false;\n      }\n      var containsStart = this.containsPosition(otherRange.start) || loose && this.start.isEqual(otherRange.start);\n      var containsEnd = this.containsPosition(otherRange.end) || loose && this.end.isEqual(otherRange.end);\n      return containsStart && containsEnd;\n    }\n\n    /**\n     * Checks whether given {@link module:engine/model/item~Item} is inside this range.\n     *\n     * @param {module:engine/model/item~Item} item Model item to check.\n     */\n  }, {\n    key: \"containsItem\",\n    value: function containsItem(item) {\n      var pos = Position._createBefore(item);\n      return this.containsPosition(pos) || this.start.isEqual(pos);\n    }\n\n    /**\n     * Checks whether this object is of the given.\n     *\n     *\t\trange.is( 'range' ); // -> true\n     *\t\trange.is( 'model:range' ); // -> true\n     *\n     *\t\trange.is( 'view:range' ); // -> false\n     *\t\trange.is( 'documentSelection' ); // -> false\n     *\n     * {@link module:engine/model/node~Node#is Check the entire list of model objects} which implement the `is()` method.\n     *\n     * @param {String} type\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'range' || type == 'model:range';\n    }\n\n    /**\n     * Two ranges are equal if their {@link #start} and {@link #end} positions are equal.\n     *\n     * @param {module:engine/model/range~Range} otherRange Range to compare with.\n     * @returns {Boolean} `true` if ranges are equal, `false` otherwise.\n     */\n  }, {\n    key: \"isEqual\",\n    value: function isEqual(otherRange) {\n      return this.start.isEqual(otherRange.start) && this.end.isEqual(otherRange.end);\n    }\n\n    /**\n     * Checks and returns whether this range intersects with given range.\n     *\n     * @param {module:engine/model/range~Range} otherRange Range to compare with.\n     * @returns {Boolean} `true` if ranges intersect, `false` otherwise.\n     */\n  }, {\n    key: \"isIntersecting\",\n    value: function isIntersecting(otherRange) {\n      return this.start.isBefore(otherRange.end) && this.end.isAfter(otherRange.start);\n    }\n\n    /**\n     * Computes which part(s) of this {@link ~Range range} is not a part of given {@link ~Range range}.\n     * Returned array contains zero, one or two {@link ~Range ranges}.\n     *\n     * Examples:\n     *\n     *\t\tlet range = model.createRange(\n     *\t\t\tmodel.createPositionFromPath( root, [ 2, 7 ] ),\n     *\t\t\tmodel.createPositionFromPath( root, [ 4, 0, 1 ] )\n     *\t\t);\n     *\t\tlet otherRange = model.createRange( model.createPositionFromPath( root, [ 1 ] ), model.createPositionFromPath( root, [ 5 ] ) );\n     *\t\tlet transformed = range.getDifference( otherRange );\n     *\t\t// transformed array has no ranges because `otherRange` contains `range`\n     *\n     *\t\totherRange = model.createRange( model.createPositionFromPath( root, [ 1 ] ), model.createPositionFromPath( root, [ 3 ] ) );\n     *\t\ttransformed = range.getDifference( otherRange );\n     *\t\t// transformed array has one range: from [ 3 ] to [ 4, 0, 1 ]\n     *\n     *\t\totherRange = model.createRange( model.createPositionFromPath( root, [ 3 ] ), model.createPositionFromPath( root, [ 4 ] ) );\n     *\t\ttransformed = range.getDifference( otherRange );\n     *\t\t// transformed array has two ranges: from [ 2, 7 ] to [ 3 ] and from [ 4 ] to [ 4, 0, 1 ]\n     *\n     * @param {module:engine/model/range~Range} otherRange Range to differentiate against.\n     * @returns {Array.<module:engine/model/range~Range>} The difference between ranges.\n     */\n  }, {\n    key: \"getDifference\",\n    value: function getDifference(otherRange) {\n      var ranges = [];\n      if (this.isIntersecting(otherRange)) {\n        // Ranges intersect.\n\n        if (this.containsPosition(otherRange.start)) {\n          // Given range start is inside this range. This means that we have to\n          // add shrunken range - from the start to the middle of this range.\n          ranges.push(new Range(this.start, otherRange.start));\n        }\n        if (this.containsPosition(otherRange.end)) {\n          // Given range end is inside this range. This means that we have to\n          // add shrunken range - from the middle of this range to the end.\n          ranges.push(new Range(otherRange.end, this.end));\n        }\n      } else {\n        // Ranges do not intersect, return the original range.\n        ranges.push(new Range(this.start, this.end));\n      }\n      return ranges;\n    }\n\n    /**\n     * Returns an intersection of this {@link ~Range range} and given {@link ~Range range}.\n     * Intersection is a common part of both of those ranges. If ranges has no common part, returns `null`.\n     *\n     * Examples:\n     *\n     *\t\tlet range = model.createRange(\n     *\t\t\tmodel.createPositionFromPath( root, [ 2, 7 ] ),\n     *\t\t\tmodel.createPositionFromPath( root, [ 4, 0, 1 ] )\n     *\t\t);\n     *\t\tlet otherRange = model.createRange( model.createPositionFromPath( root, [ 1 ] ), model.createPositionFromPath( root, [ 2 ] ) );\n     *\t\tlet transformed = range.getIntersection( otherRange ); // null - ranges have no common part\n     *\n     *\t\totherRange = model.createRange( model.createPositionFromPath( root, [ 3 ] ), model.createPositionFromPath( root, [ 5 ] ) );\n     *\t\ttransformed = range.getIntersection( otherRange ); // range from [ 3 ] to [ 4, 0, 1 ]\n     *\n     * @param {module:engine/model/range~Range} otherRange Range to check for intersection.\n     * @returns {module:engine/model/range~Range|null} A common part of given ranges or `null` if ranges have no common part.\n     */\n  }, {\n    key: \"getIntersection\",\n    value: function getIntersection(otherRange) {\n      if (this.isIntersecting(otherRange)) {\n        // Ranges intersect, so a common range will be returned.\n        // At most, it will be same as this range.\n        var commonRangeStart = this.start;\n        var commonRangeEnd = this.end;\n        if (this.containsPosition(otherRange.start)) {\n          // Given range start is inside this range. This means thaNt we have to\n          // shrink common range to the given range start.\n          commonRangeStart = otherRange.start;\n        }\n        if (this.containsPosition(otherRange.end)) {\n          // Given range end is inside this range. This means that we have to\n          // shrink common range to the given range end.\n          commonRangeEnd = otherRange.end;\n        }\n        return new Range(commonRangeStart, commonRangeEnd);\n      }\n\n      // Ranges do not intersect, so they do not have common part.\n      return null;\n    }\n\n    /**\n     * Computes and returns the smallest set of {@link #isFlat flat} ranges, that covers this range in whole.\n     *\n     * See an example of a model structure (`[` and `]` are range boundaries):\n     *\n     *\t\troot                                                            root\n     *\t\t |- element DIV                         DIV             P2              P3             DIV\n     *\t\t |   |- element H                   H        P1        f o o           b a r       H         P4\n     *\t\t |   |   |- \"fir[st\"             fir[st     lorem                               se]cond     ipsum\n     *\t\t |   |- element P1\n     *\t\t |   |   |- \"lorem\"                                              ||\n     *\t\t |- element P2                                                   ||\n     *\t\t |   |- \"foo\"                                                    VV\n     *\t\t |- element P3\n     *\t\t |   |- \"bar\"                                                   root\n     *\t\t |- element DIV                         DIV             [P2             P3]             DIV\n     *\t\t |   |- element H                   H       [P1]       f o o           b a r        H         P4\n     *\t\t |   |   |- \"se]cond\"            fir[st]    lorem                               [se]cond     ipsum\n     *\t\t |   |- element P4\n     *\t\t |   |   |- \"ipsum\"\n     *\n     * As it can be seen, letters contained in the range are: `stloremfoobarse`, spread across different parents.\n     * We are looking for minimal set of flat ranges that contains the same nodes.\n     *\n     * Minimal flat ranges for above range `( [ 0, 0, 3 ], [ 3, 0, 2 ] )` will be:\n     *\n     *\t\t( [ 0, 0, 3 ], [ 0, 0, 5 ] ) = \"st\"\n     *\t\t( [ 0, 1 ], [ 0, 2 ] ) = element P1 (\"lorem\")\n     *\t\t( [ 1 ], [ 3 ] ) = element P2, element P3 (\"foobar\")\n     *\t\t( [ 3, 0, 0 ], [ 3, 0, 2 ] ) = \"se\"\n     *\n     * **Note:** if an {@link module:engine/model/element~Element element} is not wholly contained in this range, it won't be returned\n     * in any of the returned flat ranges. See in the example how `H` elements at the beginning and at the end of the range\n     * were omitted. Only their parts that were wholly in the range were returned.\n     *\n     * **Note:** this method is not returning flat ranges that contain no nodes.\n     *\n     * @returns {Array.<module:engine/model/range~Range>} Array of flat ranges covering this range.\n     */\n  }, {\n    key: \"getMinimalFlatRanges\",\n    value: function getMinimalFlatRanges() {\n      var ranges = [];\n      var diffAt = this.start.getCommonPath(this.end).length;\n      var pos = Position._createAt(this.start);\n      var posParent = pos.parent;\n\n      // Go up.\n      while (pos.path.length > diffAt + 1) {\n        var howMany = posParent.maxOffset - pos.offset;\n        if (howMany !== 0) {\n          ranges.push(new Range(pos, pos.getShiftedBy(howMany)));\n        }\n        pos.path = pos.path.slice(0, -1);\n        pos.offset++;\n        posParent = posParent.parent;\n      }\n\n      // Go down.\n      while (pos.path.length <= this.end.path.length) {\n        var offset = this.end.path[pos.path.length - 1];\n        var _howMany = offset - pos.offset;\n        if (_howMany !== 0) {\n          ranges.push(new Range(pos, pos.getShiftedBy(_howMany)));\n        }\n        pos.offset = offset;\n        pos.path.push(0);\n      }\n      return ranges;\n    }\n\n    /**\n     * Creates a {@link module:engine/model/treewalker~TreeWalker TreeWalker} instance with this range as a boundary.\n     *\n     * For example, to iterate over all items in the entire document root:\n     *\n     *\t\t// Create a range spanning over the entire root content:\n     *\t\tconst range = editor.model.createRangeIn( editor.model.document.getRoot() );\n     *\n     *\t\t// Iterate over all items in this range:\n     *\t\tfor ( const value of range.getWalker() ) {\n     *\t\t\tconsole.log( value.item );\n     *\t\t}\n     *\n     * @param {Object} options Object with configuration options. See {@link module:engine/model/treewalker~TreeWalker}.\n     * @param {module:engine/model/position~Position} [options.startPosition]\n     * @param {Boolean} [options.singleCharacters=false]\n     * @param {Boolean} [options.shallow=false]\n     * @param {Boolean} [options.ignoreElementEnd=false]\n     */\n  }, {\n    key: \"getWalker\",\n    value: function getWalker() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      options.boundaries = this;\n      return new TreeWalker(options);\n    }\n\n    /**\n     * Returns an iterator that iterates over all {@link module:engine/model/item~Item items} that are in this range and returns\n     * them.\n     *\n     * This method uses {@link module:engine/model/treewalker~TreeWalker} with `boundaries` set to this range and `ignoreElementEnd` option\n     * set to `true`. However it returns only {@link module:engine/model/item~Item model items},\n     * not {@link module:engine/model/treewalker~TreeWalkerValue}.\n     *\n     * You may specify additional options for the tree walker. See {@link module:engine/model/treewalker~TreeWalker} for\n     * a full list of available options.\n     *\n     * @method getItems\n     * @param {Object} options Object with configuration options. See {@link module:engine/model/treewalker~TreeWalker}.\n     * @returns {Iterable.<module:engine/model/item~Item>}\n     */\n  }, {\n    key: \"getItems\",\n    value: function getItems() {\n      var _this = this;\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      return /*#__PURE__*/_regenerator().m(function _callee() {\n        var treeWalker, _iterator, _step, value, _t;\n        return _regenerator().w(function (_context2) {\n          while (1) switch (_context2.p = _context2.n) {\n            case 0:\n              options.boundaries = _this;\n              options.ignoreElementEnd = true;\n              treeWalker = new TreeWalker(options);\n              _iterator = _createForOfIteratorHelper(treeWalker);\n              _context2.p = 1;\n              _iterator.s();\n            case 2:\n              if ((_step = _iterator.n()).done) {\n                _context2.n = 4;\n                break;\n              }\n              value = _step.value;\n              _context2.n = 3;\n              return value.item;\n            case 3:\n              _context2.n = 2;\n              break;\n            case 4:\n              _context2.n = 6;\n              break;\n            case 5:\n              _context2.p = 5;\n              _t = _context2.v;\n              _iterator.e(_t);\n            case 6:\n              _context2.p = 6;\n              _iterator.f();\n              return _context2.f(6);\n            case 7:\n              return _context2.a(2);\n          }\n        }, _callee, null, [[1, 5, 6, 7]]);\n      })();\n    }\n\n    /**\n     * Returns an iterator that iterates over all {@link module:engine/model/position~Position positions} that are boundaries or\n     * contained in this range.\n     *\n     * This method uses {@link module:engine/model/treewalker~TreeWalker} with `boundaries` set to this range. However it returns only\n     * {@link module:engine/model/position~Position positions}, not {@link module:engine/model/treewalker~TreeWalkerValue}.\n     *\n     * You may specify additional options for the tree walker. See {@link module:engine/model/treewalker~TreeWalker} for\n     * a full list of available options.\n     *\n     * @param {Object} options Object with configuration options. See {@link module:engine/model/treewalker~TreeWalker}.\n     * @returns {Iterable.<module:engine/model/position~Position>}\n     */\n  }, {\n    key: \"getPositions\",\n    value: function getPositions() {\n      var _this2 = this;\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      return /*#__PURE__*/_regenerator().m(function _callee2() {\n        var treeWalker, _iterator2, _step2, value, _t2;\n        return _regenerator().w(function (_context3) {\n          while (1) switch (_context3.p = _context3.n) {\n            case 0:\n              options.boundaries = _this2;\n              treeWalker = new TreeWalker(options);\n              _context3.n = 1;\n              return treeWalker.position;\n            case 1:\n              _iterator2 = _createForOfIteratorHelper(treeWalker);\n              _context3.p = 2;\n              _iterator2.s();\n            case 3:\n              if ((_step2 = _iterator2.n()).done) {\n                _context3.n = 5;\n                break;\n              }\n              value = _step2.value;\n              _context3.n = 4;\n              return value.nextPosition;\n            case 4:\n              _context3.n = 3;\n              break;\n            case 5:\n              _context3.n = 7;\n              break;\n            case 6:\n              _context3.p = 6;\n              _t2 = _context3.v;\n              _iterator2.e(_t2);\n            case 7:\n              _context3.p = 7;\n              _iterator2.f();\n              return _context3.f(7);\n            case 8:\n              return _context3.a(2);\n          }\n        }, _callee2, null, [[2, 6, 7, 8]]);\n      })();\n    }\n\n    /**\n     * Returns a range that is a result of transforming this range by given `operation`.\n     *\n     * **Note:** transformation may break one range into multiple ranges (for example, when a part of the range is\n     * moved to a different part of document tree). For this reason, an array is returned by this method and it\n     * may contain one or more `Range` instances.\n     *\n     * @param {module:engine/model/operation/operation~Operation} operation Operation to transform range by.\n     * @returns {Array.<module:engine/model/range~Range>} Range which is the result of transformation.\n     */\n  }, {\n    key: \"getTransformedByOperation\",\n    value: function getTransformedByOperation(operation) {\n      switch (operation.type) {\n        case 'insert':\n          return this._getTransformedByInsertOperation(operation);\n        case 'move':\n        case 'remove':\n        case 'reinsert':\n          return this._getTransformedByMoveOperation(operation);\n        case 'split':\n          return [this._getTransformedBySplitOperation(operation)];\n        case 'merge':\n          return [this._getTransformedByMergeOperation(operation)];\n      }\n      return [new Range(this.start, this.end)];\n    }\n\n    /**\n     * Returns a range that is a result of transforming this range by multiple `operations`.\n     *\n     * @see ~Range#getTransformedByOperation\n     * @param {Iterable.<module:engine/model/operation/operation~Operation>} operations Operations to transform the range by.\n     * @returns {Array.<module:engine/model/range~Range>} Range which is the result of transformation.\n     */\n  }, {\n    key: \"getTransformedByOperations\",\n    value: function getTransformedByOperations(operations) {\n      var ranges = [new Range(this.start, this.end)];\n      var _iterator3 = _createForOfIteratorHelper(operations),\n        _step3;\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var operation = _step3.value;\n          for (var _i = 0; _i < ranges.length; _i++) {\n            var result = ranges[_i].getTransformedByOperation(operation);\n            ranges.splice.apply(ranges, [_i, 1].concat(_toConsumableArray(result)));\n            _i += result.length - 1;\n          }\n        }\n\n        // It may happen that a range is split into two, and then the part of second \"piece\" is moved into first\n        // \"piece\". In this case we will have incorrect third range, which should not be included in the result --\n        // because it is already included in the first \"piece\". In this loop we are looking for all such ranges that\n        // are inside other ranges and we simply remove them.\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n      for (var i = 0; i < ranges.length; i++) {\n        var range = ranges[i];\n        for (var j = i + 1; j < ranges.length; j++) {\n          var next = ranges[j];\n          if (range.containsRange(next) || next.containsRange(range) || range.isEqual(next)) {\n            ranges.splice(j, 1);\n          }\n        }\n      }\n      return ranges;\n    }\n\n    /**\n     * Returns an {@link module:engine/model/element~Element} or {@link module:engine/model/documentfragment~DocumentFragment}\n     * which is a common ancestor of the range's both ends (in which the entire range is contained).\n     *\n     * @returns {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment|null}\n     */\n  }, {\n    key: \"getCommonAncestor\",\n    value: function getCommonAncestor() {\n      return this.start.getCommonAncestor(this.end);\n    }\n\n    /**\n     * Converts `Range` to plain object and returns it.\n     *\n     * @returns {Object} `Node` converted to plain object.\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return {\n        start: this.start.toJSON(),\n        end: this.end.toJSON()\n      };\n    }\n\n    /**\n     * Returns a new range that is equal to current range.\n     *\n     * @returns {module:engine/model/range~Range}\n     */\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      return new this.constructor(this.start, this.end);\n    }\n\n    /**\n     * Returns a result of transforming a copy of this range by insert operation.\n     *\n     * One or more ranges may be returned as a result of this transformation.\n     *\n     * @protected\n     * @param {module:engine/model/operation/insertoperation~InsertOperation} operation\n     * @returns {Array.<module:engine/model/range~Range>}\n     */\n  }, {\n    key: \"_getTransformedByInsertOperation\",\n    value: function _getTransformedByInsertOperation(operation) {\n      var spread = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      return this._getTransformedByInsertion(operation.position, operation.howMany, spread);\n    }\n\n    /**\n     * Returns a result of transforming a copy of this range by move operation.\n     *\n     * One or more ranges may be returned as a result of this transformation.\n     *\n     * @protected\n     * @param {module:engine/model/operation/moveoperation~MoveOperation} operation\n     * @returns {Array.<module:engine/model/range~Range>}\n     */\n  }, {\n    key: \"_getTransformedByMoveOperation\",\n    value: function _getTransformedByMoveOperation(operation) {\n      var spread = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var sourcePosition = operation.sourcePosition;\n      var howMany = operation.howMany;\n      var targetPosition = operation.targetPosition;\n      return this._getTransformedByMove(sourcePosition, targetPosition, howMany, spread);\n    }\n\n    /**\n     * Returns a result of transforming a copy of this range by split operation.\n     *\n     * Always one range is returned. The transformation is done in a way to not break the range.\n     *\n     * @protected\n     * @param {module:engine/model/operation/splitoperation~SplitOperation} operation\n     * @returns {module:engine/model/range~Range}\n     */\n  }, {\n    key: \"_getTransformedBySplitOperation\",\n    value: function _getTransformedBySplitOperation(operation) {\n      var start = this.start._getTransformedBySplitOperation(operation);\n      var end = this.end._getTransformedBySplitOperation(operation);\n      if (this.end.isEqual(operation.insertionPosition)) {\n        end = this.end.getShiftedBy(1);\n      }\n\n      // Below may happen when range contains graveyard element used by split operation.\n      if (start.root != end.root) {\n        // End position was next to the moved graveyard element and was moved with it.\n        // Fix it by using old `end` which has proper `root`.\n        end = this.end.getShiftedBy(-1);\n      }\n      return new Range(start, end);\n    }\n\n    /**\n     * Returns a result of transforming a copy of this range by merge operation.\n     *\n     * Always one range is returned. The transformation is done in a way to not break the range.\n     *\n     * @protected\n     * @param {module:engine/model/operation/mergeoperation~MergeOperation} operation\n     * @returns {module:engine/model/range~Range}\n     */\n  }, {\n    key: \"_getTransformedByMergeOperation\",\n    value: function _getTransformedByMergeOperation(operation) {\n      // Special case when the marker is set on \"the closing tag\" of an element. Marker can be set like that during\n      // transformations, especially when a content of a few block elements were removed. For example:\n      //\n      // {} is the transformed range, [] is the removed range.\n      // <p>F[o{o</p><p>B}ar</p><p>Xy]z</p>\n      //\n      // <p>Fo{o</p><p>B}ar</p><p>z</p>\n      // <p>F{</p><p>B}ar</p><p>z</p>\n      // <p>F{</p>}<p>z</p>\n      // <p>F{}z</p>\n      //\n      if (this.start.isEqual(operation.targetPosition) && this.end.isEqual(operation.deletionPosition)) {\n        return new Range(this.start);\n      }\n      var start = this.start._getTransformedByMergeOperation(operation);\n      var end = this.end._getTransformedByMergeOperation(operation);\n      if (start.root != end.root) {\n        // This happens when the end position was next to the merged (deleted) element.\n        // Then, the end position was moved to the graveyard root. In this case we need to fix\n        // the range cause its boundaries would be in different roots.\n        end = this.end.getShiftedBy(-1);\n      }\n      if (start.isAfter(end)) {\n        // This happens in three following cases:\n        //\n        // Case 1: Merge operation source position is before the target position (due to some transformations, OT, etc.)\n        //         This means that start can be moved before the end of the range.\n        //\n        // Before: <p>a{a</p><p>b}b</p><p>cc</p>\n        // Merge:  <p>b}b</p><p>cca{a</p>\n        // Fix:    <p>{b}b</p><p>ccaa</p>\n        //\n        // Case 2: Range start is before merged node but not directly.\n        //         Result should include all nodes that were in the original range.\n        //\n        // Before: <p>aa</p>{<p>cc</p><p>b}b</p>\n        // Merge:  <p>aab}b</p>{<p>cc</p>\n        // Fix:    <p>aa{bb</p><p>cc</p>}\n        //\n        //         The range is expanded by an additional `b` letter but it is better than dropping the whole `cc` paragraph.\n        //\n        // Case 3: Range start is directly before merged node.\n        //         Resulting range should include only nodes from the merged element:\n        //\n        // Before: <p>aa</p>{<p>b}b</p><p>cc</p>\n        // Merge:  <p>aab}b</p>{<p>cc</p>\n        // Fix:    <p>aa{b}b</p><p>cc</p>\n        //\n\n        if (operation.sourcePosition.isBefore(operation.targetPosition)) {\n          // Case 1.\n          start = Position._createAt(end);\n          start.offset = 0;\n        } else {\n          if (!operation.deletionPosition.isEqual(start)) {\n            // Case 2.\n            end = operation.deletionPosition;\n          }\n\n          // In both case 2 and 3 start is at the end of the merge-to element.\n          start = operation.targetPosition;\n        }\n        return new Range(start, end);\n      }\n      return new Range(start, end);\n    }\n\n    /**\n     * Returns an array containing one or two {@link ~Range ranges} that are a result of transforming this\n     * {@link ~Range range} by inserting `howMany` nodes at `insertPosition`. Two {@link ~Range ranges} are\n     * returned if the insertion was inside this {@link ~Range range} and `spread` is set to `true`.\n     *\n     * Examples:\n     *\n     *\t\tlet range = model.createRange(\n     *\t\t\tmodel.createPositionFromPath( root, [ 2, 7 ] ),\n     *\t\t\tmodel.createPositionFromPath( root, [ 4, 0, 1 ] )\n     *\t\t);\n     *\t\tlet transformed = range._getTransformedByInsertion( model.createPositionFromPath( root, [ 1 ] ), 2 );\n     *\t\t// transformed array has one range from [ 4, 7 ] to [ 6, 0, 1 ]\n     *\n     *\t\ttransformed = range._getTransformedByInsertion( model.createPositionFromPath( root, [ 4, 0, 0 ] ), 4 );\n     *\t\t// transformed array has one range from [ 2, 7 ] to [ 4, 0, 5 ]\n     *\n     *\t\ttransformed = range._getTransformedByInsertion( model.createPositionFromPath( root, [ 3, 2 ] ), 4 );\n     *\t\t// transformed array has one range, which is equal to original range\n     *\n     *\t\ttransformed = range._getTransformedByInsertion( model.createPositionFromPath( root, [ 3, 2 ] ), 4, true );\n     *\t\t// transformed array has two ranges: from [ 2, 7 ] to [ 3, 2 ] and from [ 3, 6 ] to [ 4, 0, 1 ]\n     *\n     * @protected\n     * @param {module:engine/model/position~Position} insertPosition Position where nodes are inserted.\n     * @param {Number} howMany How many nodes are inserted.\n     * @param {Boolean} [spread] Flag indicating whether this {~Range range} should be spread if insertion\n     * was inside the range. Defaults to `false`.\n     * @returns {Array.<module:engine/model/range~Range>} Result of the transformation.\n     */\n  }, {\n    key: \"_getTransformedByInsertion\",\n    value: function _getTransformedByInsertion(insertPosition, howMany) {\n      var spread = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      if (spread && this.containsPosition(insertPosition)) {\n        // Range has to be spread. The first part is from original start to the spread point.\n        // The other part is from spread point to the original end, but transformed by\n        // insertion to reflect insertion changes.\n\n        return [new Range(this.start, insertPosition), new Range(insertPosition.getShiftedBy(howMany), this.end._getTransformedByInsertion(insertPosition, howMany))];\n      } else {\n        var range = new Range(this.start, this.end);\n        range.start = range.start._getTransformedByInsertion(insertPosition, howMany);\n        range.end = range.end._getTransformedByInsertion(insertPosition, howMany);\n        return [range];\n      }\n    }\n\n    /**\n     * Returns an array containing {@link ~Range ranges} that are a result of transforming this\n     * {@link ~Range range} by moving `howMany` nodes from `sourcePosition` to `targetPosition`.\n     *\n     * @protected\n     * @param {module:engine/model/position~Position} sourcePosition Position from which nodes are moved.\n     * @param {module:engine/model/position~Position} targetPosition Position to where nodes are moved.\n     * @param {Number} howMany How many nodes are moved.\n     * @param {Boolean} [spread=false] Whether the range should be spread if the move points inside the range.\n     * @returns {Array.<module:engine/model/range~Range>} Result of the transformation.\n     */\n  }, {\n    key: \"_getTransformedByMove\",\n    value: function _getTransformedByMove(sourcePosition, targetPosition, howMany) {\n      var spread = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n      // Special case for transforming a collapsed range. Just transform it like a position.\n      if (this.isCollapsed) {\n        var newPos = this.start._getTransformedByMove(sourcePosition, targetPosition, howMany);\n        return [new Range(newPos)];\n      }\n\n      // Special case for transformation when a part of the range is moved towards the range.\n      //\n      // Examples:\n      //\n      // <div><p>ab</p><p>c[d</p></div><p>e]f</p> --> <div><p>ab</p></div><p>c[d</p><p>e]f</p>\n      // <p>e[f</p><div><p>a]b</p><p>cd</p></div> --> <p>e[f</p><p>a]b</p><div><p>cd</p></div>\n      //\n      // Without this special condition, the default algorithm leaves an \"artifact\" range from one of `differenceSet` parts:\n      //\n      // <div><p>ab</p><p>c[d</p></div><p>e]f</p> --> <div><p>ab</p>{</div>}<p>c[d</p><p>e]f</p>\n      //\n      // This special case is applied only if the range is to be kept together (not spread).\n      var moveRange = Range._createFromPositionAndShift(sourcePosition, howMany);\n      var insertPosition = targetPosition._getTransformedByDeletion(sourcePosition, howMany);\n      if (this.containsPosition(targetPosition) && !spread) {\n        if (moveRange.containsPosition(this.start) || moveRange.containsPosition(this.end)) {\n          var start = this.start._getTransformedByMove(sourcePosition, targetPosition, howMany);\n          var end = this.end._getTransformedByMove(sourcePosition, targetPosition, howMany);\n          return [new Range(start, end)];\n        }\n      }\n\n      // Default algorithm.\n      var result;\n      var differenceSet = this.getDifference(moveRange);\n      var difference = null;\n      var common = this.getIntersection(moveRange);\n      if (differenceSet.length == 1) {\n        // `moveRange` and this range may intersect but may be separate.\n        difference = new Range(differenceSet[0].start._getTransformedByDeletion(sourcePosition, howMany), differenceSet[0].end._getTransformedByDeletion(sourcePosition, howMany));\n      } else if (differenceSet.length == 2) {\n        // `moveRange` is inside this range.\n        difference = new Range(this.start, this.end._getTransformedByDeletion(sourcePosition, howMany));\n      } // else, `moveRange` contains this range.\n\n      if (difference) {\n        result = difference._getTransformedByInsertion(insertPosition, howMany, common !== null || spread);\n      } else {\n        result = [];\n      }\n      if (common) {\n        var transformedCommon = new Range(common.start._getCombined(moveRange.start, insertPosition), common.end._getCombined(moveRange.start, insertPosition));\n        if (result.length == 2) {\n          result.splice(1, 0, transformedCommon);\n        } else {\n          result.push(transformedCommon);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Returns a copy of this range that is transformed by deletion of `howMany` nodes from `deletePosition`.\n     *\n     * If the deleted range is intersecting with the transformed range, the transformed range will be shrank.\n     *\n     * If the deleted range contains transformed range, `null` will be returned.\n     *\n     * @protected\n     * @param {module:engine/model/position~Position} deletionPosition Position from which nodes are removed.\n     * @param {Number} howMany How many nodes are removed.\n     * @returns {module:engine/model/range~Range|null} Result of the transformation.\n     */\n  }, {\n    key: \"_getTransformedByDeletion\",\n    value: function _getTransformedByDeletion(deletePosition, howMany) {\n      var newStart = this.start._getTransformedByDeletion(deletePosition, howMany);\n      var newEnd = this.end._getTransformedByDeletion(deletePosition, howMany);\n      if (newStart == null && newEnd == null) {\n        return null;\n      }\n      if (newStart == null) {\n        newStart = deletePosition;\n      }\n      if (newEnd == null) {\n        newEnd = deletePosition;\n      }\n      return new Range(newStart, newEnd);\n    }\n\n    /**\n     * Creates a new range, spreading from specified {@link module:engine/model/position~Position position} to a position moved by\n     * given `shift`. If `shift` is a negative value, shifted position is treated as the beginning of the range.\n     *\n     * @protected\n     * @param {module:engine/model/position~Position} position Beginning of the range.\n     * @param {Number} shift How long the range should be.\n     * @returns {module:engine/model/range~Range}\n     */\n  }], [{\n    key: \"_createFromPositionAndShift\",\n    value: function _createFromPositionAndShift(position, shift) {\n      var start = position;\n      var end = position.getShiftedBy(shift);\n      return shift > 0 ? new this(start, end) : new this(end, start);\n    }\n\n    /**\n     * Creates a range inside an {@link module:engine/model/element~Element element} which starts before the first child of\n     * that element and ends after the last child of that element.\n     *\n     * @protected\n     * @param {module:engine/model/element~Element} element Element which is a parent for the range.\n     * @returns {module:engine/model/range~Range}\n     */\n  }, {\n    key: \"_createIn\",\n    value: function _createIn(element) {\n      return new this(Position._createAt(element, 0), Position._createAt(element, element.maxOffset));\n    }\n\n    /**\n     * Creates a range that starts before given {@link module:engine/model/item~Item model item} and ends after it.\n     *\n     * @protected\n     * @param {module:engine/model/item~Item} item\n     * @returns {module:engine/model/range~Range}\n     */\n  }, {\n    key: \"_createOn\",\n    value: function _createOn(item) {\n      return this._createFromPositionAndShift(Position._createBefore(item), item.offsetSize);\n    }\n\n    /**\n     * Combines all ranges from the passed array into a one range. At least one range has to be passed.\n     * Passed ranges must not have common parts.\n     *\n     * The first range from the array is a reference range. If other ranges start or end on the exactly same position where\n     * the reference range, they get combined into one range.\n     *\n     *\t\t[  ][]  [    ][ ][             ][ ][]  [  ]  // Passed ranges, shown sorted\n     *\t\t[    ]                                       // The result of the function if the first range was a reference range.\n     *\t            [                           ]        // The result of the function if the third-to-seventh range was a reference range.\n     *\t                                           [  ]  // The result of the function if the last range was a reference range.\n     *\n     * @param {Array.<module:engine/model/range~Range>} ranges Ranges to combine.\n     * @returns {module:engine/model/range~Range} Combined range.\n     */\n  }, {\n    key: \"_createFromRanges\",\n    value: function _createFromRanges(ranges) {\n      if (ranges.length === 0) {\n        /**\n         * At least one range has to be passed to\n         * {@link module:engine/model/range~Range._createFromRanges `Range._createFromRanges()`}.\n         *\n         * @error range-create-from-ranges-empty-array\n         */\n        throw new CKEditorError('range-create-from-ranges-empty-array: At least one range has to be passed.', null);\n      } else if (ranges.length == 1) {\n        return ranges[0].clone();\n      }\n\n      // 1. Set the first range in `ranges` array as a reference range.\n      // If we are going to return just a one range, one of the ranges need to be the reference one.\n      // Other ranges will be stuck to that range, if possible.\n      var ref = ranges[0];\n\n      // 2. Sort all the ranges so it's easier to process them.\n      ranges.sort(function (a, b) {\n        return a.start.isAfter(b.start) ? 1 : -1;\n      });\n\n      // 3. Check at which index the reference range is now.\n      var refIndex = ranges.indexOf(ref);\n\n      // 4. At this moment we don't need the original range.\n      // We are going to modify the result and we need to return a new instance of Range.\n      // We have to create a copy of the reference range.\n      var result = new this(ref.start, ref.end);\n\n      // 5. Ranges should be checked and glued starting from the range that is closest to the reference range.\n      // Since ranges are sorted, start with the range with index that is closest to reference range index.\n      if (refIndex > 0) {\n        for (var i = refIndex - 1; true; i++) {\n          if (ranges[i].end.isEqual(result.start)) {\n            result.start = Position._createAt(ranges[i].start);\n          } else {\n            // If ranges are not starting/ending at the same position there is no point in looking further.\n            break;\n          }\n        }\n      }\n\n      // 6. Ranges should be checked and glued starting from the range that is closest to the reference range.\n      // Since ranges are sorted, start with the range with index that is closest to reference range index.\n      for (var _i2 = refIndex + 1; _i2 < ranges.length; _i2++) {\n        if (ranges[_i2].start.isEqual(result.end)) {\n          result.end = Position._createAt(ranges[_i2].end);\n        } else {\n          // If ranges are not starting/ending at the same position there is no point in looking further.\n          break;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a `Range` instance from given plain object (i.e. parsed JSON string).\n     *\n     * @param {Object} json Plain object to be converted to `Range`.\n     * @param {module:engine/model/document~Document} doc Document object that will be range owner.\n     * @returns {module:engine/model/element~Element} `Range` instance created using given plain object.\n     */\n  }, {\n    key: \"fromJSON\",\n    value: function fromJSON(json, doc) {\n      return new this(Position.fromJSON(json.start, doc), Position.fromJSON(json.end, doc));\n    }\n  }]);\n}();\nexport { Range as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/rootelement\n */\n\nimport Element from './element';\n\n/**\n * Type of {@link module:engine/model/element~Element} that is a root of a model tree.\n * @extends module:engine/model/element~Element\n */\nvar RootElement = /*#__PURE__*/function (_Element) {\n  /**\n   * Creates root element.\n   *\n   * @param {module:engine/model/document~Document} doc Document that is an owner of this root.\n   * @param {String} name Node name.\n   * @param {String} [rootName='main'] Unique root name used to identify this root\n   * element by {@link module:engine/model/document~Document}.\n   */\n  function RootElement(doc, name) {\n    var _this;\n    var rootName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'main';\n    _classCallCheck(this, RootElement);\n    _this = _callSuper(this, RootElement, [name]);\n\n    /**\n     * Document that is an owner of this root.\n     *\n     * @private\n     * @member {module:engine/model/document~Document}\n     */\n    _this._doc = doc;\n\n    /**\n     * Unique root name used to identify this root element by {@link module:engine/model/document~Document}.\n     *\n     * @readonly\n     * @member {String}\n     */\n    _this.rootName = rootName;\n    return _this;\n  }\n\n  /**\n   * {@link module:engine/model/document~Document Document} that owns this root element.\n   *\n   * In contrary, to {@link module:engine/model/node~Node node}, root element always have a `document`.\n   *\n   * @readonly\n   * @type {module:engine/model/document~Document|null}\n   */\n  _inherits(RootElement, _Element);\n  return _createClass(RootElement, [{\n    key: \"document\",\n    get: function get() {\n      return this._doc;\n    }\n\n    /**\n     * Checks whether this object is of the given.\n     *\n     *\t\trootElement.is( 'rootElement' ); // -> true\n     *\t\trootElement.is( 'element' ); // -> true\n     *\t\trootElement.is( 'node' ); // -> true\n     *\t\trootElement.is( 'model:rootElement' ); // -> true\n     *\t\trootElement.is( 'model:element' ); // -> true\n     *\t\trootElement.is( 'model:node' ); // -> true\n     *\n     *\t\trootElement.is( 'view:element' ); // -> false\n     *\t\trootElement.is( 'documentFragment' ); // -> false\n     *\n     * Assuming that the object being checked is an element, you can also check its\n     * {@link module:engine/model/element~Element#name name}:\n     *\n     *\t\trootElement.is( '$root' ); // -> true if this is a $root element\n     *\t\trootElement.is( 'rootElement', '$root' ); // -> same as above\n     *\t\ttext.is( '$root' ); -> false\n     *\n     * {@link module:engine/model/node~Node#is Check the entire list of model objects} which implement the `is()` method.\n     *\n     * @param {String} type Type to check when `name` parameter is present.\n     * Otherwise, it acts like the `name` parameter.\n     * @param {String} [name] Element name.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type, name) {\n      var cutType = type.replace('model:', '');\n      if (!name) {\n        return cutType == 'rootElement' || _superPropGet(RootElement, \"is\", this, 3)([type]);\n      } else {\n        return cutType == 'rootElement' && name == this.name || _superPropGet(RootElement, \"is\", this, 3)([type, name]);\n      }\n    }\n\n    /**\n     * Converts `RootElement` instance to `String` containing it's name.\n     *\n     * @returns {String} `RootElement` instance converted to `String`.\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return this.rootName;\n    }\n  }]);\n}(Element);\nexport { RootElement as default };","import _regeneratorValues from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regeneratorValues.js\";\nimport _regenerator from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regenerator.js\";\nimport _toConsumableArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\";\nimport _slicedToArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nvar _marked = /*#__PURE__*/_regenerator().m(combineWalkers),\n  _marked2 = /*#__PURE__*/_regenerator().m(convertToMinimalFlatRanges);\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.reduce.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.ends-with.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.starts-with.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/schema\n */\n\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport Range from './range';\nimport Position from './position';\nimport Element from './element';\nimport Text from './text';\nimport TreeWalker from './treewalker';\n\n/**\n * The model's schema. It defines allowed and disallowed structures of nodes as well as nodes' attributes.\n * The schema is usually defined by features and based on them the editing framework and features\n * make decisions how to change and process the model.\n *\n * The instance of schema is available in {@link module:engine/model/model~Model#schema `editor.model.schema`}.\n *\n * Read more about the schema in:\n *\n * * {@glink framework/guides/architecture/editing-engine#schema \"Schema\"} section of the\n * {@glink framework/guides/architecture/editing-engine Introduction to the \"Editing engine architecture\"}.\n * * {@glink framework/guides/deep-dive/schema \"Schema\" deep dive} guide.\n *\n * @mixes module:utils/observablemixin~ObservableMixin\n */\nvar Schema = /*#__PURE__*/function () {\n  /**\n   * Creates schema instance.\n   */\n  function Schema() {\n    var _this = this;\n    _classCallCheck(this, Schema);\n    this._sourceDefinitions = {};\n\n    /**\n     * A dictionary containing attribute properties.\n     *\n     * @private\n     * @member {Object.<String,String>}\n     */\n    this._attributeProperties = {};\n    this.decorate('checkChild');\n    this.decorate('checkAttribute');\n    this.on('checkAttribute', function (evt, args) {\n      args[0] = new SchemaContext(args[0]);\n    }, {\n      priority: 'highest'\n    });\n    this.on('checkChild', function (evt, args) {\n      args[0] = new SchemaContext(args[0]);\n      args[1] = _this.getDefinition(args[1]);\n    }, {\n      priority: 'highest'\n    });\n  }\n\n  /**\n   * Registers schema item. Can only be called once for every item name.\n   *\n   *\t\tschema.register( 'paragraph', {\n   *\t\t\tinheritAllFrom: '$block'\n   *\t\t} );\n   *\n   * @param {String} itemName\n   * @param {module:engine/model/schema~SchemaItemDefinition} definition\n   */\n  return _createClass(Schema, [{\n    key: \"register\",\n    value: function register(itemName, definition) {\n      if (this._sourceDefinitions[itemName]) {\n        /**\n         * A single item cannot be registered twice in the schema.\n         *\n         * This situation may happen when:\n         *\n         * * Two or more plugins called {@link #register `register()`} with the same name. This will usually mean that\n         * there is a collision between plugins which try to use the same element in the model. Unfortunately,\n         * the only way to solve this is by modifying one of these plugins to use a unique model element name.\n         * * A single plugin was loaded twice. This happens when it is installed by npm/yarn in two versions\n         * and usually means one or more of the following issues:\n         *     * a version mismatch (two of your dependencies require two different versions of this plugin),\n         *     * incorrect imports (this plugin is somehow imported twice in a way which confuses webpack),\n         *     * mess in `node_modules/` (`rm -rf node_modules/` may help).\n         *\n         * **Note:** Check the logged `itemName` to better understand which plugin was duplicated/conflicting.\n         *\n         * @param itemName The name of the model element that is being registered twice.\n         * @error schema-cannot-register-item-twice\n         */\n        throw new CKEditorError('schema-cannot-register-item-twice: A single item cannot be registered twice in the schema.', this, {\n          itemName: itemName\n        });\n      }\n      this._sourceDefinitions[itemName] = [Object.assign({}, definition)];\n      this._clearCache();\n    }\n\n    /**\n     * Extends a {@link #register registered} item's definition.\n     *\n     * Extending properties such as `allowIn` will add more items to the existing properties,\n     * while redefining properties such as `isBlock` will override the previously defined ones.\n     *\n     *\t\tschema.register( 'foo', {\n     *\t\t\tallowIn: '$root',\n     *\t\t\tisBlock: true;\n     *\t\t} );\n     *\t\tschema.extend( 'foo', {\n     *\t\t\tallowIn: 'blockQuote',\n     *\t\t\tisBlock: false\n     *\t\t} );\n     *\n     *\t\tschema.getDefinition( 'foo' );\n     *\t\t//\t{\n     *\t\t//\t\tallowIn: [ '$root', 'blockQuote' ],\n     *\t\t// \t\tisBlock: false\n     *\t\t//\t}\n     *\n     * @param {String} itemName\n     * @param {module:engine/model/schema~SchemaItemDefinition} definition\n     */\n  }, {\n    key: \"extend\",\n    value: function extend(itemName, definition) {\n      if (!this._sourceDefinitions[itemName]) {\n        /**\n         * Cannot extend an item which was not registered yet.\n         *\n         * This error happens when a plugin tries to extend the schema definition of an item which was not\n         * {@link #register registered} yet.\n         *\n         * @param itemName The name of the model element which is being extended.\n         * @error schema-cannot-extend-missing-item\n         */\n        throw new CKEditorError('schema-cannot-extend-missing-item: Cannot extend an item which was not registered yet.', this, {\n          itemName: itemName\n        });\n      }\n      this._sourceDefinitions[itemName].push(Object.assign({}, definition));\n      this._clearCache();\n    }\n\n    /**\n     * Returns all registered items.\n     *\n     * @returns {Object.<String,module:engine/model/schema~SchemaCompiledItemDefinition>}\n     */\n  }, {\n    key: \"getDefinitions\",\n    value: function getDefinitions() {\n      if (!this._compiledDefinitions) {\n        this._compile();\n      }\n      return this._compiledDefinitions;\n    }\n\n    /**\n     * Returns a definition of the given item or `undefined` if item is not registered.\n     *\n     * @param {module:engine/model/item~Item|module:engine/model/schema~SchemaContextItem|String} item\n     * @returns {module:engine/model/schema~SchemaCompiledItemDefinition}\n     */\n  }, {\n    key: \"getDefinition\",\n    value: function getDefinition(item) {\n      var itemName;\n      if (typeof item == 'string') {\n        itemName = item;\n      } else if (item.is && (item.is('text') || item.is('textProxy'))) {\n        itemName = '$text';\n      }\n      // Element or module:engine/model/schema~SchemaContextItem.\n      else {\n        itemName = item.name;\n      }\n      return this.getDefinitions()[itemName];\n    }\n\n    /**\n     * Returns `true` if the given item is registered in the schema.\n     *\n     *\t\tschema.isRegistered( 'paragraph' ); // -> true\n     *\t\tschema.isRegistered( editor.model.document.getRoot() ); // -> true\n     *\t\tschema.isRegistered( 'foo' ); // -> false\n     *\n     * @param {module:engine/model/item~Item|module:engine/model/schema~SchemaContextItem|String} item\n     */\n  }, {\n    key: \"isRegistered\",\n    value: function isRegistered(item) {\n      return !!this.getDefinition(item);\n    }\n\n    /**\n     * Returns `true` if the given item is defined to be\n     * a block by {@link module:engine/model/schema~SchemaItemDefinition}'s `isBlock` property.\n     *\n     *\t\tschema.isBlock( 'paragraph' ); // -> true\n     *\t\tschema.isBlock( '$root' ); // -> false\n     *\n     *\t\tconst paragraphElement = writer.createElement( 'paragraph' );\n     *\t\tschema.isBlock( paragraphElement ); // -> true\n     *\n     * @param {module:engine/model/item~Item|module:engine/model/schema~SchemaContextItem|String} item\n     */\n  }, {\n    key: \"isBlock\",\n    value: function isBlock(item) {\n      var def = this.getDefinition(item);\n      return !!(def && def.isBlock);\n    }\n\n    /**\n     * Returns `true` if the given item is defined to be\n     * a limit element by {@link module:engine/model/schema~SchemaItemDefinition}'s `isLimit` or `isObject` property\n     * (all objects are also limits).\n     *\n     *\t\tschema.isLimit( 'paragraph' ); // -> false\n     *\t\tschema.isLimit( '$root' ); // -> true\n     *\t\tschema.isLimit( editor.model.document.getRoot() ); // -> true\n     *\t\tschema.isLimit( 'image' ); // -> true\n     *\n     * @param {module:engine/model/item~Item|module:engine/model/schema~SchemaContextItem|String} item\n     */\n  }, {\n    key: \"isLimit\",\n    value: function isLimit(item) {\n      var def = this.getDefinition(item);\n      if (!def) {\n        return false;\n      }\n      return !!(def.isLimit || def.isObject);\n    }\n\n    /**\n     * Returns `true` if the given item is defined to be\n     * an object element by {@link module:engine/model/schema~SchemaItemDefinition}'s `isObject` property.\n     *\n     *\t\tschema.isObject( 'paragraph' ); // -> false\n     *\t\tschema.isObject( 'image' ); // -> true\n     *\n     *\t\tconst imageElement = writer.createElement( 'image' );\n     *\t\tschema.isObject( imageElement ); // -> true\n     *\n     * @param {module:engine/model/item~Item|module:engine/model/schema~SchemaContextItem|String} item\n     */\n  }, {\n    key: \"isObject\",\n    value: function isObject(item) {\n      var def = this.getDefinition(item);\n      return !!(def && def.isObject);\n    }\n\n    /**\n     * Returns `true` if the given item is defined to be\n     * an inline element by {@link module:engine/model/schema~SchemaItemDefinition}'s `isInline` property.\n     *\n     *\t\tschema.isInline( 'paragraph' ); // -> false\n     *\t\tschema.isInline( 'softBreak' ); // -> true\n     *\n     *\t\tconst text = writer.createText('foo' );\n     *\t\tschema.isInline( text ); // -> true\n     *\n     * @param {module:engine/model/item~Item|module:engine/model/schema~SchemaContextItem|String} item\n     */\n  }, {\n    key: \"isInline\",\n    value: function isInline(item) {\n      var def = this.getDefinition(item);\n      return !!(def && def.isInline);\n    }\n\n    /**\n     * Checks whether the given node (`child`) can be a child of the given context.\n     *\n     *\t\tschema.checkChild( model.document.getRoot(), paragraph ); // -> false\n     *\n     *\t\tschema.register( 'paragraph', {\n     *\t\t\tallowIn: '$root'\n     *\t\t} );\n     *\t\tschema.checkChild( model.document.getRoot(), paragraph ); // -> true\n     *\n     * Note: When verifying whether the given node can be a child of the given context, the\n     * schema also verifies the entire context &mdash; from its root to its last element. Therefore, it is possible\n     * for `checkChild()` to return `false` even though the context's last element can contain the checked child.\n     * It happens if one of the context's elements does not allow its child.\n     *\n     * @fires checkChild\n     * @param {module:engine/model/schema~SchemaContextDefinition} context The context in which the child will be checked.\n     * @param {module:engine/model/node~Node|String} def The child to check.\n     */\n  }, {\n    key: \"checkChild\",\n    value: function checkChild(context, def) {\n      // Note: context and child are already normalized here to a SchemaContext and SchemaCompiledItemDefinition.\n      if (!def) {\n        return false;\n      }\n      return this._checkContextMatch(def, context);\n    }\n\n    /**\n     * Checks whether the given attribute can be applied in the given context (on the last\n     * item of the context).\n     *\n     *\t\tschema.checkAttribute( textNode, 'bold' ); // -> false\n     *\n     *\t\tschema.extend( '$text', {\n     *\t\t\tallowAttributes: 'bold'\n     *\t\t} );\n     *\t\tschema.checkAttribute( textNode, 'bold' ); // -> true\n     *\n     * @fires checkAttribute\n     * @param {module:engine/model/schema~SchemaContextDefinition} context The context in which the attribute will be checked.\n     * @param {String} attributeName\n     */\n  }, {\n    key: \"checkAttribute\",\n    value: function checkAttribute(context, attributeName) {\n      var def = this.getDefinition(context.last);\n      if (!def) {\n        return false;\n      }\n      return def.allowAttributes.includes(attributeName);\n    }\n\n    /**\n     * Checks whether the given element (`elementToMerge`) can be merged with the specified base element (`positionOrBaseElement`).\n     *\n     * In other words &mdash; whether `elementToMerge`'s children {@link #checkChild are allowed} in the `positionOrBaseElement`.\n     *\n     * This check ensures that elements merged with {@link module:engine/model/writer~Writer#merge `Writer#merge()`}\n     * will be valid.\n     *\n     * Instead of elements, you can pass the instance of the {@link module:engine/model/position~Position} class as the\n     * `positionOrBaseElement`. It means that the elements before and after the position will be checked whether they can be merged.\n     *\n     * @param {module:engine/model/position~Position|module:engine/model/element~Element} positionOrBaseElement The position or base\n     * element to which the `elementToMerge` will be merged.\n     * @param {module:engine/model/element~Element} elementToMerge The element to merge. Required if `positionOrBaseElement` is an element.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"checkMerge\",\n    value: function checkMerge(positionOrBaseElement) {\n      var elementToMerge = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      if (positionOrBaseElement instanceof Position) {\n        var nodeBefore = positionOrBaseElement.nodeBefore;\n        var nodeAfter = positionOrBaseElement.nodeAfter;\n        if (!(nodeBefore instanceof Element)) {\n          /**\n           * The node before the merge position must be an element.\n           *\n           * @error schema-check-merge-no-element-before\n           */\n          throw new CKEditorError('schema-check-merge-no-element-before: The node before the merge position must be an element.', this);\n        }\n        if (!(nodeAfter instanceof Element)) {\n          /**\n           * The node after the merge position must be an element.\n           *\n           * @error schema-check-merge-no-element-after\n           */\n          throw new CKEditorError('schema-check-merge-no-element-after: The node after the merge position must be an element.', this);\n        }\n        return this.checkMerge(nodeBefore, nodeAfter);\n      }\n      var _iterator = _createForOfIteratorHelper(elementToMerge.getChildren()),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var child = _step.value;\n          if (!this.checkChild(positionOrBaseElement, child)) {\n            return false;\n          }\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      return true;\n    }\n\n    /**\n     * Allows registering a callback to the {@link #checkChild} method calls.\n     *\n     * Callbacks allow you to implement rules which are not otherwise possible to achieve\n     * by using the declarative API of {@link module:engine/model/schema~SchemaItemDefinition}.\n     * For example, by using this method you can disallow elements in specific contexts.\n     *\n     * This method is a shorthand for using the {@link #event:checkChild} event. For even better control,\n     * you can use that event instead.\n     *\n     * Example:\n     *\n     *\t\t// Disallow heading1 directly inside a blockQuote.\n     *\t\tschema.addChildCheck( ( context, childDefinition ) => {\n     *\t\t\tif ( context.endsWith( 'blockQuote' ) && childDefinition.name == 'heading1' ) {\n     *\t\t\t\treturn false;\n     *\t\t\t}\n     *\t\t} );\n     *\n     * Which translates to:\n     *\n     *\t\tschema.on( 'checkChild', ( evt, args ) => {\n     *\t\t\tconst context = args[ 0 ];\n     *\t\t\tconst childDefinition = args[ 1 ];\n     *\n     *\t\t\tif ( context.endsWith( 'blockQuote' ) && childDefinition && childDefinition.name == 'heading1' ) {\n     *\t\t\t\t// Prevent next listeners from being called.\n     *\t\t\t\tevt.stop();\n     *\t\t\t\t// Set the checkChild()'s return value.\n     *\t\t\t\tevt.return = false;\n     *\t\t\t}\n     *\t\t}, { priority: 'high' } );\n     *\n     * @param {Function} callback The callback to be called. It is called with two parameters:\n     * {@link module:engine/model/schema~SchemaContext} (context) instance and\n     * {@link module:engine/model/schema~SchemaCompiledItemDefinition} (child-to-check definition).\n     * The callback may return `true/false` to override `checkChild()`'s return value. If it does not return\n     * a boolean value, the default algorithm (or other callbacks) will define `checkChild()`'s return value.\n     */\n  }, {\n    key: \"addChildCheck\",\n    value: function addChildCheck(callback) {\n      this.on('checkChild', function (evt, _ref) {\n        var _ref2 = _slicedToArray(_ref, 2),\n          ctx = _ref2[0],\n          childDef = _ref2[1];\n        // checkChild() was called with a non-registered child.\n        // In 99% cases such check should return false, so not to overcomplicate all callbacks\n        // don't even execute them.\n        if (!childDef) {\n          return;\n        }\n        var retValue = callback(ctx, childDef);\n        if (typeof retValue == 'boolean') {\n          evt.stop();\n          evt.return = retValue;\n        }\n      }, {\n        priority: 'high'\n      });\n    }\n\n    /**\n     * Allows registering a callback to the {@link #checkAttribute} method calls.\n     *\n     * Callbacks allow you to implement rules which are not otherwise possible to achieve\n     * by using the declarative API of {@link module:engine/model/schema~SchemaItemDefinition}.\n     * For example, by using this method you can disallow attribute if node to which it is applied\n     * is contained within some other element (e.g. you want to disallow `bold` on `$text` within `heading1`).\n     *\n     * This method is a shorthand for using the {@link #event:checkAttribute} event. For even better control,\n     * you can use that event instead.\n     *\n     * Example:\n     *\n     *\t\t// Disallow bold on $text inside heading1.\n     *\t\tschema.addAttributeCheck( ( context, attributeName ) => {\n     *\t\t\tif ( context.endsWith( 'heading1 $text' ) && attributeName == 'bold' ) {\n     *\t\t\t\treturn false;\n     *\t\t\t}\n     *\t\t} );\n     *\n     * Which translates to:\n     *\n     *\t\tschema.on( 'checkAttribute', ( evt, args ) => {\n     *\t\t\tconst context = args[ 0 ];\n     *\t\t\tconst attributeName = args[ 1 ];\n     *\n     *\t\t\tif ( context.endsWith( 'heading1 $text' ) && attributeName == 'bold' ) {\n     *\t\t\t\t// Prevent next listeners from being called.\n     *\t\t\t\tevt.stop();\n     *\t\t\t\t// Set the checkAttribute()'s return value.\n     *\t\t\t\tevt.return = false;\n     *\t\t\t}\n     *\t\t}, { priority: 'high' } );\n     *\n     * @param {Function} callback The callback to be called. It is called with two parameters:\n     * {@link module:engine/model/schema~SchemaContext} (context) instance and attribute name.\n     * The callback may return `true/false` to override `checkAttribute()`'s return value. If it does not return\n     * a boolean value, the default algorithm (or other callbacks) will define `checkAttribute()`'s return value.\n     */\n  }, {\n    key: \"addAttributeCheck\",\n    value: function addAttributeCheck(callback) {\n      this.on('checkAttribute', function (evt, _ref3) {\n        var _ref4 = _slicedToArray(_ref3, 2),\n          ctx = _ref4[0],\n          attributeName = _ref4[1];\n        var retValue = callback(ctx, attributeName);\n        if (typeof retValue == 'boolean') {\n          evt.stop();\n          evt.return = retValue;\n        }\n      }, {\n        priority: 'high'\n      });\n    }\n\n    /**\n     * This method allows assigning additional metadata to the model attributes. For example,\n     * {@link module:engine/model/schema~AttributeProperties `AttributeProperties#isFormatting` property} is\n     * used to mark formatting attributes (like `bold` or `italic`).\n     *\n     *\t\t// Mark bold as a formatting attribute.\n     *\t\tschema.setAttributeProperties( 'bold', {\n     *\t\t\tisFormatting: true\n     *\t\t} );\n     *\n     *\t\t// Override code not to be considered a formatting markup.\n     *\t\tschema.setAttributeProperties( 'code', {\n     *\t\t\tisFormatting: false\n     *\t\t} );\n     *\n     * Properties are not limited to members defined in the\n     * {@link module:engine/model/schema~AttributeProperties `AttributeProperties` type} and you can also use custom properties:\n     *\n     *\t\tschema.setAttributeProperties( 'blockQuote', {\n     *\t\t\tcustomProperty: 'value'\n     *\t\t} );\n     *\n     * Subsequent calls with the same attribute will extend its custom properties:\n     *\n     *\t\tschema.setAttributeProperties( 'blockQuote', {\n     *\t\t\tone: 1\n     *\t\t} );\n     *\n     *\t\tschema.setAttributeProperties( 'blockQuote', {\n     *\t\t\ttwo: 2\n     *\t\t} );\n     *\n     *\t\tconsole.log( schema.getAttributeProperties( 'blockQuote' ) );\n     *\t\t// Logs: { one: 1, two: 2 }\n     *\n     * @param {String} attributeName A name of the attribute to receive the properties.\n     * @param {module:engine/model/schema~AttributeProperties} properties A dictionary of properties.\n     */\n  }, {\n    key: \"setAttributeProperties\",\n    value: function setAttributeProperties(attributeName, properties) {\n      this._attributeProperties[attributeName] = Object.assign(this.getAttributeProperties(attributeName), properties);\n    }\n\n    /**\n     * Returns properties associated with a given model attribute. See {@link #setAttributeProperties `setAttributeProperties()`}.\n     *\n     * @param {String} attributeName A name of the attribute.\n     * @returns {module:engine/model/schema~AttributeProperties}\n     */\n  }, {\n    key: \"getAttributeProperties\",\n    value: function getAttributeProperties(attributeName) {\n      return this._attributeProperties[attributeName] || {};\n    }\n\n    /**\n     * Returns the lowest {@link module:engine/model/schema~Schema#isLimit limit element} containing the entire\n     * selection/range/position or the root otherwise.\n     *\n     * @param {module:engine/model/selection~Selection|module:engine/model/documentselection~DocumentSelection|\n     * module:engine/model/range~Range|module:engine/model/position~Position} selectionOrRangeOrPosition\n     * The selection/range/position to check.\n     * @returns {module:engine/model/element~Element} The lowest limit element containing\n     * the entire `selectionOrRangeOrPosition`.\n     */\n  }, {\n    key: \"getLimitElement\",\n    value: function getLimitElement(selectionOrRangeOrPosition) {\n      var element;\n      if (selectionOrRangeOrPosition instanceof Position) {\n        element = selectionOrRangeOrPosition.parent;\n      } else {\n        var ranges = selectionOrRangeOrPosition instanceof Range ? [selectionOrRangeOrPosition] : Array.from(selectionOrRangeOrPosition.getRanges());\n\n        // Find the common ancestor for all selection's ranges.\n        element = ranges.reduce(function (element, range) {\n          var rangeCommonAncestor = range.getCommonAncestor();\n          if (!element) {\n            return rangeCommonAncestor;\n          }\n          return element.getCommonAncestor(rangeCommonAncestor, {\n            includeSelf: true\n          });\n        }, null);\n      }\n      while (!this.isLimit(element)) {\n        if (element.parent) {\n          element = element.parent;\n        } else {\n          break;\n        }\n      }\n      return element;\n    }\n\n    /**\n     * Checks whether the attribute is allowed in selection:\n     *\n     * * if the selection is not collapsed, then checks if the attribute is allowed on any of nodes in that range,\n     * * if the selection is collapsed, then checks if on the selection position there's a text with the\n     * specified attribute allowed.\n     *\n     * @param {module:engine/model/selection~Selection|module:engine/model/documentselection~DocumentSelection} selection\n     * Selection which will be checked.\n     * @param {String} attribute The name of the attribute to check.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"checkAttributeInSelection\",\n    value: function checkAttributeInSelection(selection, attribute) {\n      if (selection.isCollapsed) {\n        var firstPosition = selection.getFirstPosition();\n        var context = [].concat(_toConsumableArray(firstPosition.getAncestors()), [new Text('', selection.getAttributes())]);\n\n        // Check whether schema allows for a text with the attribute in the selection.\n        return this.checkAttribute(context, attribute);\n      } else {\n        var ranges = selection.getRanges();\n\n        // For all ranges, check nodes in them until you find a node that is allowed to have the attribute.\n        var _iterator2 = _createForOfIteratorHelper(ranges),\n          _step2;\n        try {\n          for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n            var range = _step2.value;\n            var _iterator3 = _createForOfIteratorHelper(range),\n              _step3;\n            try {\n              for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n                var value = _step3.value;\n                if (this.checkAttribute(value.item, attribute)) {\n                  // If we found a node that is allowed to have the attribute, return true.\n                  return true;\n                }\n              }\n            } catch (err) {\n              _iterator3.e(err);\n            } finally {\n              _iterator3.f();\n            }\n          }\n        } catch (err) {\n          _iterator2.e(err);\n        } finally {\n          _iterator2.f();\n        }\n      }\n\n      // If we haven't found such node, return false.\n      return false;\n    }\n\n    /**\n     * Transforms the given set of ranges into a set of ranges where the given attribute is allowed (and can be applied).\n     *\n     * @param {Array.<module:engine/model/range~Range>} ranges Ranges to be validated.\n     * @param {String} attribute The name of the attribute to check.\n     * @returns {Iterable.<module:engine/model/range~Range>} Ranges in which the attribute is allowed.\n     */\n  }, {\n    key: \"getValidRanges\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function getValidRanges(ranges, attribute) {\n      var _iterator4, _step4, range, _t;\n      return _regenerator().w(function (_context) {\n        while (1) switch (_context.p = _context.n) {\n          case 0:\n            ranges = convertToMinimalFlatRanges(ranges);\n            _iterator4 = _createForOfIteratorHelper(ranges);\n            _context.p = 1;\n            _iterator4.s();\n          case 2:\n            if ((_step4 = _iterator4.n()).done) {\n              _context.n = 4;\n              break;\n            }\n            range = _step4.value;\n            return _context.d(_regeneratorValues(this._getValidRangesForRange(range, attribute)), 3);\n          case 3:\n            _context.n = 2;\n            break;\n          case 4:\n            _context.n = 6;\n            break;\n          case 5:\n            _context.p = 5;\n            _t = _context.v;\n            _iterator4.e(_t);\n          case 6:\n            _context.p = 6;\n            _iterator4.f();\n            return _context.f(6);\n          case 7:\n            return _context.a(2);\n        }\n      }, getValidRanges, this, [[1, 5, 6, 7]]);\n    })\n    /**\n     * Basing on given `position`, finds and returns a {@link module:engine/model/range~Range range} which is\n     * nearest to that `position` and is a correct range for selection.\n     *\n     * The correct selection range might be collapsed when it is located in a position where the text node can be placed.\n     * Non-collapsed range is returned when selection can be placed around element marked as an \"object\" in\n     * the {@link module:engine/model/schema~Schema schema}.\n     *\n     * Direction of searching for the nearest correct selection range can be specified as:\n     *\n     * * `both` - searching will be performed in both ways,\n     * * `forward` - searching will be performed only forward,\n     * * `backward` - searching will be performed only backward.\n     *\n     * When valid selection range cannot be found, `null` is returned.\n     *\n     * @param {module:engine/model/position~Position} position Reference position where new selection range should be looked for.\n     * @param {'both'|'forward'|'backward'} [direction='both'] Search direction.\n     * @returns {module:engine/model/range~Range|null} Nearest selection range or `null` if one cannot be found.\n     */\n  }, {\n    key: \"getNearestSelectionRange\",\n    value: function getNearestSelectionRange(position) {\n      var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'both';\n      // Return collapsed range if provided position is valid.\n      if (this.checkChild(position, '$text')) {\n        return new Range(position);\n      }\n      var backwardWalker, forwardWalker;\n      if (direction == 'both' || direction == 'backward') {\n        backwardWalker = new TreeWalker({\n          startPosition: position,\n          direction: 'backward'\n        });\n      }\n      if (direction == 'both' || direction == 'forward') {\n        forwardWalker = new TreeWalker({\n          startPosition: position\n        });\n      }\n      var _iterator5 = _createForOfIteratorHelper(combineWalkers(backwardWalker, forwardWalker)),\n        _step5;\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var data = _step5.value;\n          var type = data.walker == backwardWalker ? 'elementEnd' : 'elementStart';\n          var value = data.value;\n          if (value.type == type && this.isObject(value.item)) {\n            return Range._createOn(value.item);\n          }\n          if (this.checkChild(value.nextPosition, '$text')) {\n            return new Range(value.nextPosition);\n          }\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n      return null;\n    }\n\n    /**\n     * Tries to find position ancestors that allows to insert given node.\n     * It starts searching from the given position and goes node by node to the top of the model tree\n     * as long as {@link module:engine/model/schema~Schema#isLimit limit element},\n     * {@link module:engine/model/schema~Schema#isObject object element} or top-most ancestor won't be reached.\n     *\n     * @params {module:engine/model/position~Position} position Position from searching will start.\n     * @params {module:engine/model/node~Node|String} node Node for which allowed parent should be found or its name.\n     * @returns {module:engine/model/element~Element|null} element Allowed parent or null if nothing was found.\n     */\n  }, {\n    key: \"findAllowedParent\",\n    value: function findAllowedParent(position, node) {\n      var parent = position.parent;\n      while (parent) {\n        if (this.checkChild(parent, node)) {\n          return parent;\n        }\n\n        // Do not split limit elements.\n        if (this.isLimit(parent)) {\n          return null;\n        }\n        parent = parent.parent;\n      }\n      return null;\n    }\n\n    /**\n     * Removes attributes disallowed by the schema.\n     *\n     * @param {Iterable.<module:engine/model/node~Node>} nodes Nodes that will be filtered.\n     * @param {module:engine/model/writer~Writer} writer\n     */\n  }, {\n    key: \"removeDisallowedAttributes\",\n    value: function removeDisallowedAttributes(nodes, writer) {\n      var _iterator6 = _createForOfIteratorHelper(nodes),\n        _step6;\n      try {\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n          var node = _step6.value;\n          // When node is a `Text` it has no children, so just filter it out.\n          if (node.is('text')) {\n            removeDisallowedAttributeFromNode(this, node, writer);\n          }\n          // In a case of `Element` iterates through positions between nodes inside this element\n          // and filter out node before the current position, or position parent when position\n          // is at start of an element. Using positions prevent from omitting merged nodes\n          // see https://github.com/ckeditor/ckeditor5-engine/issues/1789.\n          else {\n            var rangeInNode = Range._createIn(node);\n            var positionsInRange = rangeInNode.getPositions();\n            var _iterator7 = _createForOfIteratorHelper(positionsInRange),\n              _step7;\n            try {\n              for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n                var position = _step7.value;\n                var item = position.nodeBefore || position.parent;\n                removeDisallowedAttributeFromNode(this, item, writer);\n              }\n            } catch (err) {\n              _iterator7.e(err);\n            } finally {\n              _iterator7.f();\n            }\n          }\n        }\n      } catch (err) {\n        _iterator6.e(err);\n      } finally {\n        _iterator6.f();\n      }\n    }\n\n    /**\n     * Creates an instance of the schema context.\n     *\n     * @param {module:engine/model/schema~SchemaContextDefinition} context\n     * @returns {module:engine/model/schema~SchemaContext}\n     */\n  }, {\n    key: \"createContext\",\n    value: function createContext(context) {\n      return new SchemaContext(context);\n    }\n\n    /**\n     * @private\n     */\n  }, {\n    key: \"_clearCache\",\n    value: function _clearCache() {\n      this._compiledDefinitions = null;\n    }\n\n    /**\n     * @private\n     */\n  }, {\n    key: \"_compile\",\n    value: function _compile() {\n      var compiledDefinitions = {};\n      var sourceRules = this._sourceDefinitions;\n      var itemNames = Object.keys(sourceRules);\n      for (var _i = 0, _itemNames = itemNames; _i < _itemNames.length; _i++) {\n        var itemName = _itemNames[_i];\n        compiledDefinitions[itemName] = compileBaseItemRule(sourceRules[itemName], itemName);\n      }\n      for (var _i2 = 0, _itemNames2 = itemNames; _i2 < _itemNames2.length; _i2++) {\n        var _itemName = _itemNames2[_i2];\n        compileAllowContentOf(compiledDefinitions, _itemName);\n      }\n      for (var _i3 = 0, _itemNames3 = itemNames; _i3 < _itemNames3.length; _i3++) {\n        var _itemName2 = _itemNames3[_i3];\n        compileAllowWhere(compiledDefinitions, _itemName2);\n      }\n      for (var _i4 = 0, _itemNames4 = itemNames; _i4 < _itemNames4.length; _i4++) {\n        var _itemName3 = _itemNames4[_i4];\n        compileAllowAttributesOf(compiledDefinitions, _itemName3);\n        compileInheritPropertiesFrom(compiledDefinitions, _itemName3);\n      }\n      for (var _i5 = 0, _itemNames5 = itemNames; _i5 < _itemNames5.length; _i5++) {\n        var _itemName4 = _itemNames5[_i5];\n        cleanUpAllowIn(compiledDefinitions, _itemName4);\n        cleanUpAllowAttributes(compiledDefinitions, _itemName4);\n      }\n      this._compiledDefinitions = compiledDefinitions;\n    }\n\n    /**\n     * @private\n     * @param {module:engine/model/schema~SchemaCompiledItemDefinition} def\n     * @param {module:engine/model/schema~SchemaContext} context\n     * @param {Number} contextItemIndex\n     */\n  }, {\n    key: \"_checkContextMatch\",\n    value: function _checkContextMatch(def, context) {\n      var contextItemIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : context.length - 1;\n      var contextItem = context.getItem(contextItemIndex);\n      if (def.allowIn.includes(contextItem.name)) {\n        if (contextItemIndex == 0) {\n          return true;\n        } else {\n          var parentRule = this.getDefinition(contextItem);\n          return this._checkContextMatch(parentRule, context, contextItemIndex - 1);\n        }\n      } else {\n        return false;\n      }\n    }\n\n    /**\n     * Takes a flat range and an attribute name. Traverses the range recursively and deeply to find and return all ranges\n     * inside the given range on which the attribute can be applied.\n     *\n     * This is a helper function for {@link ~Schema#getValidRanges}.\n     *\n     * @private\n     * @param {module:engine/model/range~Range} range Range to process.\n     * @param {String} attribute The name of the attribute to check.\n     * @returns {Iterable.<module:engine/model/range~Range>} Ranges in which the attribute is allowed.\n     */\n  }, {\n    key: \"_getValidRangesForRange\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function _getValidRangesForRange(range, attribute) {\n      var start, end, _iterator8, _step8, item, _t2;\n      return _regenerator().w(function (_context2) {\n        while (1) switch (_context2.p = _context2.n) {\n          case 0:\n            start = range.start;\n            end = range.start;\n            _iterator8 = _createForOfIteratorHelper(range.getItems({\n              shallow: true\n            }));\n            _context2.p = 1;\n            _iterator8.s();\n          case 2:\n            if ((_step8 = _iterator8.n()).done) {\n              _context2.n = 7;\n              break;\n            }\n            item = _step8.value;\n            if (!item.is('element')) {\n              _context2.n = 3;\n              break;\n            }\n            return _context2.d(_regeneratorValues(this._getValidRangesForRange(Range._createIn(item), attribute)), 3);\n          case 3:\n            if (this.checkAttribute(item, attribute)) {\n              _context2.n = 5;\n              break;\n            }\n            if (start.isEqual(end)) {\n              _context2.n = 4;\n              break;\n            }\n            _context2.n = 4;\n            return new Range(start, end);\n          case 4:\n            start = Position._createAfter(item);\n          case 5:\n            end = Position._createAfter(item);\n          case 6:\n            _context2.n = 2;\n            break;\n          case 7:\n            _context2.n = 9;\n            break;\n          case 8:\n            _context2.p = 8;\n            _t2 = _context2.v;\n            _iterator8.e(_t2);\n          case 9:\n            _context2.p = 9;\n            _iterator8.f();\n            return _context2.f(9);\n          case 10:\n            if (start.isEqual(end)) {\n              _context2.n = 11;\n              break;\n            }\n            _context2.n = 11;\n            return new Range(start, end);\n          case 11:\n            return _context2.a(2);\n        }\n      }, _getValidRangesForRange, this, [[1, 8, 9, 10]]);\n    })\n  }]);\n}();\nexport { Schema as default };\nmix(Schema, ObservableMixin);\n\n/**\n * Event fired when the {@link #checkChild} method is called. It allows plugging in\n * additional behavior – e.g. implementing rules which cannot be defined using the declarative\n * {@link module:engine/model/schema~SchemaItemDefinition} interface.\n *\n * **Note:** The {@link #addChildCheck} method is a more handy way to register callbacks. Internally,\n * it registers a listener to this event but comes with a simpler API and it is the recommended choice\n * in most of the cases.\n *\n * The {@link #checkChild} method fires an event because it is\n * {@link module:utils/observablemixin~ObservableMixin#decorate decorated} with it. Thanks to that you can\n * use this event in a various way, but the most important use case is overriding standard behaviour of the\n * `checkChild()` method. Let's see a typical listener template:\n *\n *\t\tschema.on( 'checkChild', ( evt, args ) => {\n *\t\t\tconst context = args[ 0 ];\n *\t\t\tconst childDefinition = args[ 1 ];\n *\t\t}, { priority: 'high' } );\n *\n * The listener is added with a `high` priority to be executed before the default method is really called. The `args` callback\n * parameter contains arguments passed to `checkChild( context, child )`. However, the `context` parameter is already\n * normalized to a {@link module:engine/model/schema~SchemaContext} instance and `child` to a\n * {@link module:engine/model/schema~SchemaCompiledItemDefinition} instance, so you don't have to worry about\n * the various ways how `context` and `child` may be passed to `checkChild()`.\n *\n * **Note:** `childDefinition` may be `undefined` if `checkChild()` was called with a non-registered element.\n *\n * So, in order to implement a rule \"disallow `heading1` in `blockQuote`\" you can add such a listener:\n *\n *\t\tschema.on( 'checkChild', ( evt, args ) => {\n *\t\t\tconst context = args[ 0 ];\n *\t\t\tconst childDefinition = args[ 1 ];\n *\n *\t\t\tif ( context.endsWith( 'blockQuote' ) && childDefinition && childDefinition.name == 'heading1' ) {\n *\t\t\t\t// Prevent next listeners from being called.\n *\t\t\t\tevt.stop();\n *\t\t\t\t// Set the checkChild()'s return value.\n *\t\t\t\tevt.return = false;\n *\t\t\t}\n *\t\t}, { priority: 'high' } );\n *\n * Allowing elements in specific contexts will be a far less common use case, because it's normally handled by\n * `allowIn` rule from {@link module:engine/model/schema~SchemaItemDefinition} but if you have a complex scenario\n * where `listItem` should be allowed only in element `foo` which must be in element `bar`, then this would be the way:\n *\n *\t\tschema.on( 'checkChild', ( evt, args ) => {\n *\t\t\tconst context = args[ 0 ];\n *\t\t\tconst childDefinition = args[ 1 ];\n *\n *\t\t\tif ( context.endsWith( 'bar foo' ) && childDefinition.name == 'listItem' ) {\n *\t\t\t\t// Prevent next listeners from being called.\n *\t\t\t\tevt.stop();\n *\t\t\t\t// Set the checkChild()'s return value.\n *\t\t\t\tevt.return = true;\n *\t\t\t}\n *\t\t}, { priority: 'high' } );\n *\n * @event checkChild\n * @param {Array} args The `checkChild()`'s arguments.\n */\n\n/**\n * Event fired when the {@link #checkAttribute} method is called. It allows plugging in\n * additional behavior – e.g. implementing rules which cannot be defined using the declarative\n * {@link module:engine/model/schema~SchemaItemDefinition} interface.\n *\n * **Note:** The {@link #addAttributeCheck} method is a more handy way to register callbacks. Internally,\n * it registers a listener to this event but comes with a simpler API and it is the recommended choice\n * in most of the cases.\n *\n * The {@link #checkAttribute} method fires an event because it's\n * {@link module:utils/observablemixin~ObservableMixin#decorate decorated} with it. Thanks to that you can\n * use this event in a various way, but the most important use case is overriding standard behaviour of the\n * `checkAttribute()` method. Let's see a typical listener template:\n *\n *\t\tschema.on( 'checkAttribute', ( evt, args ) => {\n *\t\t\tconst context = args[ 0 ];\n *\t\t\tconst attributeName = args[ 1 ];\n *\t\t}, { priority: 'high' } );\n *\n * The listener is added with a `high` priority to be executed before the default method is really called. The `args` callback\n * parameter contains arguments passed to `checkAttribute( context, attributeName )`. However, the `context` parameter is already\n * normalized to a {@link module:engine/model/schema~SchemaContext} instance, so you don't have to worry about\n * the various ways how `context` may be passed to `checkAttribute()`.\n *\n * So, in order to implement a rule \"disallow `bold` in a text which is in a `heading1` you can add such a listener:\n *\n *\t\tschema.on( 'checkAttribute', ( evt, args ) => {\n *\t\t\tconst context = args[ 0 ];\n *\t\t\tconst atributeName = args[ 1 ];\n *\n *\t\t\tif ( context.endsWith( 'heading1 $text' ) && attributeName == 'bold' ) {\n *\t\t\t\t// Prevent next listeners from being called.\n *\t\t\t\tevt.stop();\n *\t\t\t\t// Set the checkAttribute()'s return value.\n *\t\t\t\tevt.return = false;\n *\t\t\t}\n *\t\t}, { priority: 'high' } );\n *\n * Allowing attributes in specific contexts will be a far less common use case, because it's normally handled by\n * `allowAttributes` rule from {@link module:engine/model/schema~SchemaItemDefinition} but if you have a complex scenario\n * where `bold` should be allowed only in element `foo` which must be in element `bar`, then this would be the way:\n *\n *\t\tschema.on( 'checkAttribute', ( evt, args ) => {\n *\t\t\tconst context = args[ 0 ];\n *\t\t\tconst atributeName = args[ 1 ];\n *\n *\t\t\tif ( context.endsWith( 'bar foo $text' ) && attributeName == 'bold' ) {\n *\t\t\t\t// Prevent next listeners from being called.\n *\t\t\t\tevt.stop();\n *\t\t\t\t// Set the checkAttribute()'s return value.\n *\t\t\t\tevt.return = true;\n *\t\t\t}\n *\t\t}, { priority: 'high' } );\n *\n * @event checkAttribute\n * @param {Array} args The `checkAttribute()`'s arguments.\n */\n\n/**\n * A definition of a {@link module:engine/model/schema~Schema schema} item.\n *\n * You can define the following rules:\n *\n * * `allowIn` &ndash; A string or an array of strings. Defines in which other items this item will be allowed.\n * * `allowAttributes` &ndash; A string or an array of strings. Defines allowed attributes of the given item.\n * * `allowContentOf` &ndash; A string or an array of strings. Inherits \"allowed children\" from other items.\n * * `allowWhere` &ndash; A string or an array of strings. Inherits \"allowed in\" from other items.\n * * `allowAttributesOf` &ndash; A string or an array of strings. Inherits attributes from other items.\n * * `inheritTypesFrom` &ndash; A string or an array of strings. Inherits `is*` properties of other items.\n * * `inheritAllFrom` &ndash; A string. A shorthand for `allowContentOf`, `allowWhere`, `allowAttributesOf`, `inheritTypesFrom`.\n * * Additionally, you can define the following `is*` properties: `isBlock`, `isLimit`, `isObject`, `isInline`. Read about them below.\n *\n * # The is* properties\n *\n * There are 3 commonly used `is*` properties. Their role is to assign additional semantics to schema items.\n * You can define more properties but you will also need to implement support for them in the existing editor features.\n *\n * * `isBlock` &ndash; Whether this item is paragraph-like. Generally speaking, content is usually made out of blocks\n * like paragraphs, list items, images, headings, etc. All these elements are marked as blocks. A block\n * should not allow another block inside. Note: There is also the `$block` generic item which has `isBlock` set to `true`.\n * Most block type items will inherit from `$block` (through `inheritAllFrom`).\n * * `isLimit` &ndash; It can be understood as whether this element should not be split by <kbd>Enter</kbd>.\n * Examples of limit elements: `$root`, table cell, image caption, etc. In other words, all actions that happen inside\n * a limit element are limited to its content. **Note:** All objects (`isObject`) are treated as limit elements, too.\n * * `isObject` &ndash; Whether an item is \"self-contained\" and should be treated as a whole. Examples of object elements:\n * `image`, `table`, `video`, etc. **Note:** An object is also a limit, so\n * {@link module:engine/model/schema~Schema#isLimit `isLimit()`} returns `true` for object elements automatically.\n * * `isInline` &ndash; Whether an item is \"text-like\" and should be treated as an inline node. Examples of inline elements:\n * `$text`, `softBreak` (`<br>`), etc.\n *\n * # Generic items\n *\n * There are three basic generic items: `$root`, `$block` and `$text`.\n * They are defined as follows:\n *\n *\t\tthis.schema.register( '$root', {\n *\t\t\tisLimit: true\n *\t\t} );\n *\t\tthis.schema.register( '$block', {\n *\t\t\tallowIn: '$root',\n *\t\t\tisBlock: true\n *\t\t} );\n *\t\tthis.schema.register( '$text', {\n *\t\t\tallowIn: '$block',\n *\t\t\tisInline: true\n *\t\t} );\n *\n * They reflect typical editor content that is contained within one root, consists of several blocks\n * (paragraphs, lists items, headings, images) which, in turn, may contain text inside.\n *\n * By inheriting from the generic items you can define new items which will get extended by other editor features.\n * Read more about generic types in the {@glink framework/guides/deep-dive/schema Defining schema} guide.\n *\n * # Example definitions\n *\n * Allow `paragraph` in roots and block quotes:\n *\n *\t\tschema.register( 'paragraph', {\n *\t\t\tallowIn: [ '$root', 'blockQuote' ],\n *\t\t\tisBlock: true\n *\t\t} );\n *\n * Allow `paragraph` everywhere where `$block` is allowed (i.e. in `$root`):\n *\n *\t\tschema.register( 'paragraph', {\n *\t\t\tallowWhere: '$block',\n *\t\t\tisBlock: true\n *\t\t} );\n *\n * Make `image` a block object, which is allowed everywhere where `$block` is.\n * Also, allow `src` and `alt` attributes in it:\n *\n *\t\tschema.register( 'image', {\n *\t\t\tallowWhere: '$block',\n *\t\t\tallowAttributes: [ 'src', 'alt' ],\n *\t\t\tisBlock: true,\n *\t\t\tisObject: true\n *\t\t} );\n *\n * Make `caption` allowed in `image` and make it allow all the content of `$block`s (usually, `$text`).\n * Also, mark it as a limit element so it cannot be split:\n *\n *\t\tschema.register( 'caption', {\n *\t\t\tallowIn: 'image',\n *\t\t\tallowContentOf: '$block',\n *\t\t\tisLimit: true\n *\t\t} );\n *\n * Make `listItem` inherit all from `$block` but also allow additional attributes:\n *\n *\t\tschema.register( 'listItem', {\n *\t\t\tinheritAllFrom: '$block',\n *\t\t\tallowAttributes: [ 'listType', 'listIndent' ]\n *\t\t} );\n *\n * Which translates to:\n *\n *\t\tschema.register( 'listItem', {\n *\t\t\tallowWhere: '$block',\n *\t\t\tallowContentOf: '$block',\n *\t\t\tallowAttributesOf: '$block',\n *\t\t\tinheritTypesFrom: '$block',\n *\t\t\tallowAttributes: [ 'listType', 'listIndent' ]\n *\t\t} );\n *\n * # Tips\n *\n * * Check schema definitions of existing features to see how they are defined.\n * * If you want to publish your feature so other developers can use it, try to use\n * generic items as much as possible.\n * * Keep your model clean. Limit it to the actual data and store information in a normalized way.\n * * Remember about definining the `is*` properties. They do not affect the allowed structures, but they can\n * affect how the editor features treat your elements.\n *\n * @typedef {Object} module:engine/model/schema~SchemaItemDefinition\n */\n\n/**\n * A simplified version of {@link module:engine/model/schema~SchemaItemDefinition} after\n * compilation by the {@link module:engine/model/schema~Schema schema}.\n * Rules fed to the schema by {@link module:engine/model/schema~Schema#register}\n * and {@link module:engine/model/schema~Schema#extend} methods are defined in the\n * {@link module:engine/model/schema~SchemaItemDefinition} format.\n * Later on, they are compiled to `SchemaCompiledItemDefition` so when you use e.g.\n * the {@link module:engine/model/schema~Schema#getDefinition} method you get the compiled version.\n *\n * The compiled version contains only the following properties:\n *\n * * The `name` property,\n * * The `is*` properties,\n * * The `allowIn` array,\n * * The `allowAttributes` array.\n *\n * @typedef {Object} module:engine/model/schema~SchemaCompiledItemDefinition\n */\n\n/**\n * A schema context &mdash; a list of ancestors of a given position in the document.\n *\n * Considering such position:\n *\n *\t\t<$root>\n *\t\t\t<blockQuote>\n *\t\t\t\t<paragraph>\n *\t\t\t\t\t^\n *\t\t\t\t</paragraph>\n *\t\t\t</blockQuote>\n *\t\t</$root>\n *\n * The context of this position is its {@link module:engine/model/position~Position#getAncestors lists of ancestors}:\n *\n *\t\t[ rootElement, blockQuoteElement, paragraphElement ]\n *\n * Contexts are used in the {@link module:engine/model/schema~Schema#event:checkChild `Schema#checkChild`} and\n * {@link module:engine/model/schema~Schema#event:checkAttribute `Schema#checkAttribute`} events as a definition\n * of a place in the document where the check occurs. The context instances are created based on the first arguments\n * of the {@link module:engine/model/schema~Schema#checkChild `Schema#checkChild()`} and\n * {@link module:engine/model/schema~Schema#checkAttribute `Schema#checkAttribute()`} methods so when\n * using these methods you need to use {@link module:engine/model/schema~SchemaContextDefinition}s.\n */\nexport var SchemaContext = /*#__PURE__*/function () {\n  /**\n   * Creates an instance of the context.\n   *\n   * @param {module:engine/model/schema~SchemaContextDefinition} context\n   */\n  function SchemaContext(context) {\n    _classCallCheck(this, SchemaContext);\n    if (context instanceof SchemaContext) {\n      return context;\n    }\n    if (typeof context == 'string') {\n      context = [context];\n    } else if (!Array.isArray(context)) {\n      // `context` is item or position.\n      // Position#getAncestors() doesn't accept any parameters but it works just fine here.\n      context = context.getAncestors({\n        includeSelf: true\n      });\n    }\n    if (context[0] && typeof context[0] != 'string' && context[0].is('documentFragment')) {\n      context.shift();\n    }\n    this._items = context.map(mapContextItem);\n  }\n\n  /**\n   * The number of items.\n   *\n   * @type {Number}\n   */\n  return _createClass(SchemaContext, [{\n    key: \"length\",\n    get: function get() {\n      return this._items.length;\n    }\n\n    /**\n     * The last item (the lowest node).\n     *\n     * @type {module:engine/model/schema~SchemaContextItem}\n     */\n  }, {\n    key: \"last\",\n    get: function get() {\n      return this._items[this._items.length - 1];\n    }\n\n    /**\n     * Iterable interface.\n     *\n     * Iterates over all context items.\n     *\n     * @returns {Iterable.<module:engine/model/schema~SchemaContextItem>}\n     */\n  }, {\n    key: Symbol.iterator,\n    value: function value() {\n      return this._items[Symbol.iterator]();\n    }\n\n    /**\n     * Returns a new schema context instance with an additional item.\n     *\n     * Item can be added as:\n     *\n     * \t\tconst context = new SchemaContext( [ '$root' ] );\n     *\n     * \t\t// An element.\n     * \t\tconst fooElement = writer.createElement( 'fooElement' );\n     * \t\tconst newContext = context.push( fooElement ); // [ '$root', 'fooElement' ]\n     *\n     * \t\t// A text node.\n     * \t\tconst text = writer.createText( 'foobar' );\n     * \t\tconst newContext = context.push( text ); // [ '$root', '$text' ]\n     *\n     * \t\t// A string (element name).\n     * \t\tconst newContext = context.push( 'barElement' ); // [ '$root', 'barElement' ]\n     *\n     * **Note** {@link module:engine/model/node~Node} that is already in the model tree will be added as the only item\n     * (without ancestors).\n     *\n     * @param {String|module:engine/model/node~Node|Array<String|module:engine/model/node~Node>} item An item that will be added\n     * to the current context.\n     * @returns {module:engine/model/schema~SchemaContext} A new schema context instance with an additional item.\n     */\n  }, {\n    key: \"push\",\n    value: function push(item) {\n      var ctx = new SchemaContext([item]);\n      ctx._items = [].concat(_toConsumableArray(this._items), _toConsumableArray(ctx._items));\n      return ctx;\n    }\n\n    /**\n     * Gets an item on the given index.\n     *\n     * @returns {module:engine/model/schema~SchemaContextItem}\n     */\n  }, {\n    key: \"getItem\",\n    value: function getItem(index) {\n      return this._items[index];\n    }\n\n    /**\n     * Returns the names of items.\n     *\n     * @returns {Iterable.<String>}\n     */\n  }, {\n    key: \"getNames\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function getNames() {\n      return _regenerator().w(function (_context3) {\n        while (1) switch (_context3.n) {\n          case 0:\n            return _context3.d(_regeneratorValues(this._items.map(function (item) {\n              return item.name;\n            })), 1);\n          case 1:\n            return _context3.a(2);\n        }\n      }, getNames, this);\n    })\n    /**\n     * Checks whether the context ends with the given nodes.\n     *\n     *\t\tconst ctx = new SchemaContext( [ rootElement, paragraphElement, textNode ] );\n     *\n     *\t\tctx.endsWith( '$text' ); // -> true\n     *\t\tctx.endsWith( 'paragraph $text' ); // -> true\n     *\t\tctx.endsWith( '$root' ); // -> false\n     *\t\tctx.endsWith( 'paragraph' ); // -> false\n     *\n     * @param {String} query\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"endsWith\",\n    value: function endsWith(query) {\n      return Array.from(this.getNames()).join(' ').endsWith(query);\n    }\n  }]);\n}();\n\n/**\n * The definition of a {@link module:engine/model/schema~SchemaContext schema context}.\n *\n * Contexts can be created in multiple ways:\n *\n * * By defining a **node** – in this cases this node and all its ancestors will be used.\n * * By defining a **position** in the document – in this case all its ancestors will be used.\n * * By defining an **array of nodes** – in this case this array defines the entire context.\n * * By defining a **name of node** - in this case node will be \"mocked\". It is not recommended because context\n * will be unrealistic (e.g. attributes of these nodes are not specified). However, at times this may be the only\n * way to define the context (e.g. when checking some hypothetical situation).\n * * By defining an **array of node names** (potentially, mixed with real nodes) – The same as **name of node**\n * but it is possible to create a path.\n * * By defining a {@link module:engine/model/schema~SchemaContext} instance - in this case the same instance as provided\n * will be return.\n *\n * Examples of context definitions passed to the {@link module:engine/model/schema~Schema#checkChild `Schema#checkChild()`}\n * method:\n *\n *\t\t// Assuming that we have a $root > blockQuote > paragraph structure, the following code\n *\t\t// will check node 'foo' in the following context:\n *\t\t// [ rootElement, blockQuoteElement, paragraphElement ]\n *\t\tconst contextDefinition = paragraphElement;\n * \t\tconst childToCheck = 'foo';\n *\t\tschema.checkChild( contextDefinition, childToCheck );\n *\n *\t\t// Also check in [ rootElement, blockQuoteElement, paragraphElement ].\n *\t\tschema.checkChild( model.createPositionAt( paragraphElement, 0 ), 'foo' );\n *\n *\t\t// Check in [ rootElement, paragraphElement ].\n *\t\tschema.checkChild( [ rootElement, paragraphElement ], 'foo' );\n *\n *\t\t// Check only fakeParagraphElement.\n *\t\tschema.checkChild( 'paragraph', 'foo' );\n *\n *\t\t// Check in [ fakeRootElement, fakeBarElement, paragraphElement ].\n *\t\tschema.checkChild( [ '$root', 'bar', paragraphElement ], 'foo' );\n *\n * All these `checkChild()` calls will fire {@link module:engine/model/schema~Schema#event:checkChild `Schema#checkChild`}\n * events in which `args[ 0 ]` is an instance of the context. Therefore, you can write a listener like this:\n *\n *\t\tschema.on( 'checkChild', ( evt, args ) => {\n *\t\t\tconst ctx = args[ 0 ];\n *\n *\t\t\tconsole.log( Array.from( ctx.getNames() ) );\n *\t\t} );\n *\n * Which will log the following:\n *\n *\t\t[ '$root', 'blockQuote', 'paragraph' ]\n *\t\t[ '$root', 'paragraph' ]\n *\t\t[ '$root', 'bar', 'paragraph' ]\n *\n * Note: When using the {@link module:engine/model/schema~Schema#checkAttribute `Schema#checkAttribute()`} method\n * you may want to check whether a text node may have an attribute. A {@link module:engine/model/text~Text} is a\n * correct way to define a context so you can do this:\n *\n *\t\tschema.checkAttribute( textNode, 'bold' );\n *\n * But sometimes you want to check whether a text at a given position might've had some attribute,\n * in which case you can create a context by mising an array of elements with a `'$text'` string:\n *\n *\t\t// Check in [ rootElement, paragraphElement, textNode ].\n *\t\tschema.checkChild( [ ...positionInParagraph.getAncestors(), '$text' ], 'bold' );\n *\n * @typedef {module:engine/model/node~Node|module:engine/model/position~Position|module:engine/model/schema~SchemaContext|\n * String|Array.<String|module:engine/model/node~Node>} module:engine/model/schema~SchemaContextDefinition\n */\n\n/**\n * An item of the {@link module:engine/model/schema~SchemaContext schema context}.\n *\n * It contains 3 properties:\n *\n * * `name` – the name of this item,\n * * `* getAttributeKeys()` – a generator of keys of item attributes,\n * * `getAttribute( keyName )` – a method to get attribute values.\n *\n * The context item interface is a highly simplified version of {@link module:engine/model/node~Node} and its role\n * is to expose only the information which schema checks are able to provide (which is the name of the node and\n * node's attributes).\n *\n *\t\tschema.on( 'checkChild', ( evt, args ) => {\n *\t\t\tconst ctx = args[ 0 ];\n *\t\t\tconst firstItem = ctx.getItem( 0 );\n *\n *\t\t\tconsole.log( firstItem.name ); // -> '$root'\n *\t\t\tconsole.log( firstItem.getAttribute( 'foo' ) ); // -> 'bar'\n *\t\t\tconsole.log( Array.from( firstItem.getAttributeKeys() ) ); // -> [ 'foo', 'faa' ]\n *\t\t} );\n *\n * @typedef {Object} module:engine/model/schema~SchemaContextItem\n */\n\n/**\n * A structure containing additional metadata describing the attribute.\n *\n * See {@link module:engine/model/schema~Schema#setAttributeProperties `Schema#setAttributeProperties()`} for usage examples.\n *\n * @typedef {Object} module:engine/model/schema~AttributeProperties\n * @property {Boolean} [isFormatting] Indicates that the attribute should be considered as a visual formatting, like `bold`, `italic` or\n * `fontSize` rather than semantic attribute (such as `src`, `listType`, etc.). For example, it is used by the \"Remove format\" feature.\n * @property {Boolean} [copyOnEnter] Indicates that given text attribute should be copied to the next block when enter is pressed.\n */\n\nfunction compileBaseItemRule(sourceItemRules, itemName) {\n  var itemRule = {\n    name: itemName,\n    allowIn: [],\n    allowContentOf: [],\n    allowWhere: [],\n    allowAttributes: [],\n    allowAttributesOf: [],\n    inheritTypesFrom: []\n  };\n  copyTypes(sourceItemRules, itemRule);\n  copyProperty(sourceItemRules, itemRule, 'allowIn');\n  copyProperty(sourceItemRules, itemRule, 'allowContentOf');\n  copyProperty(sourceItemRules, itemRule, 'allowWhere');\n  copyProperty(sourceItemRules, itemRule, 'allowAttributes');\n  copyProperty(sourceItemRules, itemRule, 'allowAttributesOf');\n  copyProperty(sourceItemRules, itemRule, 'inheritTypesFrom');\n  makeInheritAllWork(sourceItemRules, itemRule);\n  return itemRule;\n}\nfunction compileAllowContentOf(compiledDefinitions, itemName) {\n  var _iterator9 = _createForOfIteratorHelper(compiledDefinitions[itemName].allowContentOf),\n    _step9;\n  try {\n    for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n      var allowContentOfItemName = _step9.value;\n      // The allowContentOf property may point to an unregistered element.\n      if (compiledDefinitions[allowContentOfItemName]) {\n        var allowedChildren = getAllowedChildren(compiledDefinitions, allowContentOfItemName);\n        allowedChildren.forEach(function (allowedItem) {\n          allowedItem.allowIn.push(itemName);\n        });\n      }\n    }\n  } catch (err) {\n    _iterator9.e(err);\n  } finally {\n    _iterator9.f();\n  }\n  delete compiledDefinitions[itemName].allowContentOf;\n}\nfunction compileAllowWhere(compiledDefinitions, itemName) {\n  var _iterator0 = _createForOfIteratorHelper(compiledDefinitions[itemName].allowWhere),\n    _step0;\n  try {\n    for (_iterator0.s(); !(_step0 = _iterator0.n()).done;) {\n      var allowWhereItemName = _step0.value;\n      var inheritFrom = compiledDefinitions[allowWhereItemName];\n\n      // The allowWhere property may point to an unregistered element.\n      if (inheritFrom) {\n        var _compiledDefinitions$;\n        var allowedIn = inheritFrom.allowIn;\n        (_compiledDefinitions$ = compiledDefinitions[itemName].allowIn).push.apply(_compiledDefinitions$, _toConsumableArray(allowedIn));\n      }\n    }\n  } catch (err) {\n    _iterator0.e(err);\n  } finally {\n    _iterator0.f();\n  }\n  delete compiledDefinitions[itemName].allowWhere;\n}\nfunction compileAllowAttributesOf(compiledDefinitions, itemName) {\n  var _iterator1 = _createForOfIteratorHelper(compiledDefinitions[itemName].allowAttributesOf),\n    _step1;\n  try {\n    for (_iterator1.s(); !(_step1 = _iterator1.n()).done;) {\n      var allowAttributeOfItem = _step1.value;\n      var inheritFrom = compiledDefinitions[allowAttributeOfItem];\n      if (inheritFrom) {\n        var _compiledDefinitions$2;\n        var inheritAttributes = inheritFrom.allowAttributes;\n        (_compiledDefinitions$2 = compiledDefinitions[itemName].allowAttributes).push.apply(_compiledDefinitions$2, _toConsumableArray(inheritAttributes));\n      }\n    }\n  } catch (err) {\n    _iterator1.e(err);\n  } finally {\n    _iterator1.f();\n  }\n  delete compiledDefinitions[itemName].allowAttributesOf;\n}\nfunction compileInheritPropertiesFrom(compiledDefinitions, itemName) {\n  var item = compiledDefinitions[itemName];\n  var _iterator10 = _createForOfIteratorHelper(item.inheritTypesFrom),\n    _step10;\n  try {\n    for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n      var inheritPropertiesOfItem = _step10.value;\n      var inheritFrom = compiledDefinitions[inheritPropertiesOfItem];\n      if (inheritFrom) {\n        var typeNames = Object.keys(inheritFrom).filter(function (name) {\n          return name.startsWith('is');\n        });\n        var _iterator11 = _createForOfIteratorHelper(typeNames),\n          _step11;\n        try {\n          for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n            var name = _step11.value;\n            if (!(name in item)) {\n              item[name] = inheritFrom[name];\n            }\n          }\n        } catch (err) {\n          _iterator11.e(err);\n        } finally {\n          _iterator11.f();\n        }\n      }\n    }\n  } catch (err) {\n    _iterator10.e(err);\n  } finally {\n    _iterator10.f();\n  }\n  delete item.inheritTypesFrom;\n}\n\n// Remove items which weren't registered (because it may break some checks or we'd need to complicate them).\n// Make sure allowIn doesn't contain repeated values.\nfunction cleanUpAllowIn(compiledDefinitions, itemName) {\n  var itemRule = compiledDefinitions[itemName];\n  var existingItems = itemRule.allowIn.filter(function (itemToCheck) {\n    return compiledDefinitions[itemToCheck];\n  });\n  itemRule.allowIn = Array.from(new Set(existingItems));\n}\nfunction cleanUpAllowAttributes(compiledDefinitions, itemName) {\n  var itemRule = compiledDefinitions[itemName];\n  itemRule.allowAttributes = Array.from(new Set(itemRule.allowAttributes));\n}\nfunction copyTypes(sourceItemRules, itemRule) {\n  var _iterator12 = _createForOfIteratorHelper(sourceItemRules),\n    _step12;\n  try {\n    for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n      var sourceItemRule = _step12.value;\n      var typeNames = Object.keys(sourceItemRule).filter(function (name) {\n        return name.startsWith('is');\n      });\n      var _iterator13 = _createForOfIteratorHelper(typeNames),\n        _step13;\n      try {\n        for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n          var name = _step13.value;\n          itemRule[name] = sourceItemRule[name];\n        }\n      } catch (err) {\n        _iterator13.e(err);\n      } finally {\n        _iterator13.f();\n      }\n    }\n  } catch (err) {\n    _iterator12.e(err);\n  } finally {\n    _iterator12.f();\n  }\n}\nfunction copyProperty(sourceItemRules, itemRule, propertyName) {\n  var _iterator14 = _createForOfIteratorHelper(sourceItemRules),\n    _step14;\n  try {\n    for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n      var sourceItemRule = _step14.value;\n      if (typeof sourceItemRule[propertyName] == 'string') {\n        itemRule[propertyName].push(sourceItemRule[propertyName]);\n      } else if (Array.isArray(sourceItemRule[propertyName])) {\n        var _itemRule$propertyNam;\n        (_itemRule$propertyNam = itemRule[propertyName]).push.apply(_itemRule$propertyNam, _toConsumableArray(sourceItemRule[propertyName]));\n      }\n    }\n  } catch (err) {\n    _iterator14.e(err);\n  } finally {\n    _iterator14.f();\n  }\n}\nfunction makeInheritAllWork(sourceItemRules, itemRule) {\n  var _iterator15 = _createForOfIteratorHelper(sourceItemRules),\n    _step15;\n  try {\n    for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n      var sourceItemRule = _step15.value;\n      var inheritFrom = sourceItemRule.inheritAllFrom;\n      if (inheritFrom) {\n        itemRule.allowContentOf.push(inheritFrom);\n        itemRule.allowWhere.push(inheritFrom);\n        itemRule.allowAttributesOf.push(inheritFrom);\n        itemRule.inheritTypesFrom.push(inheritFrom);\n      }\n    }\n  } catch (err) {\n    _iterator15.e(err);\n  } finally {\n    _iterator15.f();\n  }\n}\nfunction getAllowedChildren(compiledDefinitions, itemName) {\n  var itemRule = compiledDefinitions[itemName];\n  return getValues(compiledDefinitions).filter(function (def) {\n    return def.allowIn.includes(itemRule.name);\n  });\n}\nfunction getValues(obj) {\n  return Object.keys(obj).map(function (key) {\n    return obj[key];\n  });\n}\nfunction mapContextItem(ctxItem) {\n  if (typeof ctxItem == 'string') {\n    return {\n      name: ctxItem,\n      getAttributeKeys: /*#__PURE__*/_regenerator().m(function getAttributeKeys() {\n        return _regenerator().w(function (_context4) {\n          while (1) switch (_context4.n) {\n            case 0:\n              return _context4.a(2);\n          }\n        }, getAttributeKeys);\n      }),\n      getAttribute: function getAttribute() {}\n    };\n  } else {\n    return {\n      // '$text' means text nodes and text proxies.\n      name: ctxItem.is('element') ? ctxItem.name : '$text',\n      getAttributeKeys: /*#__PURE__*/_regenerator().m(function getAttributeKeys() {\n        return _regenerator().w(function (_context5) {\n          while (1) switch (_context5.n) {\n            case 0:\n              return _context5.d(_regeneratorValues(ctxItem.getAttributeKeys()), 1);\n            case 1:\n              return _context5.a(2);\n          }\n        }, getAttributeKeys);\n      }),\n      getAttribute: function getAttribute(key) {\n        return ctxItem.getAttribute(key);\n      }\n    };\n  }\n}\n\n// Generator function returning values from provided walkers, switching between them at each iteration. If only one walker\n// is provided it will return data only from that walker.\n//\n// @param {module:engine/module/treewalker~TreeWalker} [backward] Walker iterating in backward direction.\n// @param {module:engine/module/treewalker~TreeWalker} [forward] Walker iterating in forward direction.\n// @returns {Iterable.<Object>} Object returned at each iteration contains `value` and `walker` (informing which walker returned\n// given value) fields.\nfunction combineWalkers(backward, forward) {\n  var done, step, _step16;\n  return _regenerator().w(function (_context6) {\n    while (1) switch (_context6.n) {\n      case 0:\n        done = false;\n      case 1:\n        if (done) {\n          _context6.n = 4;\n          break;\n        }\n        done = true;\n        if (!backward) {\n          _context6.n = 2;\n          break;\n        }\n        step = backward.next();\n        if (step.done) {\n          _context6.n = 2;\n          break;\n        }\n        done = false;\n        _context6.n = 2;\n        return {\n          walker: backward,\n          value: step.value\n        };\n      case 2:\n        if (!forward) {\n          _context6.n = 3;\n          break;\n        }\n        _step16 = forward.next();\n        if (_step16.done) {\n          _context6.n = 3;\n          break;\n        }\n        done = false;\n        _context6.n = 3;\n        return {\n          walker: forward,\n          value: _step16.value\n        };\n      case 3:\n        _context6.n = 1;\n        break;\n      case 4:\n        return _context6.a(2);\n    }\n  }, _marked);\n}\n\n// Takes an array of non-intersecting ranges. For each of them gets minimal flat ranges covering that range and returns\n// all those minimal flat ranges.\n//\n// @param {Array.<module:engine/model/range~Range>} ranges Ranges to process.\n// @returns {Iterable.<module:engine/model/range~Range>} Minimal flat ranges of given `ranges`.\nfunction convertToMinimalFlatRanges(ranges) {\n  var _iterator16, _step17, range, _t3;\n  return _regenerator().w(function (_context7) {\n    while (1) switch (_context7.p = _context7.n) {\n      case 0:\n        _iterator16 = _createForOfIteratorHelper(ranges);\n        _context7.p = 1;\n        _iterator16.s();\n      case 2:\n        if ((_step17 = _iterator16.n()).done) {\n          _context7.n = 4;\n          break;\n        }\n        range = _step17.value;\n        return _context7.d(_regeneratorValues(range.getMinimalFlatRanges()), 3);\n      case 3:\n        _context7.n = 2;\n        break;\n      case 4:\n        _context7.n = 6;\n        break;\n      case 5:\n        _context7.p = 5;\n        _t3 = _context7.v;\n        _iterator16.e(_t3);\n      case 6:\n        _context7.p = 6;\n        _iterator16.f();\n        return _context7.f(6);\n      case 7:\n        return _context7.a(2);\n    }\n  }, _marked2, null, [[1, 5, 6, 7]]);\n}\nfunction removeDisallowedAttributeFromNode(schema, node, writer) {\n  var _iterator17 = _createForOfIteratorHelper(node.getAttributeKeys()),\n    _step18;\n  try {\n    for (_iterator17.s(); !(_step18 = _iterator17.n()).done;) {\n      var attribute = _step18.value;\n      if (!schema.checkAttribute(node, attribute)) {\n        writer.removeAttribute(attribute, node);\n      }\n    }\n  } catch (err) {\n    _iterator17.e(err);\n  } finally {\n    _iterator17.f();\n  }\n}","import _regenerator from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regenerator.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.find.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.every.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.anchor.js\";\nimport \"core-js/modules/es.weak-set.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/selection\n */\n\nimport Position from './position';\nimport Element from './element';\nimport Node from './node';\nimport Range from './range';\nimport EmitterMixin from '@ckeditor/ckeditor5-utils/src/emittermixin';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport isIterable from '@ckeditor/ckeditor5-utils/src/isiterable';\n\n/**\n * Selection is a set of {@link module:engine/model/range~Range ranges}. It has a direction specified by its\n * {@link module:engine/model/selection~Selection#anchor anchor} and {@link module:engine/model/selection~Selection#focus focus}\n * (it can be {@link module:engine/model/selection~Selection#isBackward forward or backward}).\n * Additionally, selection may have its own attributes (think – whether text typed in in this selection\n * should have those attributes – e.g. whether you type a bolded text).\n *\n * @mixes module:utils/emittermixin~EmitterMixin\n */\nvar Selection = /*#__PURE__*/function () {\n  /**\n   * Creates a new selection instance based on the given {@link module:engine/model/selection~Selectable selectable}\n   * or creates an empty selection if no arguments were passed.\n   *\n   *\t\t// Creates empty selection without ranges.\n   *\t\tconst selection = writer.createSelection();\n   *\n   *\t\t// Creates selection at the given range.\n   *\t\tconst range = writer.createRange( start, end );\n   *\t\tconst selection = writer.createSelection( range );\n   *\n   *\t\t// Creates selection at the given ranges\n   *\t\tconst ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ];\n   *\t\tconst selection = writer.createSelection( ranges );\n   *\n   *\t\t// Creates selection from the other selection.\n   *\t\t// Note: It doesn't copies selection attributes.\n   *\t\tconst otherSelection = writer.createSelection();\n   *\t\tconst selection = writer.createSelection( otherSelection );\n   *\n   *\t\t// Creates selection from the given document selection.\n   *\t\t// Note: It doesn't copies selection attributes.\n   *\t\tconst documentSelection = model.document.selection;\n   *\t\tconst selection = writer.createSelection( documentSelection );\n   *\n   *\t\t// Creates selection at the given position.\n   *\t\tconst position = writer.createPositionFromPath( root, path );\n   *\t\tconst selection = writer.createSelection( position );\n   *\n   *\t\t// Creates selection at the given offset in the given element.\n   *\t\tconst paragraph = writer.createElement( 'paragraph' );\n   *\t\tconst selection = writer.createSelection( paragraph, offset );\n   *\n   *\t\t// Creates a range inside an {@link module:engine/model/element~Element element} which starts before the\n   *\t\t// first child of that element and ends after the last child of that element.\n   *\t\tconst selection = writer.createSelection( paragraph, 'in' );\n   *\n   *\t\t// Creates a range on an {@link module:engine/model/item~Item item} which starts before the item and ends\n   *\t\t// just after the item.\n   *\t\tconst selection = writer.createSelection( paragraph, 'on' );\n   *\n   * Selection's constructor allow passing additional options (`'backward'`) as the last argument.\n   *\n   *\t\t// Creates backward selection.\n   *\t\tconst selection = writer.createSelection( range, { backward: true } );\n   *\n   * @param {module:engine/model/selection~Selectable} selectable\n   * @param {Number|'before'|'end'|'after'|'on'|'in'} [placeOrOffset] Sets place or offset of the selection.\n   * @param {Object} [options]\n   * @param {Boolean} [options.backward] Sets this selection instance to be backward.\n   */\n  function Selection(selectable, placeOrOffset, options) {\n    _classCallCheck(this, Selection);\n    /**\n     * Specifies whether the last added range was added as a backward or forward range.\n     *\n     * @private\n     * @type {Boolean}\n     */\n    this._lastRangeBackward = false;\n\n    /**\n     * Stores selection ranges.\n     *\n     * @protected\n     * @type {Array.<module:engine/model/range~Range>}\n     */\n    this._ranges = [];\n\n    /**\n     * List of attributes set on current selection.\n     *\n     * @protected\n     * @type {Map.<String,*>}\n     */\n    this._attrs = new Map();\n    if (selectable) {\n      this.setTo(selectable, placeOrOffset, options);\n    }\n  }\n\n  /**\n   * Selection anchor. Anchor is the position from which the selection was started. If a user is making a selection\n   * by dragging the mouse, the anchor is where the user pressed the mouse button (the beggining of the selection).\n   *\n   * Anchor and {@link #focus} define the direction of the selection, which is important\n   * when expanding/shrinking selection. The focus moves, while the anchor should remain in the same place.\n   *\n   * Anchor is always set to the {@link module:engine/model/range~Range#start start} or\n   * {@link module:engine/model/range~Range#end end} position of the last of selection's ranges. Whether it is\n   * the `start` or `end` depends on the specified `options.backward`. See the {@link #setTo `setTo()`} method.\n   *\n   * May be set to `null` if there are no ranges in the selection.\n   *\n   * @see #focus\n   * @readonly\n   * @type {module:engine/model/position~Position|null}\n   */\n  return _createClass(Selection, [{\n    key: \"anchor\",\n    get: function get() {\n      if (this._ranges.length > 0) {\n        var range = this._ranges[this._ranges.length - 1];\n        return this._lastRangeBackward ? range.end : range.start;\n      }\n      return null;\n    }\n\n    /**\n     * Selection focus. Focus is the position where the selection ends. If a user is making a selection\n     * by dragging the mouse, the focus is where the mouse cursor is.\n     *\n     * May be set to `null` if there are no ranges in the selection.\n     *\n     * @see #anchor\n     * @readonly\n     * @type {module:engine/model/position~Position|null}\n     */\n  }, {\n    key: \"focus\",\n    get: function get() {\n      if (this._ranges.length > 0) {\n        var range = this._ranges[this._ranges.length - 1];\n        return this._lastRangeBackward ? range.start : range.end;\n      }\n      return null;\n    }\n\n    /**\n     * Whether the selection is collapsed. Selection is collapsed when there is exactly one range in it\n     * and it is collapsed.\n     *\n     * @readonly\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isCollapsed\",\n    get: function get() {\n      var length = this._ranges.length;\n      if (length === 1) {\n        return this._ranges[0].isCollapsed;\n      } else {\n        return false;\n      }\n    }\n\n    /**\n     * Returns the number of ranges in the selection.\n     *\n     * @readonly\n     * @type {Number}\n     */\n  }, {\n    key: \"rangeCount\",\n    get: function get() {\n      return this._ranges.length;\n    }\n\n    /**\n     * Specifies whether the selection's {@link #focus} precedes the selection's {@link #anchor}.\n     *\n     * @readonly\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isBackward\",\n    get: function get() {\n      return !this.isCollapsed && this._lastRangeBackward;\n    }\n\n    /**\n     * Checks whether this selection is equal to the given selection. Selections are equal if they have the same directions,\n     * the same number of ranges and all ranges from one selection equal to ranges from the another selection.\n     *\n     * @param {module:engine/model/selection~Selection|module:engine/model/documentselection~DocumentSelection} otherSelection\n     * Selection to compare with.\n     * @returns {Boolean} `true` if selections are equal, `false` otherwise.\n     */\n  }, {\n    key: \"isEqual\",\n    value: function isEqual(otherSelection) {\n      if (this.rangeCount != otherSelection.rangeCount) {\n        return false;\n      } else if (this.rangeCount === 0) {\n        return true;\n      }\n      if (!this.anchor.isEqual(otherSelection.anchor) || !this.focus.isEqual(otherSelection.focus)) {\n        return false;\n      }\n      var _iterator = _createForOfIteratorHelper(this._ranges),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var thisRange = _step.value;\n          var found = false;\n          var _iterator2 = _createForOfIteratorHelper(otherSelection._ranges),\n            _step2;\n          try {\n            for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n              var otherRange = _step2.value;\n              if (thisRange.isEqual(otherRange)) {\n                found = true;\n                break;\n              }\n            }\n          } catch (err) {\n            _iterator2.e(err);\n          } finally {\n            _iterator2.f();\n          }\n          if (!found) {\n            return false;\n          }\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      return true;\n    }\n\n    /**\n     * Returns an iterable object that iterates over copies of selection ranges.\n     *\n     * @returns {Iterable.<module:engine/model/range~Range>}\n     */\n  }, {\n    key: \"getRanges\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function getRanges() {\n      var _iterator3, _step3, range, _t;\n      return _regenerator().w(function (_context) {\n        while (1) switch (_context.p = _context.n) {\n          case 0:\n            _iterator3 = _createForOfIteratorHelper(this._ranges);\n            _context.p = 1;\n            _iterator3.s();\n          case 2:\n            if ((_step3 = _iterator3.n()).done) {\n              _context.n = 4;\n              break;\n            }\n            range = _step3.value;\n            _context.n = 3;\n            return new Range(range.start, range.end);\n          case 3:\n            _context.n = 2;\n            break;\n          case 4:\n            _context.n = 6;\n            break;\n          case 5:\n            _context.p = 5;\n            _t = _context.v;\n            _iterator3.e(_t);\n          case 6:\n            _context.p = 6;\n            _iterator3.f();\n            return _context.f(6);\n          case 7:\n            return _context.a(2);\n        }\n      }, getRanges, this, [[1, 5, 6, 7]]);\n    })\n    /**\n     * Returns a copy of the first range in the selection.\n     * First range is the one which {@link module:engine/model/range~Range#start start} position\n     * {@link module:engine/model/position~Position#isBefore is before} start position of all other ranges\n     * (not to confuse with the first range added to the selection).\n     *\n     * Returns `null` if there are no ranges in selection.\n     *\n     * @returns {module:engine/model/range~Range|null}\n     */\n  }, {\n    key: \"getFirstRange\",\n    value: function getFirstRange() {\n      var first = null;\n      var _iterator4 = _createForOfIteratorHelper(this._ranges),\n        _step4;\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var range = _step4.value;\n          if (!first || range.start.isBefore(first.start)) {\n            first = range;\n          }\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n      return first ? new Range(first.start, first.end) : null;\n    }\n\n    /**\n     * Returns a copy of the last range in the selection.\n     * Last range is the one which {@link module:engine/model/range~Range#end end} position\n     * {@link module:engine/model/position~Position#isAfter is after} end position of all other ranges (not to confuse with the range most\n     * recently added to the selection).\n     *\n     * Returns `null` if there are no ranges in selection.\n     *\n     * @returns {module:engine/model/range~Range|null}\n     */\n  }, {\n    key: \"getLastRange\",\n    value: function getLastRange() {\n      var last = null;\n      var _iterator5 = _createForOfIteratorHelper(this._ranges),\n        _step5;\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var range = _step5.value;\n          if (!last || range.end.isAfter(last.end)) {\n            last = range;\n          }\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n      return last ? new Range(last.start, last.end) : null;\n    }\n\n    /**\n     * Returns the first position in the selection.\n     * First position is the position that {@link module:engine/model/position~Position#isBefore is before}\n     * any other position in the selection.\n     *\n     * Returns `null` if there are no ranges in selection.\n     *\n     * @returns {module:engine/model/position~Position|null}\n     */\n  }, {\n    key: \"getFirstPosition\",\n    value: function getFirstPosition() {\n      var first = this.getFirstRange();\n      return first ? first.start.clone() : null;\n    }\n\n    /**\n     * Returns the last position in the selection.\n     * Last position is the position that {@link module:engine/model/position~Position#isAfter is after}\n     * any other position in the selection.\n     *\n     * Returns `null` if there are no ranges in selection.\n     *\n     * @returns {module:engine/model/position~Position|null}\n     */\n  }, {\n    key: \"getLastPosition\",\n    value: function getLastPosition() {\n      var lastRange = this.getLastRange();\n      return lastRange ? lastRange.end.clone() : null;\n    }\n\n    /**\n     * Sets this selection's ranges and direction to the specified location based on the given\n     * {@link module:engine/model/selection~Selectable selectable}.\n     *\n     *\t\t// Removes all selection's ranges.\n     *\t\tselection.setTo( null );\n     *\n     *\t\t// Sets selection to the given range.\n     *\t\tconst range = writer.createRange( start, end );\n     *\t\tselection.setTo( range );\n     *\n     *\t\t// Sets selection to given ranges.\n     *\t\tconst ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ];\n     *\t\tselection.setTo( ranges );\n     *\n     *\t\t// Sets selection to other selection.\n     *\t\t// Note: It doesn't copies selection attributes.\n     *\t\tconst otherSelection = writer.createSelection();\n     *\t\tselection.setTo( otherSelection );\n     *\n     *\t\t// Sets selection to the given document selection.\n     *\t\t// Note: It doesn't copies selection attributes.\n     *\t\tconst documentSelection = new DocumentSelection( doc );\n     *\t\tselection.setTo( documentSelection );\n     *\n     *\t\t// Sets collapsed selection at the given position.\n     *\t\tconst position = writer.createPositionFromPath( root, path );\n     *\t\tselection.setTo( position );\n     *\n     *\t\t// Sets collapsed selection at the position of the given node and an offset.\n     *\t\tselection.setTo( paragraph, offset );\n     *\n     * Creates a range inside an {@link module:engine/model/element~Element element} which starts before the first child of\n    \t * that element and ends after the last child of that element.\n     *\n     *\t\tselection.setTo( paragraph, 'in' );\n     *\n     * Creates a range on an {@link module:engine/model/item~Item item} which starts before the item and ends just after the item.\n     *\n     *\t\tselection.setTo( paragraph, 'on' );\n     *\n     * `Selection#setTo()`' method allow passing additional options (`backward`) as the last argument.\n     *\n     *\t\t// Sets backward selection.\n     *\t\tconst selection = writer.createSelection( range, { backward: true } );\n     *\n     * @param {module:engine/model/selection~Selectable} selectable\n     * @param {Number|'before'|'end'|'after'|'on'|'in'} [placeOrOffset] Sets place or offset of the selection.\n     * @param {Object} [options]\n     * @param {Boolean} [options.backward] Sets this selection instance to be backward.\n     */\n  }, {\n    key: \"setTo\",\n    value: function setTo(selectable, placeOrOffset, options) {\n      if (selectable === null) {\n        this._setRanges([]);\n      } else if (selectable instanceof Selection) {\n        this._setRanges(selectable.getRanges(), selectable.isBackward);\n      } else if (selectable && typeof selectable.getRanges == 'function') {\n        // We assume that the selectable is a DocumentSelection.\n        // It can't be imported here, because it would lead to circular imports.\n        this._setRanges(selectable.getRanges(), selectable.isBackward);\n      } else if (selectable instanceof Range) {\n        this._setRanges([selectable], !!placeOrOffset && !!placeOrOffset.backward);\n      } else if (selectable instanceof Position) {\n        this._setRanges([new Range(selectable)]);\n      } else if (selectable instanceof Node) {\n        var backward = !!options && !!options.backward;\n        var range;\n        if (placeOrOffset == 'in') {\n          range = Range._createIn(selectable);\n        } else if (placeOrOffset == 'on') {\n          range = Range._createOn(selectable);\n        } else if (placeOrOffset !== undefined) {\n          range = new Range(Position._createAt(selectable, placeOrOffset));\n        } else {\n          /**\n           * selection.setTo requires the second parameter when the first parameter is a node.\n           *\n           * @error model-selection-setTo-required-second-parameter\n           */\n          throw new CKEditorError('model-selection-setTo-required-second-parameter: ' + 'selection.setTo requires the second parameter when the first parameter is a node.', [this, selectable]);\n        }\n        this._setRanges([range], backward);\n      } else if (isIterable(selectable)) {\n        // We assume that the selectable is an iterable of ranges.\n        this._setRanges(selectable, placeOrOffset && !!placeOrOffset.backward);\n      } else {\n        /**\n         * Cannot set the selection to the given place.\n         *\n         * Invalid parameters were specified when setting the selection. Common issues:\n         *\n         * * A {@link module:engine/model/textproxy~TextProxy} instance was passed instead of\n         * a real {@link module:engine/model/text~Text}.\n         * * View nodes were passed instead of model nodes.\n         * * `null`/`undefined` was passed.\n         *\n         * @error model-selection-setTo-not-selectable\n         */\n        throw new CKEditorError('model-selection-setTo-not-selectable: Cannot set the selection to the given place.', [this, selectable]);\n      }\n    }\n\n    /**\n     * Replaces all ranges that were added to the selection with given array of ranges. Last range of the array\n     * is treated like the last added range and is used to set {@link module:engine/model/selection~Selection#anchor} and\n     * {@link module:engine/model/selection~Selection#focus}. Accepts a flag describing in which direction the selection is made.\n     *\n     * @protected\n     * @fires change:range\n     * @param {Iterable.<module:engine/model/range~Range>} newRanges Ranges to set.\n     * @param {Boolean} [isLastBackward=false] Flag describing if last added range was selected forward - from start to end (`false`)\n     * or backward - from end to start (`true`).\n     */\n  }, {\n    key: \"_setRanges\",\n    value: function _setRanges(newRanges) {\n      var _this = this;\n      var isLastBackward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      newRanges = Array.from(newRanges);\n\n      // Check whether there is any range in new ranges set that is different than all already added ranges.\n      var anyNewRange = newRanges.some(function (newRange) {\n        if (!(newRange instanceof Range)) {\n          /**\n           * Selection range set to an object that is not an instance of {@link module:engine/model/range~Range}.\n           *\n           * Only {@link module:engine/model/range~Range} instances can be used to set a selection.\n           * Common mistakes leading to this error are:\n           *\n           * * using DOM `Range` object,\n           * * incorrect CKEditor 5 installation with multiple `ckeditor5-engine` packages having different versions.\n           *\n           * @error model-selection-set-ranges-not-range\n           */\n          throw new CKEditorError('model-selection-set-ranges-not-range: ' + 'Selection range set to an object that is not an instance of model.Range.', [_this, newRanges]);\n        }\n        return _this._ranges.every(function (oldRange) {\n          return !oldRange.isEqual(newRange);\n        });\n      });\n\n      // Don't do anything if nothing changed.\n      if (newRanges.length === this._ranges.length && !anyNewRange) {\n        return;\n      }\n      this._removeAllRanges();\n      var _iterator6 = _createForOfIteratorHelper(newRanges),\n        _step6;\n      try {\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n          var range = _step6.value;\n          this._pushRange(range);\n        }\n      } catch (err) {\n        _iterator6.e(err);\n      } finally {\n        _iterator6.f();\n      }\n      this._lastRangeBackward = !!isLastBackward;\n      this.fire('change:range', {\n        directChange: true\n      });\n    }\n\n    /**\n     * Moves {@link module:engine/model/selection~Selection#focus} to the specified location.\n     *\n     * The location can be specified in the same form as\n     * {@link module:engine/model/writer~Writer#createPositionAt writer.createPositionAt()} parameters.\n     *\n     * @fires change:range\n     * @param {module:engine/model/item~Item|module:engine/model/position~Position} itemOrPosition\n     * @param {Number|'end'|'before'|'after'} [offset] Offset or one of the flags. Used only when\n     * first parameter is a {@link module:engine/model/item~Item model item}.\n     */\n  }, {\n    key: \"setFocus\",\n    value: function setFocus(itemOrPosition, offset) {\n      if (this.anchor === null) {\n        /**\n         * Cannot set selection focus if there are no ranges in selection.\n         *\n         * @error model-selection-setFocus-no-ranges\n         */\n        throw new CKEditorError('model-selection-setFocus-no-ranges: Cannot set selection focus if there are no ranges in selection.', [this, itemOrPosition]);\n      }\n      var newFocus = Position._createAt(itemOrPosition, offset);\n      if (newFocus.compareWith(this.focus) == 'same') {\n        return;\n      }\n      var anchor = this.anchor;\n      if (this._ranges.length) {\n        this._popRange();\n      }\n      if (newFocus.compareWith(anchor) == 'before') {\n        this._pushRange(new Range(newFocus, anchor));\n        this._lastRangeBackward = true;\n      } else {\n        this._pushRange(new Range(anchor, newFocus));\n        this._lastRangeBackward = false;\n      }\n      this.fire('change:range', {\n        directChange: true\n      });\n    }\n\n    /**\n     * Gets an attribute value for given key or `undefined` if that attribute is not set on the selection.\n     *\n     * @param {String} key Key of attribute to look for.\n     * @returns {*} Attribute value or `undefined`.\n     */\n  }, {\n    key: \"getAttribute\",\n    value: function getAttribute(key) {\n      return this._attrs.get(key);\n    }\n\n    /**\n     * Returns iterable that iterates over this selection's attributes.\n     *\n     * Attributes are returned as arrays containing two items. First one is attribute key and second is attribute value.\n     * This format is accepted by native `Map` object and also can be passed in `Node` constructor.\n     *\n     * @returns {Iterable.<*>}\n     */\n  }, {\n    key: \"getAttributes\",\n    value: function getAttributes() {\n      return this._attrs.entries();\n    }\n\n    /**\n     * Returns iterable that iterates over this selection's attribute keys.\n     *\n     * @returns {Iterable.<String>}\n     */\n  }, {\n    key: \"getAttributeKeys\",\n    value: function getAttributeKeys() {\n      return this._attrs.keys();\n    }\n\n    /**\n     * Checks if the selection has an attribute for given key.\n     *\n     * @param {String} key Key of attribute to check.\n     * @returns {Boolean} `true` if attribute with given key is set on selection, `false` otherwise.\n     */\n  }, {\n    key: \"hasAttribute\",\n    value: function hasAttribute(key) {\n      return this._attrs.has(key);\n    }\n\n    /**\n     * Removes an attribute with given key from the selection.\n     *\n     * If given attribute was set on the selection, fires the {@link #event:change:range} event with\n     * removed attribute key.\n     *\n     * @fires change:attribute\n     * @param {String} key Key of attribute to remove.\n     */\n  }, {\n    key: \"removeAttribute\",\n    value: function removeAttribute(key) {\n      if (this.hasAttribute(key)) {\n        this._attrs.delete(key);\n        this.fire('change:attribute', {\n          attributeKeys: [key],\n          directChange: true\n        });\n      }\n    }\n\n    /**\n     * Sets attribute on the selection. If attribute with the same key already is set, it's value is overwritten.\n     *\n     * If the attribute value has changed, fires the {@link #event:change:range} event with\n     * the attribute key.\n     *\n     * @fires change:attribute\n     * @param {String} key Key of attribute to set.\n     * @param {*} value Attribute value.\n     */\n  }, {\n    key: \"setAttribute\",\n    value: function setAttribute(key, value) {\n      if (this.getAttribute(key) !== value) {\n        this._attrs.set(key, value);\n        this.fire('change:attribute', {\n          attributeKeys: [key],\n          directChange: true\n        });\n      }\n    }\n\n    /**\n     * Returns the selected element. {@link module:engine/model/element~Element Element} is considered as selected if there is only\n     * one range in the selection, and that range contains exactly one element.\n     * Returns `null` if there is no selected element.\n     *\n     * @returns {module:engine/model/element~Element|null}\n     */\n  }, {\n    key: \"getSelectedElement\",\n    value: function getSelectedElement() {\n      if (this.rangeCount !== 1) {\n        return null;\n      }\n      var range = this.getFirstRange();\n      var nodeAfterStart = range.start.nodeAfter;\n      var nodeBeforeEnd = range.end.nodeBefore;\n      return nodeAfterStart instanceof Element && nodeAfterStart == nodeBeforeEnd ? nodeAfterStart : null;\n    }\n\n    /**\n     * Checks whether this object is of the given.\n     *\n     *\t\tselection.is( 'selection' ); // -> true\n     *\t\tselection.is( 'model:selection' ); // -> true\n     *\n     *\t\tselection.is( 'view:selection' ); // -> false\n     *\t\tselection.is( 'range' ); // -> false\n     *\n     * {@link module:engine/model/node~Node#is Check the entire list of model objects} which implement the `is()` method.\n     *\n     * @param {String} type\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'selection' || type == 'model:selection';\n    }\n\n    /**\n     * Gets elements of type {@link module:engine/model/schema~Schema#isBlock \"block\"} touched by the selection.\n     *\n     * This method's result can be used for example to apply block styling to all blocks covered by this selection.\n     *\n     * **Note:** `getSelectedBlocks()` returns blocks that are nested in other non-block elements\n     * but will not return blocks nested in other blocks.\n     *\n     * In this case the function will return exactly all 3 paragraphs (note: `<blockQuote>` is not a block itself):\n     *\n     *\t\t<paragraph>[a</paragraph>\n     *\t\t<blockQuote>\n     *\t\t\t<paragraph>b</paragraph>\n     *\t\t</blockQuote>\n     *\t\t<paragraph>c]d</paragraph>\n     *\n     * In this case the paragraph will also be returned, despite the collapsed selection:\n     *\n     *\t\t<paragraph>[]a</paragraph>\n     *\n     * In such a scenario, however, only blocks A, B & E will be returned as blocks C & D are nested in block B:\n     *\n     *\t\t[<blockA></blockA>\n     *\t\t<blockB>\n     *\t\t\t<blockC></blockC>\n     *\t\t\t<blockD></blockD>\n     *\t\t</blockB>\n     *\t\t<blockE></blockE>]\n     *\n     * If the selection is inside a block all the inner blocks (A & B) are returned:\n     *\n     * \t\t<block>\n     *\t\t\t<blockA>[a</blockA>\n     * \t\t\t<blockB>b]</blockB>\n     * \t\t</block>\n     *\n     * **Special case**: If a selection ends at the beginning of a block, that block is not returned as from user perspective\n     * this block wasn't selected. See [#984](https://github.com/ckeditor/ckeditor5-engine/issues/984) for more details.\n     *\n     *\t\t<paragraph>[a</paragraph>\n     *\t\t<paragraph>b</paragraph>\n     *\t\t<paragraph>]c</paragraph> // this block will not be returned\n     *\n     * @returns {Iterable.<module:engine/model/element~Element>}\n     */\n  }, {\n    key: \"getSelectedBlocks\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function getSelectedBlocks() {\n      var visited, _iterator7, _step7, range, startBlock, _iterator8, _step8, value, block, endBlock, _t2, _t3;\n      return _regenerator().w(function (_context2) {\n        while (1) switch (_context2.p = _context2.n) {\n          case 0:\n            visited = new WeakSet();\n            _iterator7 = _createForOfIteratorHelper(this.getRanges());\n            _context2.p = 1;\n            _iterator7.s();\n          case 2:\n            if ((_step7 = _iterator7.n()).done) {\n              _context2.n = 12;\n              break;\n            }\n            range = _step7.value;\n            // Get start block of range in case of a collapsed range.\n            startBlock = getParentBlock(range.start, visited);\n            if (!(startBlock && isTopBlockInRange(startBlock, range))) {\n              _context2.n = 3;\n              break;\n            }\n            _context2.n = 3;\n            return startBlock;\n          case 3:\n            _iterator8 = _createForOfIteratorHelper(range.getWalker());\n            _context2.p = 4;\n            _iterator8.s();\n          case 5:\n            if ((_step8 = _iterator8.n()).done) {\n              _context2.n = 7;\n              break;\n            }\n            value = _step8.value;\n            block = value.item;\n            if (!(value.type == 'elementEnd' && isUnvisitedTopBlock(block, visited, range))) {\n              _context2.n = 6;\n              break;\n            }\n            _context2.n = 6;\n            return block;\n          case 6:\n            _context2.n = 5;\n            break;\n          case 7:\n            _context2.n = 9;\n            break;\n          case 8:\n            _context2.p = 8;\n            _t2 = _context2.v;\n            _iterator8.e(_t2);\n          case 9:\n            _context2.p = 9;\n            _iterator8.f();\n            return _context2.f(9);\n          case 10:\n            endBlock = getParentBlock(range.end, visited); // #984. Don't return the end block if the range ends right at its beginning.\n            if (!(endBlock && !range.end.isTouching(Position._createAt(endBlock, 0)) && isTopBlockInRange(endBlock, range))) {\n              _context2.n = 11;\n              break;\n            }\n            _context2.n = 11;\n            return endBlock;\n          case 11:\n            _context2.n = 2;\n            break;\n          case 12:\n            _context2.n = 14;\n            break;\n          case 13:\n            _context2.p = 13;\n            _t3 = _context2.v;\n            _iterator7.e(_t3);\n          case 14:\n            _context2.p = 14;\n            _iterator7.f();\n            return _context2.f(14);\n          case 15:\n            return _context2.a(2);\n        }\n      }, getSelectedBlocks, this, [[4, 8, 9, 10], [1, 13, 14, 15]]);\n    })\n    /**\n     * Checks whether the selection contains the entire content of the given element. This means that selection must start\n     * at a position {@link module:engine/model/position~Position#isTouching touching} the element's start and ends at position\n     * touching the element's end.\n     *\n     * By default, this method will check whether the entire content of the selection's current root is selected.\n     * Useful to check if e.g. the user has just pressed <kbd>Ctrl</kbd> + <kbd>A</kbd>.\n     *\n     * @param {module:engine/model/element~Element} [element=this.anchor.root]\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"containsEntireContent\",\n    value: function containsEntireContent() {\n      var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.anchor.root;\n      var limitStartPosition = Position._createAt(element, 0);\n      var limitEndPosition = Position._createAt(element, 'end');\n      return limitStartPosition.isTouching(this.getFirstPosition()) && limitEndPosition.isTouching(this.getLastPosition());\n    }\n\n    /**\n     * Adds given range to internal {@link #_ranges ranges array}. Throws an error\n     * if given range is intersecting with any range that is already stored in this selection.\n     *\n     * @protected\n     * @param {module:engine/model/range~Range} range Range to add.\n     */\n  }, {\n    key: \"_pushRange\",\n    value: function _pushRange(range) {\n      this._checkRange(range);\n      this._ranges.push(new Range(range.start, range.end));\n    }\n\n    /**\n     * Checks if given range intersects with ranges that are already in the selection. Throws an error if it does.\n     *\n     * @protected\n     * @param {module:engine/model/range~Range} range Range to check.\n     */\n  }, {\n    key: \"_checkRange\",\n    value: function _checkRange(range) {\n      for (var i = 0; i < this._ranges.length; i++) {\n        if (range.isIntersecting(this._ranges[i])) {\n          /**\n           * Trying to add a range that intersects with another range in the selection.\n           *\n           * @error model-selection-range-intersects\n           * @param {module:engine/model/range~Range} addedRange Range that was added to the selection.\n           * @param {module:engine/model/range~Range} intersectingRange Range in the selection that intersects with `addedRange`.\n           */\n          throw new CKEditorError('model-selection-range-intersects: Trying to add a range that intersects with another range in the selection.', [this, range], {\n            addedRange: range,\n            intersectingRange: this._ranges[i]\n          });\n        }\n      }\n    }\n\n    /**\n     * Deletes ranges from internal range array. Uses {@link #_popRange _popRange} to\n     * ensure proper ranges removal.\n     *\n     * @protected\n     */\n  }, {\n    key: \"_removeAllRanges\",\n    value: function _removeAllRanges() {\n      while (this._ranges.length > 0) {\n        this._popRange();\n      }\n    }\n\n    /**\n     * Removes most recently added range from the selection.\n     *\n     * @protected\n     */\n  }, {\n    key: \"_popRange\",\n    value: function _popRange() {\n      this._ranges.pop();\n    }\n\n    /**\n     * Fired when selection range(s) changed.\n     *\n     * @event change:range\n     * @param {Boolean} directChange In case of {@link module:engine/model/selection~Selection} class it is always set\n     * to `true` which indicates that the selection change was caused by a direct use of selection's API.\n     * The {@link module:engine/model/documentselection~DocumentSelection}, however, may change because its position\n     * was directly changed through the {@link module:engine/model/writer~Writer writer} or because its position was\n     * changed because the structure of the model has been changed (which means an indirect change).\n     * The indirect change does not occur in case of normal (detached) selections because they are \"static\" (as \"not live\")\n     * which mean that they are not updated once the document changes.\n     */\n\n    /**\n     * Fired when selection attribute changed.\n     *\n     * @event change:attribute\n     * @param {Boolean} directChange In case of {@link module:engine/model/selection~Selection} class it is always set\n     * to `true` which indicates that the selection change was caused by a direct use of selection's API.\n     * The {@link module:engine/model/documentselection~DocumentSelection}, however, may change because its attributes\n     * were directly changed through the {@link module:engine/model/writer~Writer writer} or because its position was\n     * changed in the model and its attributes were refreshed (which means an indirect change).\n     * The indirect change does not occur in case of normal (detached) selections because they are \"static\" (as \"not live\")\n     * which mean that they are not updated once the document changes.\n     * @param {Array.<String>} attributeKeys Array containing keys of attributes that changed.\n     */\n  }]);\n}();\nexport { Selection as default };\nmix(Selection, EmitterMixin);\n\n// Checks whether the given element extends $block in the schema and has a parent (is not a root).\n// Marks it as already visited.\nfunction isUnvisitedBlock(element, visited) {\n  if (visited.has(element)) {\n    return false;\n  }\n  visited.add(element);\n  return element.document.model.schema.isBlock(element) && element.parent;\n}\n\n// Checks if the given element is a $block was not previously visited and is a top block in a range.\nfunction isUnvisitedTopBlock(element, visited, range) {\n  return isUnvisitedBlock(element, visited) && isTopBlockInRange(element, range);\n}\n\n// Finds the lowest element in position's ancestors which is a block.\n// It will search until first ancestor that is a limit element.\n// Marks all ancestors as already visited to not include any of them later on.\nfunction getParentBlock(position, visited) {\n  var schema = position.parent.document.model.schema;\n  var ancestors = position.parent.getAncestors({\n    parentFirst: true,\n    includeSelf: true\n  });\n  var hasParentLimit = false;\n  var block = ancestors.find(function (element) {\n    // Stop searching after first parent node that is limit element.\n    if (hasParentLimit) {\n      return false;\n    }\n    hasParentLimit = schema.isLimit(element);\n    return !hasParentLimit && isUnvisitedBlock(element, visited);\n  });\n\n  // Mark all ancestors of this position's parent, because find() might've stopped early and\n  // the found block may be a child of another block.\n  ancestors.forEach(function (element) {\n    return visited.add(element);\n  });\n  return block;\n}\n\n// Checks if the blocks is not nested in other block inside a range.\n//\n// @param {module:engine/model/elmenent~Element} block Block to check.\n// @param {module:engine/model/range~Range} range Range to check.\nfunction isTopBlockInRange(block, range) {\n  var parentBlock = findAncestorBlock(block);\n  if (!parentBlock) {\n    return true;\n  }\n\n  // Add loose flag to check as parentRange can be equal to range.\n  var isParentInRange = range.containsRange(Range._createOn(parentBlock), true);\n  return !isParentInRange;\n}\n\n// Returns first ancestor block of a node.\n//\n// @param {module:engine/model/node~Node} node\n// @returns {module:engine/model/node~Node|undefined}\nfunction findAncestorBlock(node) {\n  var schema = node.document.model.schema;\n  var parent = node.parent;\n  while (parent) {\n    if (schema.isBlock(parent)) {\n      return parent;\n    }\n    parent = parent.parent;\n  }\n}\n\n/**\n * An entity that is used to set selection.\n *\n * See also {@link module:engine/model/selection~Selection#setTo}\n *\n * @typedef {\n *     module:engine/model/selection~Selection|\n *     module:engine/model/documentselection~DocumentSelection|\n *     module:engine/model/position~Position|\n *     module:engine/model/range~Range|\n *     module:engine/model/node~Node|\n *     Iterable.<module:engine/model/range~Range>|\n *     null\n * } module:engine/model/selection~Selectable\n */","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/text\n */\n\nimport Node from './node';\n\n/**\n * Model text node. Type of {@link module:engine/model/node~Node node} that contains {@link module:engine/model/text~Text#data text data}.\n *\n * **Important:** see {@link module:engine/model/node~Node} to read about restrictions using `Text` and `Node` API.\n *\n * **Note:** keep in mind that `Text` instances might indirectly got removed from model tree when model is changed.\n * This happens when {@link module:engine/model/writer~Writer model writer} is used to change model and the text node is merged with\n * another text node. Then, both text nodes are removed and a new text node is inserted into the model. Because of\n * this behavior, keeping references to `Text` is not recommended. Instead, consider creating\n * {@link module:engine/model/liveposition~LivePosition live position} placed before the text node.\n *\n * @extends module:engine/model/node~Node\n */\nvar Text = /*#__PURE__*/function (_Node) {\n  /**\n   * Creates a text node.\n   *\n   * **Note:** Constructor of this class shouldn't be used directly in the code.\n   * Use the {@link module:engine/model/writer~Writer#createText} method instead.\n   *\n   * @protected\n   * @param {String} data Node's text.\n   * @param {Object} [attrs] Node's attributes. See {@link module:utils/tomap~toMap} for a list of accepted values.\n   */\n  function Text(data, attrs) {\n    var _this;\n    _classCallCheck(this, Text);\n    _this = _callSuper(this, Text, [attrs]);\n\n    /**\n     * Text data contained in this text node.\n     *\n     * @protected\n     * @type {String}\n     */\n    _this._data = data || '';\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(Text, _Node);\n  return _createClass(Text, [{\n    key: \"offsetSize\",\n    get: function get() {\n      return this.data.length;\n    }\n\n    /**\n     * Returns a text data contained in the node.\n     *\n     * @readonly\n     * @type {String}\n     */\n  }, {\n    key: \"data\",\n    get: function get() {\n      return this._data;\n    }\n\n    /**\n     * Checks whether this object is of the given.\n     *\n     *\t\ttext.is( 'text' ); // -> true\n     *\t\ttext.is( 'node' ); // -> true\n     *\t\ttext.is( 'model:text' ); // -> true\n     *\t\ttext.is( 'model:node' ); // -> true\n     *\n     *\t\ttext.is( 'view:text' ); // -> false\n     *\t\ttext.is( 'documentSelection' ); // -> false\n     *\n     * {@link module:engine/model/node~Node#is Check the entire list of model objects} which implement the `is()` method.\n     *\n     * @param {String} type Type to check when `name` parameter is present.\n     * Otherwise, it acts like the `name` parameter.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'text' || type == 'model:text' || _superPropGet(Text, \"is\", this, 3)([type]);\n    }\n\n    /**\n     * Converts `Text` instance to plain object and returns it.\n     *\n     * @returns {Object} `Text` instance converted to plain object.\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var json = _superPropGet(Text, \"toJSON\", this, 3)([]);\n      json.data = this.data;\n      return json;\n    }\n\n    /**\n     * Creates a copy of this text node and returns it. Created text node has same text data and attributes as original text node.\n     *\n     * @protected\n     * @returns {module:engine/model/text~Text} `Text` instance created using given plain object.\n     */\n  }, {\n    key: \"_clone\",\n    value: function _clone() {\n      return new Text(this.data, this.getAttributes());\n    }\n\n    /**\n     * Creates a `Text` instance from given plain object (i.e. parsed JSON string).\n     *\n     * @param {Object} json Plain object to be converted to `Text`.\n     * @returns {module:engine/model/text~Text} `Text` instance created using given plain object.\n     */\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(json) {\n      return new Text(json.data, json.attributes);\n    }\n  }]);\n}(Node);\nexport { Text as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/textproxy\n */\n\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * `TextProxy` represents a part of {@link module:engine/model/text~Text text node}.\n *\n * Since {@link module:engine/model/position~Position positions} can be placed between characters of a text node,\n * {@link module:engine/model/range~Range ranges} may contain only parts of text nodes. When {@link module:engine/model/range~Range#getItems\n * getting items}\n * contained in such range, we need to represent a part of that text node, since returning the whole text node would be incorrect.\n * `TextProxy` solves this issue.\n *\n * `TextProxy` has an API similar to {@link module:engine/model/text~Text Text} and allows to do most of the common tasks performed\n * on model nodes.\n *\n * **Note:** Some `TextProxy` instances may represent whole text node, not just a part of it.\n * See {@link module:engine/model/textproxy~TextProxy#isPartial}.\n *\n * **Note:** `TextProxy` is not an instance of {@link module:engine/model/node~Node node}. Keep this in mind when using it as a\n * parameter of methods.\n *\n * **Note:** `TextProxy` is a readonly interface. If you want to perform changes on model data represented by a `TextProxy`\n * use {@link module:engine/model/writer~Writer model writer API}.\n *\n * **Note:** `TextProxy` instances are created on the fly, basing on the current state of model. Because of this, it is\n * highly unrecommended to store references to `TextProxy` instances. `TextProxy` instances are not refreshed when\n * model changes, so they might get invalidated. Instead, consider creating {@link module:engine/model/liveposition~LivePosition live\n * position}.\n *\n * `TextProxy` instances are created by {@link module:engine/model/treewalker~TreeWalker model tree walker}. You should not need to create\n * an instance of this class by your own.\n */\nvar TextProxy = /*#__PURE__*/function () {\n  /**\n   * Creates a text proxy.\n   *\n   * @protected\n   * @param {module:engine/model/text~Text} textNode Text node which part is represented by this text proxy.\n   * @param {Number} offsetInText Offset in {@link module:engine/model/textproxy~TextProxy#textNode text node} from which the text proxy\n   * starts.\n   * @param {Number} length Text proxy length, that is how many text node's characters, starting from `offsetInText` it represents.\n   * @constructor\n   */\n  function TextProxy(textNode, offsetInText, length) {\n    _classCallCheck(this, TextProxy);\n    /**\n     * Text node which part is represented by this text proxy.\n     *\n     * @readonly\n     * @member {module:engine/model/text~Text}\n     */\n    this.textNode = textNode;\n    if (offsetInText < 0 || offsetInText > textNode.offsetSize) {\n      /**\n       * Given `offsetInText` value is incorrect.\n       *\n       * @error model-textproxy-wrong-offsetintext\n       */\n      throw new CKEditorError('model-textproxy-wrong-offsetintext: Given offsetInText value is incorrect.', this);\n    }\n    if (length < 0 || offsetInText + length > textNode.offsetSize) {\n      /**\n       * Given `length` value is incorrect.\n       *\n       * @error model-textproxy-wrong-length\n       */\n      throw new CKEditorError('model-textproxy-wrong-length: Given length value is incorrect.', this);\n    }\n\n    /**\n     * Text data represented by this text proxy.\n     *\n     * @readonly\n     * @member {String}\n     */\n    this.data = textNode.data.substring(offsetInText, offsetInText + length);\n\n    /**\n     * Offset in {@link module:engine/model/textproxy~TextProxy#textNode text node} from which the text proxy starts.\n     *\n     * @readonly\n     * @member {Number}\n     */\n    this.offsetInText = offsetInText;\n  }\n\n  /**\n   * Offset at which this text proxy starts in it's parent.\n   *\n   * @see module:engine/model/node~Node#startOffset\n   * @readonly\n   * @type {Number}\n   */\n  return _createClass(TextProxy, [{\n    key: \"startOffset\",\n    get: function get() {\n      return this.textNode.startOffset !== null ? this.textNode.startOffset + this.offsetInText : null;\n    }\n\n    /**\n     * Offset size of this text proxy. Equal to the number of characters represented by the text proxy.\n     *\n     * @see module:engine/model/node~Node#offsetSize\n     * @readonly\n     * @type {Number}\n     */\n  }, {\n    key: \"offsetSize\",\n    get: function get() {\n      return this.data.length;\n    }\n\n    /**\n     * Offset at which this text proxy ends in it's parent.\n     *\n     * @see module:engine/model/node~Node#endOffset\n     * @readonly\n     * @type {Number}\n     */\n  }, {\n    key: \"endOffset\",\n    get: function get() {\n      return this.startOffset !== null ? this.startOffset + this.offsetSize : null;\n    }\n\n    /**\n     * Flag indicating whether `TextProxy` instance covers only part of the original {@link module:engine/model/text~Text text node}\n     * (`true`) or the whole text node (`false`).\n     *\n     * This is `false` when text proxy starts at the very beginning of {@link module:engine/model/textproxy~TextProxy#textNode textNode}\n     * ({@link module:engine/model/textproxy~TextProxy#offsetInText offsetInText} equals `0`) and text proxy sizes is equal to\n     * text node size.\n     *\n     * @readonly\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isPartial\",\n    get: function get() {\n      return this.offsetSize !== this.textNode.offsetSize;\n    }\n\n    /**\n     * Parent of this text proxy, which is same as parent of text node represented by this text proxy.\n     *\n     * @readonly\n     * @type {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment|null}\n     */\n  }, {\n    key: \"parent\",\n    get: function get() {\n      return this.textNode.parent;\n    }\n\n    /**\n     * Root of this text proxy, which is same as root of text node represented by this text proxy.\n     *\n     * @readonly\n     * @type {module:engine/model/node~Node|module:engine/model/documentfragment~DocumentFragment}\n     */\n  }, {\n    key: \"root\",\n    get: function get() {\n      return this.textNode.root;\n    }\n\n    /**\n     * {@link module:engine/model/document~Document Document} that owns text node represented by this text proxy or `null` if the text node\n     * has no parent or is inside a {@link module:engine/model/documentfragment~DocumentFragment DocumentFragment}.\n     *\n     * @readonly\n     * @type {module:engine/model/document~Document|null}\n     */\n  }, {\n    key: \"document\",\n    get: function get() {\n      return this.textNode.document;\n    }\n\n    /**\n     * Checks whether this object is of the given.\n     *\n     *\t\ttextProxy.is( 'textProxy' ); // -> true\n     *\t\ttextProxy.is( 'model:textProxy' ); // -> true\n     *\n     *\t\ttextProxy.is( 'view:textProxy' ); // -> false\n     *\t\ttextProxy.is( 'range' ); // -> false\n     *\n     * {@link module:engine/model/node~Node#is Check the entire list of model objects} which implement the `is()` method.\n     *\n     * @param {String} type\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'textProxy' || type == 'model:textProxy';\n    }\n\n    /**\n     * Gets path to this text proxy.\n     *\n     * @see module:engine/model/node~Node#getPath\n     * @returns {Array.<Number>}\n     */\n  }, {\n    key: \"getPath\",\n    value: function getPath() {\n      var path = this.textNode.getPath();\n      if (path.length > 0) {\n        path[path.length - 1] += this.offsetInText;\n      }\n      return path;\n    }\n\n    /**\n     * Returns ancestors array of this text proxy.\n     *\n     * @param {Object} options Options object.\n     * @param {Boolean} [options.includeSelf=false] When set to `true` this text proxy will be also included in parent's array.\n     * @param {Boolean} [options.parentFirst=false] When set to `true`, array will be sorted from text proxy parent to root element,\n     * otherwise root element will be the first item in the array.\n     * @returns {Array} Array with ancestors.\n     */\n  }, {\n    key: \"getAncestors\",\n    value: function getAncestors() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n        includeSelf: false,\n        parentFirst: false\n      };\n      var ancestors = [];\n      var parent = options.includeSelf ? this : this.parent;\n      while (parent) {\n        ancestors[options.parentFirst ? 'push' : 'unshift'](parent);\n        parent = parent.parent;\n      }\n      return ancestors;\n    }\n\n    /**\n     * Checks if this text proxy has an attribute for given key.\n     *\n     * @param {String} key Key of attribute to check.\n     * @returns {Boolean} `true` if attribute with given key is set on text proxy, `false` otherwise.\n     */\n  }, {\n    key: \"hasAttribute\",\n    value: function hasAttribute(key) {\n      return this.textNode.hasAttribute(key);\n    }\n\n    /**\n     * Gets an attribute value for given key or `undefined` if that attribute is not set on text proxy.\n     *\n     * @param {String} key Key of attribute to look for.\n     * @returns {*} Attribute value or `undefined`.\n     */\n  }, {\n    key: \"getAttribute\",\n    value: function getAttribute(key) {\n      return this.textNode.getAttribute(key);\n    }\n\n    /**\n     * Returns iterator that iterates over this node's attributes. Attributes are returned as arrays containing two\n     * items. First one is attribute key and second is attribute value.\n     *\n     * This format is accepted by native `Map` object and also can be passed in `Node` constructor.\n     *\n     * @returns {Iterable.<*>}\n     */\n  }, {\n    key: \"getAttributes\",\n    value: function getAttributes() {\n      return this.textNode.getAttributes();\n    }\n\n    /**\n     * Returns iterator that iterates over this node's attribute keys.\n     *\n     * @returns {Iterable.<String>}\n     */\n  }, {\n    key: \"getAttributeKeys\",\n    value: function getAttributeKeys() {\n      return this.textNode.getAttributeKeys();\n    }\n  }]);\n}();\nexport { TextProxy as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/treewalker\n */\n\nimport Text from './text';\nimport TextProxy from './textproxy';\nimport Element from './element';\nimport Position from './position';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * Position iterator class. It allows to iterate forward and backward over the document.\n */\nvar TreeWalker = /*#__PURE__*/function () {\n  /**\n   * Creates a range iterator. All parameters are optional, but you have to specify either `boundaries` or `startPosition`.\n   *\n   * @constructor\n   * @param {Object} [options={}] Object with configuration.\n   * @param {'forward'|'backward'} [options.direction='forward'] Walking direction.\n   * @param {module:engine/model/range~Range} [options.boundaries=null] Range to define boundaries of the iterator.\n   * @param {module:engine/model/position~Position} [options.startPosition] Starting position.\n   * @param {Boolean} [options.singleCharacters=false] Flag indicating whether all consecutive characters with the same attributes\n   * should be returned one by one as multiple {@link module:engine/model/textproxy~TextProxy} (`true`) objects or as one\n   * {@link module:engine/model/textproxy~TextProxy} (`false`).\n   * @param {Boolean} [options.shallow=false] Flag indicating whether iterator should enter elements or not. If the\n   * iterator is shallow child nodes of any iterated node will not be returned along with `elementEnd` tag.\n   * @param {Boolean} [options.ignoreElementEnd=false] Flag indicating whether iterator should ignore `elementEnd`\n   * tags. If the option is true walker will not return a parent node of start position. If this option is `true`\n   * each {@link module:engine/model/element~Element} will be returned once, while if the option is `false` they might be returned\n   * twice: for `'elementStart'` and `'elementEnd'`.\n   */\n  function TreeWalker() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _classCallCheck(this, TreeWalker);\n    if (!options.boundaries && !options.startPosition) {\n      /**\n       * Neither boundaries nor starting position of a `TreeWalker` have been defined.\n       *\n       * @error model-tree-walker-no-start-position\n       */\n      throw new CKEditorError('model-tree-walker-no-start-position: Neither boundaries nor starting position have been defined.', null);\n    }\n    var direction = options.direction || 'forward';\n    if (direction != 'forward' && direction != 'backward') {\n      throw new CKEditorError('model-tree-walker-unknown-direction: Only `backward` and `forward` direction allowed.', options, {\n        direction: direction\n      });\n    }\n\n    /**\n     * Walking direction. Defaults `'forward'`.\n     *\n     * @readonly\n     * @member {'backward'|'forward'} module:engine/model/treewalker~TreeWalker#direction\n     */\n    this.direction = direction;\n\n    /**\n     * Iterator boundaries.\n     *\n     * When the iterator is walking `'forward'` on the end of boundary or is walking `'backward'`\n     * on the start of boundary, then `{ done: true }` is returned.\n     *\n     * If boundaries are not defined they are set before first and after last child of the root node.\n     *\n     * @readonly\n     * @member {module:engine/model/range~Range} module:engine/model/treewalker~TreeWalker#boundaries\n     */\n    this.boundaries = options.boundaries || null;\n\n    /**\n     * Iterator position. This is always static position, even if the initial position was a\n     * {@link module:engine/model/liveposition~LivePosition live position}. If start position is not defined then position depends\n     * on {@link #direction}. If direction is `'forward'` position starts form the beginning, when direction\n     * is `'backward'` position starts from the end.\n     *\n     * @readonly\n     * @member {module:engine/model/position~Position} module:engine/model/treewalker~TreeWalker#position\n     */\n    if (options.startPosition) {\n      this.position = options.startPosition.clone();\n    } else {\n      this.position = Position._createAt(this.boundaries[this.direction == 'backward' ? 'end' : 'start']);\n    }\n\n    // Reset position stickiness in case it was set to other value, as the stickiness is kept after cloning.\n    this.position.stickiness = 'toNone';\n\n    /**\n     * Flag indicating whether all consecutive characters with the same attributes should be\n     * returned as one {@link module:engine/model/textproxy~TextProxy} (`true`) or one by one (`false`).\n     *\n     * @readonly\n     * @member {Boolean} module:engine/model/treewalker~TreeWalker#singleCharacters\n     */\n    this.singleCharacters = !!options.singleCharacters;\n\n    /**\n     * Flag indicating whether iterator should enter elements or not. If the iterator is shallow child nodes of any\n     * iterated node will not be returned along with `elementEnd` tag.\n     *\n     * @readonly\n     * @member {Boolean} module:engine/model/treewalker~TreeWalker#shallow\n     */\n    this.shallow = !!options.shallow;\n\n    /**\n     * Flag indicating whether iterator should ignore `elementEnd` tags. If the option is true walker will not\n     * return a parent node of the start position. If this option is `true` each {@link module:engine/model/element~Element} will\n     * be returned once, while if the option is `false` they might be returned twice:\n     * for `'elementStart'` and `'elementEnd'`.\n     *\n     * @readonly\n     * @member {Boolean} module:engine/model/treewalker~TreeWalker#ignoreElementEnd\n     */\n    this.ignoreElementEnd = !!options.ignoreElementEnd;\n\n    /**\n     * Start boundary cached for optimization purposes.\n     *\n     * @private\n     * @member {module:engine/model/element~Element} module:engine/model/treewalker~TreeWalker#_boundaryStartParent\n     */\n    this._boundaryStartParent = this.boundaries ? this.boundaries.start.parent : null;\n\n    /**\n     * End boundary cached for optimization purposes.\n     *\n     * @private\n     * @member {module:engine/model/element~Element} module:engine/model/treewalker~TreeWalker#_boundaryEndParent\n     */\n    this._boundaryEndParent = this.boundaries ? this.boundaries.end.parent : null;\n\n    /**\n     * Parent of the most recently visited node. Cached for optimization purposes.\n     *\n     * @private\n     * @member {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment}\n     * module:engine/model/treewalker~TreeWalker#_visitedParent\n     */\n    this._visitedParent = this.position.parent;\n  }\n\n  /**\n   * Iterable interface.\n   *\n   * @returns {Iterable.<module:engine/model/treewalker~TreeWalkerValue>}\n   */\n  return _createClass(TreeWalker, [{\n    key: Symbol.iterator,\n    value: function value() {\n      return this;\n    }\n\n    /**\n     * Moves {@link #position} in the {@link #direction} skipping values as long as the callback function returns `true`.\n     *\n     * For example:\n     *\n     * \t\twalker.skip( value => value.type == 'text' ); // <paragraph>[]foo</paragraph> -> <paragraph>foo[]</paragraph>\n     * \t\twalker.skip( () => true ); // Move the position to the end: <paragraph>[]foo</paragraph> -> <paragraph>foo</paragraph>[]\n     * \t\twalker.skip( () => false ); // Do not move the position.\n     *\n     * @param {Function} skip Callback function. Gets {@link module:engine/model/treewalker~TreeWalkerValue} and should\n     * return `true` if the value should be skipped or `false` if not.\n     */\n  }, {\n    key: \"skip\",\n    value: function skip(_skip) {\n      var done, value, prevPosition, prevVisitedParent;\n      do {\n        prevPosition = this.position;\n        prevVisitedParent = this._visitedParent;\n        var _this$next = this.next();\n        done = _this$next.done;\n        value = _this$next.value;\n      } while (!done && _skip(value));\n      if (!done) {\n        this.position = prevPosition;\n        this._visitedParent = prevVisitedParent;\n      }\n    }\n\n    /**\n     * Gets the next tree walker's value.\n     *\n     * @returns {module:engine/model/treewalker~TreeWalkerValue} Next tree walker's value.\n     */\n  }, {\n    key: \"next\",\n    value: function next() {\n      if (this.direction == 'forward') {\n        return this._next();\n      } else {\n        return this._previous();\n      }\n    }\n\n    /**\n     * Makes a step forward in model. Moves the {@link #position} to the next position and returns the encountered value.\n     *\n     * @private\n     * @returns {Object}\n     * @returns {Boolean} return.done True if iterator is done.\n     * @returns {module:engine/model/treewalker~TreeWalkerValue} return.value Information about taken step.\n     */\n  }, {\n    key: \"_next\",\n    value: function _next() {\n      var previousPosition = this.position;\n      var position = this.position.clone();\n      var parent = this._visitedParent;\n\n      // We are at the end of the root.\n      if (parent.parent === null && position.offset === parent.maxOffset) {\n        return {\n          done: true\n        };\n      }\n\n      // We reached the walker boundary.\n      if (parent === this._boundaryEndParent && position.offset == this.boundaries.end.offset) {\n        return {\n          done: true\n        };\n      }\n      var node = position.textNode ? position.textNode : position.nodeAfter;\n      if (node instanceof Element) {\n        if (!this.shallow) {\n          // Manual operations on path internals for optimization purposes. Here and in the rest of the method.\n          position.path.push(0);\n          this._visitedParent = node;\n        } else {\n          position.offset++;\n        }\n        this.position = position;\n        return formatReturnValue('elementStart', node, previousPosition, position, 1);\n      } else if (node instanceof Text) {\n        var charactersCount;\n        if (this.singleCharacters) {\n          charactersCount = 1;\n        } else {\n          var offset = node.endOffset;\n          if (this._boundaryEndParent == parent && this.boundaries.end.offset < offset) {\n            offset = this.boundaries.end.offset;\n          }\n          charactersCount = offset - position.offset;\n        }\n        var offsetInTextNode = position.offset - node.startOffset;\n        var item = new TextProxy(node, offsetInTextNode, charactersCount);\n        position.offset += charactersCount;\n        this.position = position;\n        return formatReturnValue('text', item, previousPosition, position, charactersCount);\n      } else {\n        // `node` is not set, we reached the end of current `parent`.\n        position.path.pop();\n        position.offset++;\n        this.position = position;\n        this._visitedParent = parent.parent;\n        if (this.ignoreElementEnd) {\n          return this._next();\n        } else {\n          return formatReturnValue('elementEnd', parent, previousPosition, position);\n        }\n      }\n    }\n\n    /**\n     * Makes a step backward in model. Moves the {@link #position} to the previous position and returns the encountered value.\n     *\n     * @private\n     * @returns {Object}\n     * @returns {Boolean} return.done True if iterator is done.\n     * @returns {module:engine/model/treewalker~TreeWalkerValue} return.value Information about taken step.\n     */\n  }, {\n    key: \"_previous\",\n    value: function _previous() {\n      var previousPosition = this.position;\n      var position = this.position.clone();\n      var parent = this._visitedParent;\n\n      // We are at the beginning of the root.\n      if (parent.parent === null && position.offset === 0) {\n        return {\n          done: true\n        };\n      }\n\n      // We reached the walker boundary.\n      if (parent == this._boundaryStartParent && position.offset == this.boundaries.start.offset) {\n        return {\n          done: true\n        };\n      }\n\n      // Get node just before current position\n      var node = position.textNode ? position.textNode : position.nodeBefore;\n      if (node instanceof Element) {\n        position.offset--;\n        if (!this.shallow) {\n          position.path.push(node.maxOffset);\n          this.position = position;\n          this._visitedParent = node;\n          if (this.ignoreElementEnd) {\n            return this._previous();\n          } else {\n            return formatReturnValue('elementEnd', node, previousPosition, position);\n          }\n        } else {\n          this.position = position;\n          return formatReturnValue('elementStart', node, previousPosition, position, 1);\n        }\n      } else if (node instanceof Text) {\n        var charactersCount;\n        if (this.singleCharacters) {\n          charactersCount = 1;\n        } else {\n          var offset = node.startOffset;\n          if (this._boundaryStartParent == parent && this.boundaries.start.offset > offset) {\n            offset = this.boundaries.start.offset;\n          }\n          charactersCount = position.offset - offset;\n        }\n        var offsetInTextNode = position.offset - node.startOffset;\n        var item = new TextProxy(node, offsetInTextNode - charactersCount, charactersCount);\n        position.offset -= charactersCount;\n        this.position = position;\n        return formatReturnValue('text', item, previousPosition, position, charactersCount);\n      } else {\n        // `node` is not set, we reached the beginning of current `parent`.\n        position.path.pop();\n        this.position = position;\n        this._visitedParent = parent.parent;\n        return formatReturnValue('elementStart', parent, previousPosition, position, 1);\n      }\n    }\n  }]);\n}();\nexport { TreeWalker as default };\nfunction formatReturnValue(type, item, previousPosition, nextPosition, length) {\n  return {\n    done: false,\n    value: {\n      type: type,\n      item: item,\n      previousPosition: previousPosition,\n      nextPosition: nextPosition,\n      length: length\n    }\n  };\n}\n\n/**\n * Type of the step made by {@link module:engine/model/treewalker~TreeWalker}.\n * Possible values: `'elementStart'` if walker is at the beginning of a node, `'elementEnd'` if walker is at the end of node,\n * `'character'` if walker traversed over a character, or `'text'` if walker traversed over multiple characters (available in\n * character merging mode, see {@link module:engine/model/treewalker~TreeWalker#constructor}).\n *\n * @typedef {'elementStart'|'elementEnd'|'character'|'text'} module:engine/model/treewalker~TreeWalkerValueType\n */\n\n/**\n * Object returned by {@link module:engine/model/treewalker~TreeWalker} when traversing tree model.\n *\n * @typedef {Object} module:engine/model/treewalker~TreeWalkerValue\n * @property {module:engine/model/treewalker~TreeWalkerValueType} type\n * @property {module:engine/model/item~Item} item Item between old and new positions of {@link module:engine/model/treewalker~TreeWalker}.\n * @property {module:engine/model/position~Position} previousPosition Previous position of the iterator.\n * * Forward iteration: For `'elementEnd'` it is the last position inside the element. For all other types it is the\n * position before the item.\n * * Backward iteration: For `'elementStart'` it is the first position inside the element. For all other types it is\n * the position after item.\n * @property {module:engine/model/position~Position} nextPosition Next position of the iterator.\n * * Forward iteration: For `'elementStart'` it is the first position inside the element. For all other types it is\n * the position after the item.\n * * Backward iteration: For `'elementEnd'` it is last position inside element. For all other types it is the position\n * before the item.\n * @property {Number} [length] Length of the item. For `'elementStart'` and `'character'` it is 1. For `'text'` it is\n * the length of the text. For `'elementEnd'` it is `undefined`.\n */\n\n/**\n * Tree walking directions.\n *\n * @typedef {'forward'|'backward'} module:engine/view/treewalker~TreeWalkerDirection\n */","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/utils/deletecontent\n */\n\nimport LivePosition from '../liveposition';\nimport Range from '../range';\nimport DocumentSelection from '../documentselection';\n\n/**\n * Deletes content of the selection and merge siblings. The resulting selection is always collapsed.\n *\n * **Note:** Use {@link module:engine/model/model~Model#deleteContent} instead of this function.\n * This function is only exposed to be reusable in algorithms\n * which change the {@link module:engine/model/model~Model#deleteContent}\n * method's behavior.\n *\n * @param {module:engine/model/model~Model} model The model in context of which the insertion\n * should be performed.\n * @param {module:engine/model/selection~Selection|module:engine/model/documentselection~DocumentSelection} selection\n * Selection of which the content should be deleted.\n * @param {module:engine/model/batch~Batch} batch Batch to which the operations will be added.\n * @param {Object} [options]\n * @param {Boolean} [options.leaveUnmerged=false] Whether to merge elements after removing the content of the selection.\n *\n * For example `<heading>x[x</heading><paragraph>y]y</paragraph>` will become:\n *\n * * `<heading>x^y</heading>` with the option disabled (`leaveUnmerged == false`)\n * * `<heading>x^</heading><paragraph>y</paragraph>` with enabled (`leaveUnmerged == true`).\n *\n * Note: {@link module:engine/model/schema~Schema#isObject object} and {@link module:engine/model/schema~Schema#isLimit limit}\n * elements will not be merged.\n *\n * @param {Boolean} [options.doNotResetEntireContent=false] Whether to skip replacing the entire content with a\n * paragraph when the entire content was selected.\n *\n * For example `<heading>[x</heading><paragraph>y]</paragraph>` will become:\n *\n * * `<paragraph>^</paragraph>` with the option disabled (`doNotResetEntireContent == false`)\n * * `<heading>^</heading>` with enabled (`doNotResetEntireContent == true`).\n *\n * @param {Boolean} [options.doNotAutoparagraph=false] Whether to create a paragraph if after content deletion selection is moved\n * to a place where text cannot be inserted.\n *\n * For example `<paragraph>x</paragraph>[<image src=\"foo.jpg\"></image>]` will become:\n *\n * * `<paragraph>x</paragraph><paragraph>[]</paragraph>` with the option disabled (`doNotAutoparagraph == false`)\n * * `<paragraph>x[]</paragraph>` with the option enabled (`doNotAutoparagraph == true`).\n *\n * **Note:** if there is no valid position for the selection, the paragraph will always be created:\n *\n * `[<image src=\"foo.jpg\"></image>]` -> `<paragraph>[]</paragraph>`.\n */\nexport default function deleteContent(model, selection) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  if (selection.isCollapsed) {\n    return;\n  }\n  var selRange = selection.getFirstRange();\n\n  // If the selection is already removed, don't do anything.\n  if (selRange.root.rootName == '$graveyard') {\n    return;\n  }\n  var schema = model.schema;\n  model.change(function (writer) {\n    // 1. Replace the entire content with paragraph.\n    // See: https://github.com/ckeditor/ckeditor5-engine/issues/1012#issuecomment-315017594.\n    if (!options.doNotResetEntireContent && shouldEntireContentBeReplacedWithParagraph(schema, selection)) {\n      replaceEntireContentWithParagraph(writer, selection, schema);\n      return;\n    }\n    var startPos = selRange.start;\n    var endPos = LivePosition.fromPosition(selRange.end, 'toNext');\n\n    // 2. Remove the content if there is any.\n    if (!selRange.start.isTouching(selRange.end)) {\n      writer.remove(selRange);\n    }\n\n    // 3. Merge elements in the right branch to the elements in the left branch.\n    // The only reasonable (in terms of data and selection correctness) case in which we need to do that is:\n    //\n    // <heading type=1>Fo[</heading><paragraph>]ar</paragraph> => <heading type=1>Fo^ar</heading>\n    //\n    // However, the algorithm supports also merging deeper structures (up to the depth of the shallower branch),\n    // as it's hard to imagine what should actually be the default behavior. Usually, specific features will\n    // want to override that behavior anyway.\n    if (!options.leaveUnmerged) {\n      mergeBranches(writer, startPos, endPos);\n\n      // TMP this will be replaced with a postfixer.\n      // We need to check and strip disallowed attributes in all nested nodes because after merge\n      // some attributes could end up in a path where are disallowed.\n      //\n      // e.g. bold is disallowed for <H1>\n      // <h1>Fo{o</h1><p>b}a<b>r</b><p> -> <h1>Fo{}a<b>r</b><h1> -> <h1>Fo{}ar<h1>.\n      schema.removeDisallowedAttributes(startPos.parent.getChildren(), writer);\n    }\n    collapseSelectionAt(writer, selection, startPos);\n\n    // 4. Add a paragraph to set selection in it.\n    // Check if a text is allowed in the new container. If not, try to create a new paragraph (if it's allowed here).\n    if (shouldAutoparagraph(schema, startPos)) {\n      // If auto-paragraphing is off, find the closest valid selection range and collapse the selection there.\n      // If there is no valid selection range, create paragraph anyway and set selection there.\n      var validSelectionRange = schema.getNearestSelectionRange(startPos);\n      if (options.doNotAutoparagraph && validSelectionRange) {\n        collapseSelectionAt(writer, selection, validSelectionRange);\n      } else {\n        insertParagraph(writer, startPos, selection);\n      }\n    }\n    endPos.detach();\n  });\n}\n\n// This function is a result of reaching the Ballmer's peak for just the right amount of time.\n// Even I had troubles documenting it after a while and after reading it again I couldn't believe that it really works.\nfunction mergeBranches(writer, startPos, endPos) {\n  var startParent = startPos.parent;\n  var endParent = endPos.parent;\n\n  // If both positions ended up in the same parent, then there's nothing more to merge:\n  // <$root><p>x[]</p><p>{}y</p></$root> => <$root><p>xy</p>[]{}</$root>\n  if (startParent == endParent) {\n    return;\n  }\n\n  // If one of the positions is a limit element, then there's nothing to merge because we don't want to cross the limit boundaries.\n  if (writer.model.schema.isLimit(startParent) || writer.model.schema.isLimit(endParent)) {\n    return;\n  }\n\n  // Check if operations we'll need to do won't need to cross object or limit boundaries.\n  // E.g., we can't merge endParent into startParent in this case:\n  // <limit><startParent>x[]</startParent></limit><endParent>{}</endParent>\n  if (!checkCanBeMerged(startPos, endPos, writer.model.schema)) {\n    return;\n  }\n\n  // Remember next positions to merge. For example:\n  // <a><b>x[]</b></a><c><d>{}y</d></c>\n  // will become:\n  // <a><b>xy</b>[]</a><c>{}</c>\n  startPos = writer.createPositionAfter(startParent);\n  endPos = writer.createPositionBefore(endParent);\n  if (!endPos.isEqual(startPos)) {\n    // In this case, before we merge, we need to move `endParent` to the `startPos`:\n    // <a><b>x[]</b></a><c><d>{}y</d></c>\n    // becomes:\n    // <a><b>x</b>[]<d>y</d></a><c>{}</c>\n    writer.insert(endParent, startPos);\n  }\n\n  // Merge two siblings:\n  // <a>x</a>[]<b>y</b> -> <a>xy</a> (the usual case)\n  // <a><b>x</b>[]<d>y</d></a><c></c> -> <a><b>xy</b>[]</a><c></c> (this is the \"move parent\" case shown above)\n  writer.merge(startPos);\n\n  // Remove empty end ancestors:\n  // <a>fo[o</a><b><a><c>bar]</c></a></b>\n  // becomes:\n  // <a>fo[]</a><b><a>{}</a></b>\n  // So we can remove <a> and <b>.\n  while (endPos.parent.isEmpty) {\n    var parentToRemove = endPos.parent;\n    endPos = writer.createPositionBefore(parentToRemove);\n    writer.remove(parentToRemove);\n  }\n\n  // Continue merging next level.\n  mergeBranches(writer, startPos, endPos);\n}\nfunction shouldAutoparagraph(schema, position) {\n  var isTextAllowed = schema.checkChild(position, '$text');\n  var isParagraphAllowed = schema.checkChild(position, 'paragraph');\n  return !isTextAllowed && isParagraphAllowed;\n}\n\n// Check if parents of two positions can be merged by checking if there are no limit/object\n// boundaries between those two positions.\n//\n// E.g. in <bQ><p>x[]</p></bQ><widget><caption>{}</caption></widget>\n// we'll check <p>, <bQ>, <widget> and <caption>.\n// Usually, widget and caption are marked as objects/limits in the schema, so in this case merging will be blocked.\nfunction checkCanBeMerged(leftPos, rightPos, schema) {\n  var rangeToCheck = new Range(leftPos, rightPos);\n  var _iterator = _createForOfIteratorHelper(rangeToCheck.getWalker()),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var value = _step.value;\n      if (schema.isLimit(value.item)) {\n        return false;\n      }\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  return true;\n}\nfunction insertParagraph(writer, position, selection) {\n  var paragraph = writer.createElement('paragraph');\n  writer.insert(paragraph, position);\n  collapseSelectionAt(writer, selection, writer.createPositionAt(paragraph, 0));\n}\nfunction replaceEntireContentWithParagraph(writer, selection) {\n  var limitElement = writer.model.schema.getLimitElement(selection);\n  writer.remove(writer.createRangeIn(limitElement));\n  insertParagraph(writer, writer.createPositionAt(limitElement, 0), selection);\n}\n\n// We want to replace the entire content with a paragraph when:\n// * the entire content is selected,\n// * selection contains at least two elements,\n// * whether the paragraph is allowed in schema in the common ancestor.\nfunction shouldEntireContentBeReplacedWithParagraph(schema, selection) {\n  var limitElement = schema.getLimitElement(selection);\n  if (!selection.containsEntireContent(limitElement)) {\n    return false;\n  }\n  var range = selection.getFirstRange();\n  if (range.start.parent == range.end.parent) {\n    return false;\n  }\n  return schema.checkChild(limitElement, 'paragraph');\n}\n\n// Helper function that sets the selection. Depending whether given `selection` is a document selection or not,\n// uses a different method to set it.\nfunction collapseSelectionAt(writer, selection, positionOrRange) {\n  if (selection instanceof DocumentSelection) {\n    writer.setSelection(positionOrRange);\n  } else {\n    selection.setTo(positionOrRange);\n  }\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/utils/getselectedcontent\n */\n\n/**\n * Gets a clone of the selected content.\n *\n * For example, for the following selection:\n *\n * ```html\n * <p>x</p><quote><p>y</p><h>fir[st</h></quote><p>se]cond</p><p>z</p>\n * ```\n *\n * It will return a document fragment with such a content:\n *\n * ```html\n * <quote><h>st</h></quote><p>se</p>\n * ```\n *\n * @param {module:engine/model/model~Model} model The model in context of which\n * the selection modification should be performed.\n * @param {module:engine/model/selection~Selection|module:engine/model/documentselection~DocumentSelection} selection\n * The selection of which content will be returned.\n * @returns {module:engine/model/documentfragment~DocumentFragment}\n */\nexport default function getSelectedContent(model, selection) {\n  return model.change(function (writer) {\n    var frag = writer.createDocumentFragment();\n    var range = selection.getFirstRange();\n    if (!range || range.isCollapsed) {\n      return frag;\n    }\n    var root = range.start.root;\n    var commonPath = range.start.getCommonPath(range.end);\n    var commonParent = root.getNodeByPath(commonPath);\n\n    // ## 1st step\n    //\n    // First, we'll clone a fragment represented by a minimal flat range\n    // containing the original range to be cloned.\n    // E.g. let's consider such a range:\n    //\n    // <p>x</p><quote><p>y</p><h>fir[st</h></quote><p>se]cond</p><p>z</p>\n    //\n    // A minimal flat range containing this one is:\n    //\n    // <p>x</p>[<quote><p>y</p><h>first</h></quote><p>second</p>]<p>z</p>\n    //\n    // We can easily clone this structure, preserving e.g. the <quote> element.\n    var flatSubtreeRange;\n    if (range.start.parent == range.end.parent) {\n      // The original range is flat, so take it.\n      flatSubtreeRange = range;\n    } else {\n      flatSubtreeRange = writer.createRange(writer.createPositionAt(commonParent, range.start.path[commonPath.length]), writer.createPositionAt(commonParent, range.end.path[commonPath.length] + 1));\n    }\n    var howMany = flatSubtreeRange.end.offset - flatSubtreeRange.start.offset;\n\n    // Clone the whole contents.\n    var _iterator = _createForOfIteratorHelper(flatSubtreeRange.getItems({\n        shallow: true\n      })),\n      _step;\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var item = _step.value;\n        if (item.is('textProxy')) {\n          writer.appendText(item.data, item.getAttributes(), frag);\n        } else {\n          writer.append(item._clone(true), frag);\n        }\n      }\n\n      // ## 2nd step\n      //\n      // If the original range wasn't flat, then we need to remove the excess nodes from the both ends of the cloned fragment.\n      //\n      // For example, for the range shown in the 1st step comment, we need to remove these pieces:\n      //\n      // <quote>[<p>y</p>]<h>[fir]st</h></quote><p>se[cond]</p>\n      //\n      // So this will be the final copied content:\n      //\n      // <quote><h>st</h></quote><p>se</p>\n      //\n      // In order to do that, we remove content from these two ranges:\n      //\n      // [<quote><p>y</p><h>fir]st</h></quote><p>se[cond</p>]\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n    if (flatSubtreeRange != range) {\n      // Find the position of the original range in the cloned fragment.\n      var newRange = range._getTransformedByMove(flatSubtreeRange.start, writer.createPositionAt(frag, 0), howMany)[0];\n      var leftExcessRange = writer.createRange(writer.createPositionAt(frag, 0), newRange.start);\n      var rightExcessRange = writer.createRange(newRange.end, writer.createPositionAt(frag, 'end'));\n      removeRangeContent(rightExcessRange, writer);\n      removeRangeContent(leftExcessRange, writer);\n    }\n    return frag;\n  });\n}\n\n// After https://github.com/ckeditor/ckeditor5-engine/issues/690 is fixed,\n// this function will, most likely, be able to rewritten using getMinimalFlatRanges().\nfunction removeRangeContent(range, writer) {\n  var parentsToCheck = [];\n  Array.from(range.getItems({\n    direction: 'backward'\n  }))\n  // We should better store ranges because text proxies will lose integrity\n  // with the text nodes when we'll start removing content.\n  .map(function (item) {\n    return writer.createRangeOn(item);\n  })\n  // Filter only these items which are fully contained in the passed range.\n  //\n  // E.g. for the following range: [<quote><p>y</p><h>fir]st</h>\n  // the walker will return the entire <h> element, when only the \"fir\" item inside it is fully contained.\n  .filter(function (itemRange) {\n    // We should be able to use Range.containsRange, but https://github.com/ckeditor/ckeditor5-engine/issues/691.\n    var contained = (itemRange.start.isAfter(range.start) || itemRange.start.isEqual(range.start)) && (itemRange.end.isBefore(range.end) || itemRange.end.isEqual(range.end));\n    return contained;\n  }).forEach(function (itemRange) {\n    parentsToCheck.push(itemRange.start.parent);\n    writer.remove(itemRange);\n  });\n\n  // Remove ancestors of the removed items if they turned to be empty now\n  // (their whole content was contained in the range).\n  parentsToCheck.forEach(function (parentToCheck) {\n    var parent = parentToCheck;\n    while (parent.parent && parent.isEmpty) {\n      var removeRange = writer.createRangeOn(parent);\n      parent = parent.parent;\n      writer.remove(removeRange);\n    }\n  });\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/utils/insertcontent\n */\n\nimport Position from '../position';\nimport LivePosition from '../liveposition';\nimport Element from '../element';\nimport Range from '../range';\nimport DocumentSelection from '../documentselection';\nimport Selection from '../selection';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * Inserts content into the editor (specified selection) as one would expect the paste\n * functionality to work.\n *\n * If an instance of {@link module:engine/model/selection~Selection} is passed as `selectable` it will be modified\n * to the insertion selection (equal to a range to be selected after insertion).\n *\n * If `selectable` is not passed, the content will be inserted using the current selection of the model document.\n *\n * **Note:** Use {@link module:engine/model/model~Model#insertContent} instead of this function.\n * This function is only exposed to be reusable in algorithms which change the {@link module:engine/model/model~Model#insertContent}\n * method's behavior.\n *\n * @param {module:engine/model/model~Model} model The model in context of which the insertion\n * should be performed.\n * @param {module:engine/model/documentfragment~DocumentFragment|module:engine/model/item~Item} content The content to insert.\n * @param {module:engine/model/selection~Selectable} [selectable=model.document.selection]\n * Selection into which the content should be inserted.\n * @param {Number|'before'|'end'|'after'|'on'|'in'} [placeOrOffset] Sets place or offset of the selection.\n * @returns {module:engine/model/range~Range} Range which contains all the performed changes. This is a range that, if removed,\n * would return the model to the state before the insertion. If no changes were preformed by `insertContent`, returns a range collapsed\n * at the insertion position.\n */\nexport default function insertContent(model, content, selectable, placeOrOffset) {\n  return model.change(function (writer) {\n    var selection;\n    if (!selectable) {\n      selection = model.document.selection;\n    } else if (selectable instanceof Selection || selectable instanceof DocumentSelection) {\n      selection = selectable;\n    } else {\n      selection = writer.createSelection(selectable, placeOrOffset);\n    }\n    var insertionPosition = selection.getFirstPosition();\n    if (!selection.isCollapsed) {\n      model.deleteContent(selection, {\n        doNotAutoparagraph: true\n      });\n    }\n    var insertion = new Insertion(model, writer, insertionPosition);\n    var nodesToInsert;\n    if (content.is('documentFragment')) {\n      nodesToInsert = content.getChildren();\n    } else {\n      nodesToInsert = [content];\n    }\n    insertion.handleNodes(nodesToInsert, {\n      // The set of children being inserted is the only set in this context\n      // so it's the first and last (it's a hack ;)).\n      isFirst: true,\n      isLast: true\n    });\n    var newRange = insertion.getSelectionRange();\n\n    /* istanbul ignore else */\n    if (newRange) {\n      if (selection instanceof DocumentSelection) {\n        writer.setSelection(newRange);\n      } else {\n        selection.setTo(newRange);\n      }\n    } else {\n      // We are not testing else because it's a safe check for unpredictable edge cases:\n      // an insertion without proper range to select.\n      //\n      // @if CK_DEBUG // console.warn( 'Cannot determine a proper selection range after insertion.' );\n    }\n    var affectedRange = insertion.getAffectedRange() || model.createRange(insertionPosition);\n    insertion.destroy();\n    return affectedRange;\n  });\n}\n\n/**\n * Utility class for performing content insertion.\n *\n * @private\n */\nvar Insertion = /*#__PURE__*/function () {\n  function Insertion(model, writer, position) {\n    _classCallCheck(this, Insertion);\n    /**\n     * The model in context of which the insertion should be performed.\n     *\n     * @member {module:engine/model~Model} #model\n     */\n    this.model = model;\n\n    /**\n     * Batch to which operations will be added.\n     *\n     * @member {module:engine/controller/writer~Batch} #writer\n     */\n    this.writer = writer;\n\n    /**\n     * The position at which (or near which) the next node will be inserted.\n     *\n     * @member {module:engine/model/position~Position} #position\n     */\n    this.position = position;\n\n    /**\n     * Elements with which the inserted elements can be merged.\n     *\n     *\t\t<p>x^</p><p>y</p> + <p>z</p> (can merge to <p>x</p>)\n     *\t\t<p>x</p><p>^y</p> + <p>z</p> (can merge to <p>y</p>)\n     *\t\t<p>x^y</p> + <p>z</p> (can merge to <p>xy</p> which will be split during the action,\n     *\t\t\t\t\t\t\t\tso both its pieces will be added to this set)\n     *\n     *\n     * @member {Set} #canMergeWith\n     */\n    this.canMergeWith = new Set([this.position.parent]);\n\n    /**\n     * Schema of the model.\n     *\n     * @member {module:engine/model/schema~Schema} #schema\n     */\n    this.schema = model.schema;\n    this._filterAttributesOf = [];\n\n    /**\n     * Beginning of the affected range. See {@link module:engine/model/utils/insertcontent~Insertion#getAffectedRange}.\n     *\n     * @private\n     * @member {module:engine/model/liveposition~LivePosition|null} #_affectedStart\n     */\n    this._affectedStart = null;\n\n    /**\n     * End of the affected range. See {@link module:engine/model/utils/insertcontent~Insertion#getAffectedRange}.\n     *\n     * @private\n     * @member {module:engine/model/liveposition~LivePosition|null} #_affectedEnd\n     */\n    this._affectedEnd = null;\n  }\n\n  /**\n   * Handles insertion of a set of nodes.\n   *\n   * @param {Iterable.<module:engine/model/node~Node>} nodes Nodes to insert.\n   * @param {Object} parentContext Context in which parent of these nodes was supposed to be inserted.\n   * If the parent context is passed it means that the parent element was stripped (was not allowed).\n   */\n  return _createClass(Insertion, [{\n    key: \"handleNodes\",\n    value: function handleNodes(nodes, parentContext) {\n      nodes = Array.from(nodes);\n      for (var i = 0; i < nodes.length; i++) {\n        var node = nodes[i];\n        this._handleNode(node, {\n          isFirst: i === 0 && parentContext.isFirst,\n          isLast: i === nodes.length - 1 && parentContext.isLast\n        });\n      }\n\n      // TMP this will become a post-fixer.\n      this.schema.removeDisallowedAttributes(this._filterAttributesOf, this.writer);\n      this._filterAttributesOf = [];\n    }\n\n    /**\n     * Returns range to be selected after insertion.\n     * Returns `null` if there is no valid range to select after insertion.\n     *\n     * @returns {module:engine/model/range~Range|null}\n     */\n  }, {\n    key: \"getSelectionRange\",\n    value: function getSelectionRange() {\n      if (this.nodeToSelect) {\n        return Range._createOn(this.nodeToSelect);\n      }\n      return this.model.schema.getNearestSelectionRange(this.position);\n    }\n\n    /**\n     * Returns a range which contains all the performed changes. This is a range that, if removed, would return the model to the state\n     * before the insertion. Returns `null` if no changes were done.\n     *\n     * @returns {module:engine/model/range~Range|null}\n     */\n  }, {\n    key: \"getAffectedRange\",\n    value: function getAffectedRange() {\n      if (!this._affectedStart) {\n        return null;\n      }\n      return new Range(this._affectedStart, this._affectedEnd);\n    }\n\n    /**\n     * Destroys `Insertion` instance.\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this._affectedStart) {\n        this._affectedStart.detach();\n      }\n      if (this._affectedEnd) {\n        this._affectedEnd.detach();\n      }\n    }\n\n    /**\n     * Handles insertion of a single node.\n     *\n     * @private\n     * @param {module:engine/model/node~Node} node\n     * @param {Object} context\n     * @param {Boolean} context.isFirst Whether the given node is the first one in the content to be inserted.\n     * @param {Boolean} context.isLast Whether the given node is the last one in the content to be inserted.\n     */\n  }, {\n    key: \"_handleNode\",\n    value: function _handleNode(node, context) {\n      // Let's handle object in a special way.\n      // * They should never be merged with other elements.\n      // * If they are not allowed in any of the selection ancestors, they could be either autoparagraphed or totally removed.\n      if (this.schema.isObject(node)) {\n        this._handleObject(node, context);\n        return;\n      }\n\n      // Try to find a place for the given node.\n      // Split the position.parent's branch up to a point where the node can be inserted.\n      // If it isn't allowed in the whole branch, then of course don't split anything.\n      var isAllowed = this._checkAndSplitToAllowedPosition(node, context);\n      if (!isAllowed) {\n        this._handleDisallowedNode(node, context);\n        return;\n      }\n      this._insert(node);\n\n      // After the node was inserted we may try to merge it with its siblings.\n      // This should happen only if it was the first and/or last of the nodes (so only with boundary nodes)\n      // and only if the selection was in those elements initially.\n      //\n      // E.g.:\n      // <p>x^</p> + <p>y</p> => <p>x</p><p>y</p> => <p>xy[]</p>\n      // and:\n      // <p>x^y</p> + <p>z</p> => <p>x</p>^<p>y</p> + <p>z</p> => <p>x</p><p>z</p><p>y</p> => <p>xz[]y</p>\n      // but:\n      // <p>x</p><p>^</p><p>z</p> + <p>y</p> => <p>x</p><p>y</p><p>z</p> (no merging)\n      // <p>x</p>[<img>]<p>z</p> + <p>y</p> => <p>x</p><p>y</p><p>z</p> (no merging, note: after running deleteContents\n      //\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t it's exactly the same case as above)\n      this._mergeSiblingsOf(node, context);\n    }\n\n    /**\n     * @private\n     * @param {module:engine/model/element~Element} node The object element.\n     * @param {Object} context\n     */\n  }, {\n    key: \"_handleObject\",\n    value: function _handleObject(node, context) {\n      // Try finding it a place in the tree.\n      if (this._checkAndSplitToAllowedPosition(node)) {\n        this._insert(node);\n      }\n      // Try autoparagraphing.\n      else {\n        this._tryAutoparagraphing(node, context);\n      }\n    }\n\n    /**\n     * @private\n     * @param {module:engine/model/node~Node} node The disallowed node which needs to be handled.\n     * @param {Object} context\n     */\n  }, {\n    key: \"_handleDisallowedNode\",\n    value: function _handleDisallowedNode(node, context) {\n      // If the node is an element, try inserting its children (strip the parent).\n      if (node.is('element')) {\n        this.handleNodes(node.getChildren(), context);\n      }\n      // If text is not allowed, try autoparagraphing it.\n      else {\n        this._tryAutoparagraphing(node, context);\n      }\n    }\n\n    /**\n     * @private\n     * @param {module:engine/model/node~Node} node The node to insert.\n     */\n  }, {\n    key: \"_insert\",\n    value: function _insert(node) {\n      /* istanbul ignore if */\n      if (!this.schema.checkChild(this.position, node)) {\n        // Algorithm's correctness check. We should never end up here but it's good to know that we did.\n        // Note that it would often be a silent issue if we insert node in a place where it's not allowed.\n\n        /**\n         * Given node cannot be inserted on the given position.\n         *\n         * @error insertcontent-wrong-position\n         * @param {module:engine/model/node~Node} node Node to insert.\n         * @param {module:engine/model/position~Position} position Position to insert the node at.\n         */\n        throw new CKEditorError('insertcontent-wrong-position: Given node cannot be inserted on the given position.', this, {\n          node: node,\n          position: this.position\n        });\n      }\n      var livePos = LivePosition.fromPosition(this.position, 'toNext');\n      this._setAffectedBoundaries(this.position);\n      this.writer.insert(node, this.position);\n      this.position = livePos.toPosition();\n      livePos.detach();\n\n      // The last inserted object should be selected because we can't put a collapsed selection after it.\n      if (this.schema.isObject(node) && !this.schema.checkChild(this.position, '$text')) {\n        this.nodeToSelect = node;\n      } else {\n        this.nodeToSelect = null;\n      }\n      this._filterAttributesOf.push(node);\n    }\n\n    /**\n     * Sets `_affectedStart` and `_affectedEnd` to the given `position`. Should be used before a change is done during insertion process to\n     * mark the affected range.\n     *\n     * This method is used before inserting a node or splitting a parent node. `_affectedStart` and `_affectedEnd` are also changed\n     * during merging, but the logic there is more complicated so it is left out of this function.\n     *\n     * @private\n     * @param {module:engine/model/position~Position} position\n     */\n  }, {\n    key: \"_setAffectedBoundaries\",\n    value: function _setAffectedBoundaries(position) {\n      // Set affected boundaries stickiness so that those position will \"expand\" when something is inserted in between them:\n      // <paragraph>Foo][bar</paragraph> -> <paragraph>Foo]xx[bar</paragraph>\n      // This is why it cannot be a range but two separate positions.\n      if (!this._affectedStart) {\n        this._affectedStart = LivePosition.fromPosition(position, 'toPrevious');\n      }\n\n      // If `_affectedEnd` is before the new boundary position, expand `_affectedEnd`. This can happen if first inserted node was\n      // inserted into the parent but the next node is moved-out of that parent:\n      // (1) <paragraph>Foo][</paragraph> -> <paragraph>Foo]xx[</paragraph>\n      // (2) <paragraph>Foo]xx[</paragraph> -> <paragraph>Foo]xx</paragraph><widget></widget>[\n      if (!this._affectedEnd || this._affectedEnd.isBefore(position)) {\n        if (this._affectedEnd) {\n          this._affectedEnd.detach();\n        }\n        this._affectedEnd = LivePosition.fromPosition(position, 'toNext');\n      }\n    }\n\n    /**\n     * @private\n     * @param {module:engine/model/node~Node} node The node which could potentially be merged.\n     * @param {Object} context\n     */\n  }, {\n    key: \"_mergeSiblingsOf\",\n    value: function _mergeSiblingsOf(node, context) {\n      if (!(node instanceof Element)) {\n        return;\n      }\n      var mergeLeft = this._canMergeLeft(node, context);\n      var mergeRight = this._canMergeRight(node, context);\n      var mergePosLeft = LivePosition._createBefore(node);\n      mergePosLeft.stickiness = 'toNext';\n      var mergePosRight = LivePosition._createAfter(node);\n      mergePosRight.stickiness = 'toNext';\n      if (mergeLeft) {\n        var livePosition = LivePosition.fromPosition(this.position);\n        livePosition.stickiness = 'toNext';\n\n        // If `_affectedStart` is sames as merge position, it means that the element \"marked\" by `_affectedStart` is going to be\n        // removed and its contents will be moved. This won't transform `LivePosition` so `_affectedStart` needs to be moved\n        // by hand to properly reflect affected range. (Due to `_affectedStart` and `_affectedEnd` stickiness, the \"range\" is\n        // shown as `][`).\n        //\n        // Example - insert `<paragraph>Abc</paragraph><paragraph>Xyz</paragraph>` at the end of `<paragraph>Foo^</paragraph>`:\n        //\n        // <paragraph>Foo</paragraph><paragraph>Bar</paragraph>   -->\n        // <paragraph>Foo</paragraph>]<paragraph>Abc</paragraph><paragraph>Xyz</paragraph>[<paragraph>Bar</paragraph>   -->\n        // <paragraph>Foo]Abc</paragraph><paragraph>Xyz</paragraph>[<paragraph>Bar</paragraph>\n        //\n        // Note, that if we are here then something must have been inserted, so `_affectedStart` and `_affectedEnd` have to be set.\n        if (this._affectedStart.isEqual(mergePosLeft)) {\n          this._affectedStart.detach();\n          this._affectedStart = LivePosition._createAt(mergePosLeft.nodeBefore, 'end', 'toPrevious');\n        }\n        this.writer.merge(mergePosLeft);\n\n        // If only one element (the merged one) is in the \"affected range\", also move the affected range end appropriately.\n        //\n        // Example - insert `<paragraph>Abc</paragraph>` at the of `<paragraph>Foo^</paragraph>`:\n        //\n        // <paragraph>Foo</paragraph><paragraph>Bar</paragraph>   -->\n        // <paragraph>Foo</paragraph>]<paragraph>Abc</paragraph>[<paragraph>Bar</paragraph>   -->\n        // <paragraph>Foo]Abc</paragraph>[<paragraph>Bar</paragraph>   -->\n        // <paragraph>Foo]Abc[</paragraph><paragraph>Bar</paragraph>\n        if (mergePosLeft.isEqual(this._affectedEnd) && context.isLast) {\n          this._affectedEnd.detach();\n          this._affectedEnd = LivePosition._createAt(mergePosLeft.nodeBefore, 'end', 'toNext');\n        }\n        this.position = livePosition.toPosition();\n        livePosition.detach();\n      }\n      if (mergeRight) {\n        /* istanbul ignore if */\n        if (!this.position.isEqual(mergePosRight)) {\n          // Algorithm's correctness check. We should never end up here but it's good to know that we did.\n          // At this point the insertion position should be after the node we'll merge. If it isn't,\n          // it should need to be secured as in the left merge case.\n          /**\n           * An internal error occured during merging insertion content with siblings.\n           * The insertion position should equal to the merge position.\n           *\n           * @error insertcontent-invalid-insertion-position\n           */\n          throw new CKEditorError('insertcontent-invalid-insertion-position', this);\n        }\n\n        // Move the position to the previous node, so it isn't moved to the graveyard on merge.\n        // <p>x</p>[]<p>y</p> => <p>x[]</p><p>y</p>\n        this.position = Position._createAt(mergePosRight.nodeBefore, 'end');\n\n        // OK:  <p>xx[]</p> + <p>yy</p> => <p>xx[]yy</p> (when sticks to previous)\n        // NOK: <p>xx[]</p> + <p>yy</p> => <p>xxyy[]</p> (when sticks to next)\n        var _livePosition = LivePosition.fromPosition(this.position, 'toPrevious');\n\n        // See comment above on moving `_affectedStart`.\n        if (this._affectedEnd.isEqual(mergePosRight)) {\n          this._affectedEnd.detach();\n          this._affectedEnd = LivePosition._createAt(mergePosRight.nodeBefore, 'end', 'toNext');\n        }\n        this.writer.merge(mergePosRight);\n\n        // See comment above on moving `_affectedStart`.\n        if (mergePosRight.getShiftedBy(-1).isEqual(this._affectedStart) && context.isFirst) {\n          this._affectedStart.detach();\n          this._affectedStart = LivePosition._createAt(mergePosRight.nodeBefore, 0, 'toPrevious');\n        }\n        this.position = _livePosition.toPosition();\n        _livePosition.detach();\n      }\n      if (mergeLeft || mergeRight) {\n        // After merge elements that were marked by _insert() to be filtered might be gone so\n        // we need to mark the new container.\n        this._filterAttributesOf.push(this.position.parent);\n      }\n      mergePosLeft.detach();\n      mergePosRight.detach();\n    }\n\n    /**\n     * Checks whether specified node can be merged with previous sibling element.\n     *\n     * @private\n     * @param {module:engine/model/node~Node} node The node which could potentially be merged.\n     * @param {Object} context\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"_canMergeLeft\",\n    value: function _canMergeLeft(node, context) {\n      var previousSibling = node.previousSibling;\n      return context.isFirst && previousSibling instanceof Element && this.canMergeWith.has(previousSibling) && this.model.schema.checkMerge(previousSibling, node);\n    }\n\n    /**\n     * Checks whether specified node can be merged with next sibling element.\n     *\n     * @private\n     * @param {module:engine/model/node~Node} node The node which could potentially be merged.\n     * @param {Object} context\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"_canMergeRight\",\n    value: function _canMergeRight(node, context) {\n      var nextSibling = node.nextSibling;\n      return context.isLast && nextSibling instanceof Element && this.canMergeWith.has(nextSibling) && this.model.schema.checkMerge(node, nextSibling);\n    }\n\n    /**\n     * Tries wrapping the node in a new paragraph and inserting it this way.\n     *\n     * @private\n     * @param {module:engine/model/node~Node} node The node which needs to be autoparagraphed.\n     * @param {Object} context\n     */\n  }, {\n    key: \"_tryAutoparagraphing\",\n    value: function _tryAutoparagraphing(node, context) {\n      var paragraph = this.writer.createElement('paragraph');\n\n      // Do not autoparagraph if the paragraph won't be allowed there,\n      // cause that would lead to an infinite loop. The paragraph would be rejected in\n      // the next _handleNode() call and we'd be here again.\n      if (this._getAllowedIn(paragraph, this.position.parent) && this.schema.checkChild(paragraph, node)) {\n        paragraph._appendChild(node);\n        this._handleNode(paragraph, context);\n      }\n    }\n\n    /**\n     * @private\n     * @param {module:engine/model/node~Node} node\n     * @returns {Boolean} Whether an allowed position was found.\n     * `false` is returned if the node isn't allowed at any position up in the tree, `true` if was.\n     */\n  }, {\n    key: \"_checkAndSplitToAllowedPosition\",\n    value: function _checkAndSplitToAllowedPosition(node) {\n      var allowedIn = this._getAllowedIn(node, this.position.parent);\n      if (!allowedIn) {\n        return false;\n      }\n      while (allowedIn != this.position.parent) {\n        // If a parent which we'd need to leave is a limit element, break.\n        if (this.schema.isLimit(this.position.parent)) {\n          return false;\n        }\n        if (this.position.isAtStart) {\n          // If insertion position is at the beginning of the parent, move it out instead of splitting.\n          // <p>^Foo</p> -> ^<p>Foo</p>\n          var parent = this.position.parent;\n          this.position = this.writer.createPositionBefore(parent);\n\n          // Special case – parent is empty (<p>^</p>).\n          //\n          // 1. parent.isEmpty\n          // We can remove the element after moving insertion position out of it.\n          //\n          // 2. parent.parent === allowedIn\n          // However parent should remain in place when allowed element is above limit element in document tree.\n          // For example there shouldn't be allowed to remove empty paragraph from tableCell, when is pasted\n          // content allowed in $root.\n          if (parent.isEmpty && parent.parent === allowedIn) {\n            this.writer.remove(parent);\n          }\n        } else if (this.position.isAtEnd) {\n          // If insertion position is at the end of the parent, move it out instead of splitting.\n          // <p>Foo^</p> -> <p>Foo</p>^\n          this.position = this.writer.createPositionAfter(this.position.parent);\n        } else {\n          var tempPos = this.writer.createPositionAfter(this.position.parent);\n          this._setAffectedBoundaries(this.position);\n          this.writer.split(this.position);\n          this.position = tempPos;\n          this.canMergeWith.add(this.position.nodeAfter);\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Gets the element in which the given node is allowed. It checks the passed element and all its ancestors.\n     *\n     * @private\n     * @param {module:engine/model/node~Node} node The node to check.\n     * @param {module:engine/model/element~Element} element The element in which the node's correctness should be checked.\n     * @returns {module:engine/model/element~Element|null}\n     */\n  }, {\n    key: \"_getAllowedIn\",\n    value: function _getAllowedIn(node, element) {\n      if (this.schema.checkChild(element, node)) {\n        return element;\n      }\n      if (element.parent) {\n        return this._getAllowedIn(node, element.parent);\n      }\n      return null;\n    }\n  }]);\n}();","import \"core-js/modules/es.string.includes.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/utils/modifyselection\n */\n\nimport Position from '../position';\nimport TreeWalker from '../treewalker';\nimport Range from '../range';\nimport { isInsideSurrogatePair, isInsideCombinedSymbol } from '@ckeditor/ckeditor5-utils/src/unicode';\nimport DocumentSelection from '../documentselection';\nvar wordBoundaryCharacters = ' ,.?!:;\"-()';\n\n/**\n * Modifies the selection. Currently, the supported modifications are:\n *\n * * Extending. The selection focus is moved in the specified `options.direction` with a step specified in `options.unit`.\n * Possible values for `unit` are:\n *  * `'character'` (default) - moves selection by one user-perceived character. In most cases this means moving by one\n *  character in `String` sense. However, unicode also defines \"combing marks\". These are special symbols, that combines\n *  with a symbol before it (\"base character\") to create one user-perceived character. For example, `q̣̇` is a normal\n *  letter `q` with two \"combining marks\": upper dot (`Ux0307`) and lower dot (`Ux0323`). For most actions, i.e. extending\n *  selection by one position, it is correct to include both \"base character\" and all of it's \"combining marks\". That is\n *  why `'character'` value is most natural and common method of modifying selection.\n *  * `'codePoint'` - moves selection by one unicode code point. In contrary to, `'character'` unit, this will insert\n *  selection between \"base character\" and \"combining mark\", because \"combining marks\" have their own unicode code points.\n *  However, for technical reasons, unicode code points with values above `UxFFFF` are represented in native `String` by\n *  two characters, called \"surrogate pairs\". Halves of \"surrogate pairs\" have a meaning only when placed next to each other.\n *  For example `𨭎` is represented in `String` by `\\uD862\\uDF4E`. Both `\\uD862` and `\\uDF4E` do not have any meaning\n *  outside the pair (are rendered as ? when alone). Position between them would be incorrect. In this case, selection\n *  extension will include whole \"surrogate pair\".\n *  * `'word'` - moves selection by a whole word.\n *\n * **Note:** if you extend a forward selection in a backward direction you will in fact shrink it.\n *\n * **Note:** Use {@link module:engine/model/model~Model#modifySelection} instead of this function.\n * This function is only exposed to be reusable in algorithms\n * which change the {@link module:engine/model/model~Model#modifySelection}\n * method's behavior.\n *\n * @param {module:engine/model/model~Model} model The model in context of which\n * the selection modification should be performed.\n * @param {module:engine/model/selection~Selection|module:engine/model/documentselection~DocumentSelection} selection\n * The selection to modify.\n * @param {Object} [options]\n * @param {'forward'|'backward'} [options.direction='forward'] The direction in which the selection should be modified.\n * @param {'character'|'codePoint'|'word'} [options.unit='character'] The unit by which selection should be modified.\n */\nexport default function modifySelection(model, selection) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var schema = model.schema;\n  var isForward = options.direction != 'backward';\n  var unit = options.unit ? options.unit : 'character';\n  var focus = selection.focus;\n  var walker = new TreeWalker({\n    boundaries: getSearchRange(focus, isForward),\n    singleCharacters: true,\n    direction: isForward ? 'forward' : 'backward'\n  });\n  var data = {\n    walker: walker,\n    schema: schema,\n    isForward: isForward,\n    unit: unit\n  };\n  var next;\n  var _loop = function _loop() {\n      if (next.done) {\n        return {\n          v: void 0\n        };\n      }\n      var position = tryExtendingTo(data, next.value);\n      if (position) {\n        if (selection instanceof DocumentSelection) {\n          model.change(function (writer) {\n            writer.setSelectionFocus(position);\n          });\n        } else {\n          selection.setFocus(position);\n        }\n        return {\n          v: void 0\n        };\n      }\n    },\n    _ret;\n  while (next = walker.next()) {\n    _ret = _loop();\n    if (_ret) return _ret.v;\n  }\n}\n\n// Checks whether the selection can be extended to the the walker's next value (next position).\n// @param {{ walker, unit, isForward, schema }} data\n// @param {module:engine/view/treewalker~TreeWalkerValue} value\nfunction tryExtendingTo(data, value) {\n  // If found text, we can certainly put the focus in it. Let's just find a correct position\n  // based on the unit.\n  if (value.type == 'text') {\n    if (data.unit === 'word') {\n      return getCorrectWordBreakPosition(data.walker, data.isForward);\n    }\n    return getCorrectPosition(data.walker, data.unit, data.isForward);\n  }\n\n  // Entering an element.\n  if (value.type == (data.isForward ? 'elementStart' : 'elementEnd')) {\n    // If it's an object, we can select it now.\n    if (data.schema.isObject(value.item)) {\n      return Position._createAt(value.item, data.isForward ? 'after' : 'before');\n    }\n\n    // If text allowed on this position, extend to this place.\n    if (data.schema.checkChild(value.nextPosition, '$text')) {\n      return value.nextPosition;\n    }\n  }\n  // Leaving an element.\n  else {\n    // If leaving a limit element, stop.\n    if (data.schema.isLimit(value.item)) {\n      // NOTE: Fast-forward the walker until the end.\n      data.walker.skip(function () {\n        return true;\n      });\n      return;\n    }\n\n    // If text allowed on this position, extend to this place.\n    if (data.schema.checkChild(value.nextPosition, '$text')) {\n      return value.nextPosition;\n    }\n  }\n}\n\n// Finds a correct position by walking in a text node and checking whether selection can be extended to given position\n// or should be extended further.\n//\n// @param {module:engine/model/treewalker~TreeWalker} walker\n// @param {String} unit The unit by which selection should be modified.\nfunction getCorrectPosition(walker, unit) {\n  var textNode = walker.position.textNode;\n  if (textNode) {\n    var data = textNode.data;\n    var offset = walker.position.offset - textNode.startOffset;\n    while (isInsideSurrogatePair(data, offset) || unit == 'character' && isInsideCombinedSymbol(data, offset)) {\n      walker.next();\n      offset = walker.position.offset - textNode.startOffset;\n    }\n  }\n  return walker.position;\n}\n\n// Finds a correct position of a word break by walking in a text node and checking whether selection can be extended to given position\n// or should be extended further.\n//\n// @param {module:engine/model/treewalker~TreeWalker} walker\n// @param {Boolean} isForward Is the direction in which the selection should be modified is forward.\nfunction getCorrectWordBreakPosition(walker, isForward) {\n  var textNode = walker.position.textNode;\n  if (textNode) {\n    var offset = walker.position.offset - textNode.startOffset;\n    while (!isAtWordBoundary(textNode.data, offset, isForward) && !isAtNodeBoundary(textNode, offset, isForward)) {\n      walker.next();\n\n      // Check of adjacent text nodes with different attributes (like BOLD).\n      // Example          : 'foofoo []bar<$text bold=\"true\">bar</$text> bazbaz'\n      // should expand to : 'foofoo [bar<$text bold=\"true\">bar</$text>] bazbaz'.\n      var nextNode = isForward ? walker.position.nodeAfter : walker.position.nodeBefore;\n\n      // Scan only text nodes. Ignore inline elements (like `<softBreak>`).\n      if (nextNode && nextNode.is('text')) {\n        // Check boundary char of an adjacent text node.\n        var boundaryChar = nextNode.data.charAt(isForward ? 0 : nextNode.data.length - 1);\n\n        // Go to the next node if the character at the boundary of that node belongs to the same word.\n        if (!wordBoundaryCharacters.includes(boundaryChar)) {\n          // If adjacent text node belongs to the same word go to it & reset values.\n          walker.next();\n          textNode = walker.position.textNode;\n        }\n      }\n      offset = walker.position.offset - textNode.startOffset;\n    }\n  }\n  return walker.position;\n}\nfunction getSearchRange(start, isForward) {\n  var root = start.root;\n  var searchEnd = Position._createAt(root, isForward ? 'end' : 0);\n  if (isForward) {\n    return new Range(start, searchEnd);\n  } else {\n    return new Range(searchEnd, start);\n  }\n}\n\n// Checks if selection is on word boundary.\n//\n// @param {String} data The text node value to investigate.\n// @param {Number} offset Position offset.\n// @param {Boolean} isForward Is the direction in which the selection should be modified is forward.\nfunction isAtWordBoundary(data, offset, isForward) {\n  // The offset to check depends on direction.\n  var offsetToCheck = offset + (isForward ? 0 : -1);\n  return wordBoundaryCharacters.includes(data.charAt(offsetToCheck));\n}\n\n// Checks if selection is on node boundary.\n//\n// @param {module:engine/model/text~Text} textNode The text node to investigate.\n// @param {Number} offset Position offset.\n// @param {Boolean} isForward Is the direction in which the selection should be modified is forward.\nfunction isAtNodeBoundary(textNode, offset, isForward) {\n  return offset === (isForward ? textNode.endOffset : 0);\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport \"core-js/modules/es.array.push.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/utils/selection-post-fixer\n */\n\nimport Range from '../range';\nimport Position from '../position';\n\n/**\n * Injects selection post-fixer to the model.\n *\n * The role of the selection post-fixer is to ensure that the selection is in a correct place\n * after a {@link module:engine/model/model~Model#change `change()`} block was executed.\n *\n * The correct position means that:\n *\n * * All collapsed selection ranges are in a place where the {@link module:engine/model/schema~Schema}\n * allows a `$text`.\n * * None of the selection's non-collapsed ranges crosses a {@link module:engine/model/schema~Schema#isLimit limit element}\n * boundary (a range must be rooted within one limit element).\n * * Only {@link module:engine/model/schema~Schema#isObject object elements} can be selected from the outside\n * (e.g. `[<paragraph>foo</paragraph>]` is invalid). This rule applies independently to both selection ends, so this\n * selection is correct: `<paragraph>f[oo</paragraph><image></image>]`.\n *\n * If the position is not correct, the post-fixer will automatically correct it.\n *\n * ## Fixing a non-collapsed selection\n *\n * See as an example a selection that starts in a P1 element and ends inside the text of a TD element\n * (`[` and `]` are range boundaries and `(l)` denotes an element defined as `isLimit=true`):\n *\n *\t\troot\n *\t\t |- element P1\n *\t\t |   |- \"foo\"                                      root\n *\t\t |- element TABLE (l)                   P1         TABLE             P2\n *\t\t |   |- element TR (l)                 f o[o     TR      TR         b a r\n *\t\t |   |   |- element TD (l)                       TD      TD\n *\t\t |   |       |- \"aaa\"                          a]a a    b b b\n *\t\t |   |- element TR (l)\n *\t\t |   |   |- element TD (l)                           ||\n *\t\t |   |       |- \"bbb\"                                ||\n *\t\t |- element P2                                       VV\n *\t\t |   |- \"bar\"\n *\t\t                                                   root\n *\t\t                                        P1         TABLE]            P2\n *\t\t                                       f o[o     TR      TR         b a r\n *\t\t                                                 TD      TD\n *\t\t                                               a a a    b b b\n *\n * In the example above, the TABLE, TR and TD are defined as `isLimit=true` in the schema. The range which is not contained within\n * a single limit element must be expanded to select the outermost limit element. The range end is inside the text node of the TD element.\n * As the TD element is a child of the TR and TABLE elements, where both are defined as `isLimit=true` in the schema, the range must be\n * expanded to select the whole TABLE element.\n *\n * **Note** If the selection contains multiple ranges, the method returns a minimal set of ranges that are not intersecting after expanding\n * them to select `isLimit=true` elements.\n *\n * @param {module:engine/model/model~Model} model\n */\nexport function injectSelectionPostFixer(model) {\n  model.document.registerPostFixer(function (writer) {\n    return selectionPostFixer(writer, model);\n  });\n}\n\n// The selection post-fixer.\n//\n// @param {module:engine/model/writer~Writer} writer\n// @param {module:engine/model/model~Model} model\nfunction selectionPostFixer(writer, model) {\n  var selection = model.document.selection;\n  var schema = model.schema;\n  var ranges = [];\n  var wasFixed = false;\n  var _iterator = _createForOfIteratorHelper(selection.getRanges()),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var modelRange = _step.value;\n      // Go through all ranges in selection and try fixing each of them.\n      // Those ranges might overlap but will be corrected later.\n      var correctedRange = tryFixingRange(modelRange, schema);\n      if (correctedRange) {\n        ranges.push(correctedRange);\n        wasFixed = true;\n      } else {\n        ranges.push(modelRange);\n      }\n    }\n\n    // If any of ranges were corrected update the selection.\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  if (wasFixed) {\n    // The above algorithm might create ranges that intersects each other when selection contains more then one range.\n    // This is case happens mostly on Firefox which creates multiple ranges for selected table.\n    var fixedRanges = ranges;\n\n    // Fixing selection with many ranges usually breaks the selection in Firefox. As only Firefox supports multiple selection ranges\n    // we simply create one continuous range from fixed selection ranges (even if they are not adjacent).\n    if (ranges.length > 1) {\n      var selectionStart = ranges[0].start;\n      var selectionEnd = ranges[ranges.length - 1].end;\n      fixedRanges = [new Range(selectionStart, selectionEnd)];\n    }\n    writer.setSelection(fixedRanges, {\n      backward: selection.isBackward\n    });\n  }\n}\n\n// Tries fixing a range if it's incorrect.\n//\n// @param {module:engine/model/range~Range} range\n// @param {module:engine/model/schema~Schema} schema\n// @returns {module:engine/model/range~Range|null} Returns fixed range or null if range is valid.\nfunction tryFixingRange(range, schema) {\n  if (range.isCollapsed) {\n    return tryFixingCollapsedRange(range, schema);\n  }\n  return tryFixingNonCollapsedRage(range, schema);\n}\n\n// Tries to fix collapsed ranges.\n//\n// * Fixes situation when a range is in a place where $text is not allowed\n//\n// @param {module:engine/model/range~Range} range Collapsed range to fix.\n// @param {module:engine/model/schema~Schema} schema\n// @returns {module:engine/model/range~Range|null} Returns fixed range or null if range is valid.\nfunction tryFixingCollapsedRange(range, schema) {\n  var originalPosition = range.start;\n  var nearestSelectionRange = schema.getNearestSelectionRange(originalPosition);\n\n  // This might be null ie when editor data is empty.\n  // In such cases there is no need to fix the selection range.\n  if (!nearestSelectionRange) {\n    return null;\n  }\n  var fixedPosition = nearestSelectionRange.start;\n\n  // Fixed position is the same as original - no need to return corrected range.\n  if (originalPosition.isEqual(fixedPosition)) {\n    return null;\n  }\n\n  // Check single node selection (happens in tables).\n  if (fixedPosition.nodeAfter && schema.isLimit(fixedPosition.nodeAfter)) {\n    return new Range(fixedPosition, Position._createAfter(fixedPosition.nodeAfter));\n  }\n  return new Range(fixedPosition);\n}\n\n// Tries to fix an expanded range.\n//\n// @param {module:engine/model/range~Range} range Expanded range to fix.\n// @param {module:engine/model/schema~Schema} schema\n// @returns {module:engine/model/range~Range|null} Returns fixed range or null if range is valid.\nfunction tryFixingNonCollapsedRage(range, schema) {\n  var start = range.start;\n  var end = range.end;\n  var isTextAllowedOnStart = schema.checkChild(start, '$text');\n  var isTextAllowedOnEnd = schema.checkChild(end, '$text');\n  var startLimitElement = schema.getLimitElement(start);\n  var endLimitElement = schema.getLimitElement(end);\n\n  // Ranges which both end are inside the same limit element (or root) might needs only minor fix.\n  if (startLimitElement === endLimitElement) {\n    // Range is valid when both position allows to place a text:\n    // - <block>f[oobarba]z</block>\n    // This would be \"fixed\" by a next check but as it will be the same it's better to return null so the selection stays the same.\n    if (isTextAllowedOnStart && isTextAllowedOnEnd) {\n      return null;\n    }\n\n    // Range that is on non-limit element (or is partially) must be fixed so it is placed inside the block around $text:\n    // - [<block>foo</block>]    ->    <block>[foo]</block>\n    // - [<block>foo]</block>    ->    <block>[foo]</block>\n    // - <block>f[oo</block>]    ->    <block>f[oo]</block>\n    // - [<block>foo</block><object></object>]    ->    <block>[foo</block><object></object>]\n    if (checkSelectionOnNonLimitElements(start, end, schema)) {\n      var isStartObject = start.nodeAfter && schema.isObject(start.nodeAfter);\n      var fixedStart = isStartObject ? null : schema.getNearestSelectionRange(start, 'forward');\n      var isEndObject = end.nodeBefore && schema.isObject(end.nodeBefore);\n      var fixedEnd = isEndObject ? null : schema.getNearestSelectionRange(end, 'backward');\n\n      // The schema.getNearestSelectionRange might return null - if that happens use original position.\n      var rangeStart = fixedStart ? fixedStart.start : start;\n      var rangeEnd = fixedEnd ? fixedEnd.start : end;\n      return new Range(rangeStart, rangeEnd);\n    }\n  }\n  var isStartInLimit = startLimitElement && !startLimitElement.is('rootElement');\n  var isEndInLimit = endLimitElement && !endLimitElement.is('rootElement');\n\n  // At this point we eliminated valid positions on text nodes so if one of range positions is placed inside a limit element\n  // then the range crossed limit element boundaries and needs to be fixed.\n  if (isStartInLimit || isEndInLimit) {\n    var bothInSameParent = start.nodeAfter && end.nodeBefore && start.nodeAfter.parent === end.nodeBefore.parent;\n    var expandStart = isStartInLimit && (!bothInSameParent || !isInObject(start.nodeAfter, schema));\n    var expandEnd = isEndInLimit && (!bothInSameParent || !isInObject(end.nodeBefore, schema));\n\n    // Although we've already found limit element on start/end positions we must find the outer-most limit element.\n    // as limit elements might be nested directly inside (ie table > tableRow > tableCell).\n    var _fixedStart = start;\n    var _fixedEnd = end;\n    if (expandStart) {\n      _fixedStart = Position._createBefore(findOutermostLimitAncestor(startLimitElement, schema));\n    }\n    if (expandEnd) {\n      _fixedEnd = Position._createAfter(findOutermostLimitAncestor(endLimitElement, schema));\n    }\n    return new Range(_fixedStart, _fixedEnd);\n  }\n\n  // Range was not fixed at this point so it is valid - ie it was placed around limit element already.\n  return null;\n}\n\n// Finds the outer-most ancestor.\n//\n// @param {module:engine/model/node~Node} startingNode\n// @param {module:engine/model/schema~Schema} schema\n// @param {String} expandToDirection Direction of expansion - either 'start' or 'end' of the range.\n// @returns {module:engine/model/node~Node}\nfunction findOutermostLimitAncestor(startingNode, schema) {\n  var isLimitNode = startingNode;\n  var parent = isLimitNode;\n\n  // Find outer most isLimit block as such blocks might be nested (ie. in tables).\n  while (schema.isLimit(parent) && parent.parent) {\n    isLimitNode = parent;\n    parent = parent.parent;\n  }\n  return isLimitNode;\n}\n\n// Checks whether any of range boundaries is placed around non-limit elements.\n//\n// @param {module:engine/model/position~Position} start\n// @param {module:engine/model/position~Position} end\n// @param {module:engine/model/schema~Schema} schema\n// @returns {Boolean}\nfunction checkSelectionOnNonLimitElements(start, end, schema) {\n  var startIsOnBlock = start.nodeAfter && !schema.isLimit(start.nodeAfter) || schema.checkChild(start, '$text');\n  var endIsOnBlock = end.nodeBefore && !schema.isLimit(end.nodeBefore) || schema.checkChild(end, '$text');\n\n  // We should fix such selection when one of those nodes needs fixing.\n  return startIsOnBlock || endIsOnBlock;\n}\n\n// Checks if node exists and if it's an object.\n//\n// @param {module:engine/model/node~Node} node\n// @param {module:engine/model/schema~Schema} schema\n// @returns {Boolean}\nfunction isInObject(node, schema) {\n  return node && schema.isObject(node);\n}","import _slicedToArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _readOnlyError from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/readOnlyError.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.string.anchor.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/model/writer\n */\n\nimport AttributeOperation from './operation/attributeoperation';\nimport DetachOperation from './operation/detachoperation';\nimport InsertOperation from './operation/insertoperation';\nimport MarkerOperation from './operation/markeroperation';\nimport MoveOperation from './operation/moveoperation';\nimport RenameOperation from './operation/renameoperation';\nimport RootAttributeOperation from './operation/rootattributeoperation';\nimport SplitOperation from './operation/splitoperation';\nimport MergeOperation from './operation/mergeoperation';\nimport DocumentFragment from './documentfragment';\nimport Text from './text';\nimport Element from './element';\nimport RootElement from './rootelement';\nimport Position from './position';\nimport Range from './range.js';\nimport DocumentSelection from './documentselection';\nimport toMap from '@ckeditor/ckeditor5-utils/src/tomap';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * The model can only be modified by using the writer. It should be used whenever you want to create a node, modify\n * child nodes, attributes or text, set the selection's position and its attributes.\n *\n * The instance of the writer is only available in the {@link module:engine/model/model~Model#change `change()`} or\n * {@link module:engine/model/model~Model#enqueueChange `enqueueChange()`}.\n *\n *\t\tmodel.change( writer => {\n *\t\t\twriter.insertText( 'foo', paragraph, 'end' );\n *\t\t} );\n *\n * Note that the writer should never be stored and used outside of the `change()` and\n * `enqueueChange()` blocks.\n *\n * Note that writer's methods do not check the {@link module:engine/model/schema~Schema}. It is possible\n * to create incorrect model structures by using the writer. Read more about in\n * {@glink framework/guides/deep-dive/schema#who-checks-the-schema \"Who checks the schema?\"}.\n *\n * @see module:engine/model/model~Model#change\n * @see module:engine/model/model~Model#enqueueChange\n */\nvar Writer = /*#__PURE__*/function () {\n  /**\n   * Creates a writer instance.\n   *\n   * **Note:** It is not recommended to use it directly. Use {@link module:engine/model/model~Model#change `Model#change()`} or\n   * {@link module:engine/model/model~Model#enqueueChange `Model#enqueueChange()`} instead.\n   *\n   * @protected\n   * @param {module:engine/model/model~Model} model\n   * @param {module:engine/model/batch~Batch} batch\n   */\n  function Writer(model, batch) {\n    _classCallCheck(this, Writer);\n    /**\n     * Instance of the model on which this writer operates.\n     *\n     * @readonly\n     * @type {module:engine/model/model~Model}\n     */\n    this.model = model;\n\n    /**\n     * The batch to which this writer will add changes.\n     *\n     * @readonly\n     * @type {module:engine/model/batch~Batch}\n     */\n    this.batch = batch;\n  }\n\n  /**\n   * Creates a new {@link module:engine/model/text~Text text node}.\n   *\n   *\t\twriter.createText( 'foo' );\n   *\t\twriter.createText( 'foo', { bold: true } );\n   *\n   * @param {String} data Text data.\n   * @param {Object} [attributes] Text attributes.\n   * @returns {module:engine/model/text~Text} Created text node.\n   */\n  return _createClass(Writer, [{\n    key: \"createText\",\n    value: function createText(data, attributes) {\n      return new Text(data, attributes);\n    }\n\n    /**\n     * Creates a new {@link module:engine/model/element~Element element}.\n     *\n     *\t\twriter.createElement( 'paragraph' );\n     *\t\twriter.createElement( 'paragraph', { alignment: 'center' } );\n     *\n     * @param {String} name Name of the element.\n     * @param {Object} [attributes] Elements attributes.\n     * @returns {module:engine/model/element~Element} Created element.\n     */\n  }, {\n    key: \"createElement\",\n    value: function createElement(name, attributes) {\n      return new Element(name, attributes);\n    }\n\n    /**\n     * Creates a new {@link module:engine/model/documentfragment~DocumentFragment document fragment}.\n     *\n     * @returns {module:engine/model/documentfragment~DocumentFragment} Created document fragment.\n     */\n  }, {\n    key: \"createDocumentFragment\",\n    value: function createDocumentFragment() {\n      return new DocumentFragment();\n    }\n\n    /**\n     * Inserts item on given position.\n     *\n     *\t\tconst paragraph = writer.createElement( 'paragraph' );\n     *\t\twriter.insert( paragraph, position );\n     *\n     * Instead of using position you can use parent and offset:\n     *\n     *\t\tconst text = writer.createText( 'foo' );\n     *\t\twriter.insert( text, paragraph, 5 );\n     *\n     * You can also use `end` instead of the offset to insert at the end:\n     *\n     *\t\tconst text = writer.createText( 'foo' );\n     *\t\twriter.insert( text, paragraph, 'end' );\n     *\n     * Or insert before or after another element:\n     *\n     *\t\tconst paragraph = writer.createElement( 'paragraph' );\n     *\t\twriter.insert( paragraph, anotherParagraph, 'after' );\n     *\n     * These parameters works the same way as {@link #createPositionAt `writer.createPositionAt()`}.\n     *\n     * Note that if the item already has parent it will be removed from the previous parent.\n     *\n     * Note that you cannot re-insert a node from a document to a different document or a document fragment. In this case,\n     * `model-writer-insert-forbidden-move` is thrown.\n     *\n     * If you want to move {@link module:engine/model/range~Range range} instead of an\n     * {@link module:engine/model/item~Item item} use {@link module:engine/model/writer~Writer#move `Writer#move()`}.\n     *\n     * **Note:** For a paste-like content insertion mechanism see\n     * {@link module:engine/model/model~Model#insertContent `model.insertContent()`}.\n     *\n     * @param {module:engine/model/item~Item|module:engine/model/documentfragment~DocumentFragment} item Item or document\n     * fragment to insert.\n     * @param {module:engine/model/item~Item|module:engine/model/position~Position} itemOrPosition\n     * @param {Number|'end'|'before'|'after'} [offset] Offset or one of the flags. Used only when\n     * second parameter is a {@link module:engine/model/item~Item model item}.\n     */\n  }, {\n    key: \"insert\",\n    value: function insert(item, itemOrPosition) {\n      var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n      this._assertWriterUsedCorrectly();\n      if (item instanceof Text && item.data == '') {\n        return;\n      }\n      var position = Position._createAt(itemOrPosition, offset);\n\n      // If item has a parent already.\n      if (item.parent) {\n        // We need to check if item is going to be inserted within the same document.\n        if (isSameTree(item.root, position.root)) {\n          // If it's we just need to move it.\n          this.move(Range._createOn(item), position);\n          return;\n        }\n        // If it isn't the same root.\n        else {\n          if (item.root.document) {\n            /**\n             * Cannot move a node from a document to a different tree.\n             * It is forbidden to move a node that was already in a document outside of it.\n             *\n             * @error model-writer-insert-forbidden-move\n             */\n            throw new CKEditorError('model-writer-insert-forbidden-move: ' + 'Cannot move a node from a document to a different tree. ' + 'It is forbidden to move a node that was already in a document outside of it.', this);\n          } else {\n            // Move between two different document fragments or from document fragment to a document is possible.\n            // In that case, remove the item from it's original parent.\n            this.remove(item);\n          }\n        }\n      }\n      var version = position.root.document ? position.root.document.version : null;\n      var insert = new InsertOperation(position, item, version);\n      if (item instanceof Text) {\n        insert.shouldReceiveAttributes = true;\n      }\n      this.batch.addOperation(insert);\n      this.model.applyOperation(insert);\n\n      // When element is a DocumentFragment we need to move its markers to Document#markers.\n      if (item instanceof DocumentFragment) {\n        var _iterator = _createForOfIteratorHelper(item.markers),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var _step$value = _slicedToArray(_step.value, 2),\n              markerName = _step$value[0],\n              markerRange = _step$value[1];\n            // We need to migrate marker range from DocumentFragment to Document.\n            var rangeRootPosition = Position._createAt(markerRange.root, 0);\n            var range = new Range(markerRange.start._getCombined(rangeRootPosition, position), markerRange.end._getCombined(rangeRootPosition, position));\n            var options = {\n              range: range,\n              usingOperation: true,\n              affectsData: true\n            };\n            if (this.model.markers.has(markerName)) {\n              this.updateMarker(markerName, options);\n            } else {\n              this.addMarker(markerName, options);\n            }\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      }\n    }\n\n    /**\n     * Creates and inserts text on given position. You can optionally set text attributes:\n     *\n     *\t\twriter.insertText( 'foo', position );\n     *\t\twriter.insertText( 'foo', { bold: true }, position );\n     *\n     * Instead of using position you can use parent and offset or define that text should be inserted at the end\n     * or before or after other node:\n     *\n     *\t\t// Inserts 'foo' in paragraph, at offset 5:\n     *\t\twriter.insertText( 'foo', paragraph, 5 );\n     *\t\t// Inserts 'foo' at the end of a paragraph:\n     *\t\twriter.insertText( 'foo', paragraph, 'end' );\n     *\t\t// Inserts 'foo' after an image:\n     *\t\twriter.insertText( 'foo', image, 'after' );\n     *\n     * These parameters work in the same way as {@link #createPositionAt `writer.createPositionAt()`}.\n     *\n     * @param {String} data Text data.\n     * @param {Object} [attributes] Text attributes.\n     * @param {module:engine/model/item~Item|module:engine/model/position~Position} itemOrPosition\n     * @param {Number|'end'|'before'|'after'} [offset] Offset or one of the flags. Used only when\n     * third parameter is a {@link module:engine/model/item~Item model item}.\n     */\n  }, {\n    key: \"insertText\",\n    value: function insertText(text, attributes, itemOrPosition, offset) {\n      if (attributes instanceof DocumentFragment || attributes instanceof Element || attributes instanceof Position) {\n        this.insert(this.createText(text), attributes, itemOrPosition);\n      } else {\n        this.insert(this.createText(text, attributes), itemOrPosition, offset);\n      }\n    }\n\n    /**\n     * Creates and inserts element on given position. You can optionally set attributes:\n     *\n     *\t\twriter.insertElement( 'paragraph', position );\n     *\t\twriter.insertElement( 'paragraph', { alignment: 'center' }, position );\n     *\n     * Instead of using position you can use parent and offset or define that text should be inserted at the end\n     * or before or after other node:\n     *\n     *\t\t// Inserts paragraph in the root at offset 5:\n     *\t\twriter.insertElement( 'paragraph', root, 5 );\n     *\t\t// Inserts paragraph at the end of a blockquote:\n     *\t\twriter.insertElement( 'paragraph', blockquote, 'end' );\n     *\t\t// Inserts after an image:\n     *\t\twriter.insertElement( 'paragraph', image, 'after' );\n     *\n     * These parameters works the same way as {@link #createPositionAt `writer.createPositionAt()`}.\n     *\n     * @param {String} name Name of the element.\n     * @param {Object} [attributes] Elements attributes.\n     * @param {module:engine/model/item~Item|module:engine/model/position~Position} itemOrPosition\n     * @param {Number|'end'|'before'|'after'} [offset] Offset or one of the flags. Used only when\n     * third parameter is a {@link module:engine/model/item~Item model item}.\n     */\n  }, {\n    key: \"insertElement\",\n    value: function insertElement(name, attributes, itemOrPosition, offset) {\n      if (attributes instanceof DocumentFragment || attributes instanceof Element || attributes instanceof Position) {\n        this.insert(this.createElement(name), attributes, itemOrPosition);\n      } else {\n        this.insert(this.createElement(name, attributes), itemOrPosition, offset);\n      }\n    }\n\n    /**\n     * Inserts item at the end of the given parent.\n     *\n     *\t\tconst paragraph = writer.createElement( 'paragraph' );\n     *\t\twriter.append( paragraph, root );\n     *\n     * Note that if the item already has parent it will be removed from the previous parent.\n     *\n     * If you want to move {@link module:engine/model/range~Range range} instead of an\n     * {@link module:engine/model/item~Item item} use {@link module:engine/model/writer~Writer#move `Writer#move()`}.\n     *\n     * @param {module:engine/model/item~Item|module:engine/model/documentfragment~DocumentFragment}\n     * item Item or document fragment to insert.\n     * @param {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment} parent\n     */\n  }, {\n    key: \"append\",\n    value: function append(item, parent) {\n      this.insert(item, parent, 'end');\n    }\n\n    /**\n     * Creates text node and inserts it at the end of the parent. You can optionally set text attributes:\n     *\n     *\t\twriter.appendText( 'foo', paragraph );\n     *\t\twriter.appendText( 'foo', { bold: true }, paragraph );\n     *\n     * @param {String} text Text data.\n     * @param {Object} [attributes] Text attributes.\n     * @param {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment} parent\n     */\n  }, {\n    key: \"appendText\",\n    value: function appendText(text, attributes, parent) {\n      if (attributes instanceof DocumentFragment || attributes instanceof Element) {\n        this.insert(this.createText(text), attributes, 'end');\n      } else {\n        this.insert(this.createText(text, attributes), parent, 'end');\n      }\n    }\n\n    /**\n     * Creates element and inserts it at the end of the parent. You can optionally set attributes:\n     *\n     *\t\twriter.appendElement( 'paragraph', root );\n     *\t\twriter.appendElement( 'paragraph', { alignment: 'center' }, root );\n     *\n     * @param {String} name Name of the element.\n     * @param {Object} [attributes] Elements attributes.\n     * @param {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment} parent\n     */\n  }, {\n    key: \"appendElement\",\n    value: function appendElement(name, attributes, parent) {\n      if (attributes instanceof DocumentFragment || attributes instanceof Element) {\n        this.insert(this.createElement(name), attributes, 'end');\n      } else {\n        this.insert(this.createElement(name, attributes), parent, 'end');\n      }\n    }\n\n    /**\n     * Sets value of the attribute with given key on a {@link module:engine/model/item~Item model item}\n     * or on a {@link module:engine/model/range~Range range}.\n     *\n     * @param {String} key Attribute key.\n     * @param {*} value Attribute new value.\n     * @param {module:engine/model/item~Item|module:engine/model/range~Range} itemOrRange\n     * Model item or range on which the attribute will be set.\n     */\n  }, {\n    key: \"setAttribute\",\n    value: function setAttribute(key, value, itemOrRange) {\n      this._assertWriterUsedCorrectly();\n      if (itemOrRange instanceof Range) {\n        var ranges = itemOrRange.getMinimalFlatRanges();\n        var _iterator2 = _createForOfIteratorHelper(ranges),\n          _step2;\n        try {\n          for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n            var range = _step2.value;\n            setAttributeOnRange(this, key, value, range);\n          }\n        } catch (err) {\n          _iterator2.e(err);\n        } finally {\n          _iterator2.f();\n        }\n      } else {\n        setAttributeOnItem(this, key, value, itemOrRange);\n      }\n    }\n\n    /**\n     * Sets values of attributes on a {@link module:engine/model/item~Item model item}\n     * or on a {@link module:engine/model/range~Range range}.\n     *\n     *\t\twriter.setAttributes( {\n     *\t\t\tbold: true,\n     *\t\t\titalic: true\n     *\t\t}, range );\n     *\n     * @param {Object} attributes Attributes keys and values.\n     * @param {module:engine/model/item~Item|module:engine/model/range~Range} itemOrRange\n     * Model item or range on which the attributes will be set.\n     */\n  }, {\n    key: \"setAttributes\",\n    value: function setAttributes(attributes, itemOrRange) {\n      var _iterator3 = _createForOfIteratorHelper(toMap(attributes)),\n        _step3;\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var _step3$value = _slicedToArray(_step3.value, 2),\n            key = _step3$value[0],\n            val = _step3$value[1];\n          this.setAttribute(key, val, itemOrRange);\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n    }\n\n    /**\n     * Removes an attribute with given key from a {@link module:engine/model/item~Item model item}\n     * or from a {@link module:engine/model/range~Range range}.\n     *\n     * @param {String} key Attribute key.\n     * @param {module:engine/model/item~Item|module:engine/model/range~Range} itemOrRange\n     * Model item or range from which the attribute will be removed.\n     */\n  }, {\n    key: \"removeAttribute\",\n    value: function removeAttribute(key, itemOrRange) {\n      this._assertWriterUsedCorrectly();\n      if (itemOrRange instanceof Range) {\n        var ranges = itemOrRange.getMinimalFlatRanges();\n        var _iterator4 = _createForOfIteratorHelper(ranges),\n          _step4;\n        try {\n          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n            var range = _step4.value;\n            setAttributeOnRange(this, key, null, range);\n          }\n        } catch (err) {\n          _iterator4.e(err);\n        } finally {\n          _iterator4.f();\n        }\n      } else {\n        setAttributeOnItem(this, key, null, itemOrRange);\n      }\n    }\n\n    /**\n     * Removes all attributes from all elements in the range or from the given item.\n     *\n     * @param {module:engine/model/item~Item|module:engine/model/range~Range} itemOrRange\n     * Model item or range from which all attributes will be removed.\n     */\n  }, {\n    key: \"clearAttributes\",\n    value: function clearAttributes(itemOrRange) {\n      var _this = this;\n      this._assertWriterUsedCorrectly();\n      var removeAttributesFromItem = function removeAttributesFromItem(item) {\n        var _iterator5 = _createForOfIteratorHelper(item.getAttributeKeys()),\n          _step5;\n        try {\n          for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n            var attribute = _step5.value;\n            _this.removeAttribute(attribute, item);\n          }\n        } catch (err) {\n          _iterator5.e(err);\n        } finally {\n          _iterator5.f();\n        }\n      };\n      if (!(itemOrRange instanceof Range)) {\n        removeAttributesFromItem(itemOrRange);\n      } else {\n        var _iterator6 = _createForOfIteratorHelper(itemOrRange.getItems()),\n          _step6;\n        try {\n          for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n            var item = _step6.value;\n            removeAttributesFromItem(item);\n          }\n        } catch (err) {\n          _iterator6.e(err);\n        } finally {\n          _iterator6.f();\n        }\n      }\n    }\n\n    /**\n     * Moves all items in the source range to the target position.\n     *\n     *\t\twriter.move( sourceRange, targetPosition );\n     *\n     * Instead of the target position you can use parent and offset or define that range should be moved to the end\n     * or before or after chosen item:\n     *\n     *\t\t// Moves all items in the range to the paragraph at offset 5:\n     *\t\twriter.move( sourceRange, paragraph, 5 );\n     *\t\t// Moves all items in the range to the end of a blockquote:\n     *\t\twriter.move( sourceRange, blockquote, 'end' );\n     *\t\t// Moves all items in the range to a position after an image:\n     *\t\twriter.move( sourceRange, image, 'after' );\n     *\n     * These parameters works the same way as {@link #createPositionAt `writer.createPositionAt()`}.\n     *\n     * Note that items can be moved only within the same tree. It means that you can move items within the same root\n     * (element or document fragment) or between {@link module:engine/model/document~Document#roots documents roots},\n     * but you can not move items from document fragment to the document or from one detached element to another. Use\n     * {@link module:engine/model/writer~Writer#insert} in such cases.\n     *\n     * @param {module:engine/model/range~Range} range Source range.\n     * @param {module:engine/model/item~Item|module:engine/model/position~Position} itemOrPosition\n     * @param {Number|'end'|'before'|'after'} [offset] Offset or one of the flags. Used only when\n     * second parameter is a {@link module:engine/model/item~Item model item}.\n     */\n  }, {\n    key: \"move\",\n    value: function move(range, itemOrPosition, offset) {\n      this._assertWriterUsedCorrectly();\n      if (!(range instanceof Range)) {\n        /**\n         * Invalid range to move.\n         *\n         * @error writer-move-invalid-range\n         */\n        throw new CKEditorError('writer-move-invalid-range: Invalid range to move.', this);\n      }\n      if (!range.isFlat) {\n        /**\n         * Range to move is not flat.\n         *\n         * @error writer-move-range-not-flat\n         */\n        throw new CKEditorError('writer-move-range-not-flat: Range to move is not flat.', this);\n      }\n      var position = Position._createAt(itemOrPosition, offset);\n\n      // Do not move anything if the move target is same as moved range start.\n      if (position.isEqual(range.start)) {\n        return;\n      }\n\n      // If part of the marker is removed, create additional marker operation for undo purposes.\n      this._addOperationForAffectedMarkers('move', range);\n      if (!isSameTree(range.root, position.root)) {\n        /**\n         * Range is going to be moved within not the same document. Please use\n         * {@link module:engine/model/writer~Writer#insert insert} instead.\n         *\n         * @error writer-move-different-document\n         */\n        throw new CKEditorError('writer-move-different-document: Range is going to be moved between different documents.', this);\n      }\n      var version = range.root.document ? range.root.document.version : null;\n      var operation = new MoveOperation(range.start, range.end.offset - range.start.offset, position, version);\n      this.batch.addOperation(operation);\n      this.model.applyOperation(operation);\n    }\n\n    /**\n     * Removes given model {@link module:engine/model/item~Item item} or {@link module:engine/model/range~Range range}.\n     *\n     * @param {module:engine/model/item~Item|module:engine/model/range~Range} itemOrRange Model item or range to remove.\n     */\n  }, {\n    key: \"remove\",\n    value: function remove(itemOrRange) {\n      this._assertWriterUsedCorrectly();\n      var rangeToRemove = itemOrRange instanceof Range ? itemOrRange : Range._createOn(itemOrRange);\n      var ranges = rangeToRemove.getMinimalFlatRanges().reverse();\n      var _iterator7 = _createForOfIteratorHelper(ranges),\n        _step7;\n      try {\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n          var flat = _step7.value;\n          // If part of the marker is removed, create additional marker operation for undo purposes.\n          this._addOperationForAffectedMarkers('move', flat);\n          applyRemoveOperation(flat.start, flat.end.offset - flat.start.offset, this.batch, this.model);\n        }\n      } catch (err) {\n        _iterator7.e(err);\n      } finally {\n        _iterator7.f();\n      }\n    }\n\n    /**\n     * Merges two siblings at the given position.\n     *\n     * Node before and after the position have to be an element. Otherwise `writer-merge-no-element-before` or\n     * `writer-merge-no-element-after` error will be thrown.\n     *\n     * @param {module:engine/model/position~Position} position Position between merged elements.\n     */\n  }, {\n    key: \"merge\",\n    value: function merge(position) {\n      this._assertWriterUsedCorrectly();\n      var nodeBefore = position.nodeBefore;\n      var nodeAfter = position.nodeAfter;\n\n      // If part of the marker is removed, create additional marker operation for undo purposes.\n      this._addOperationForAffectedMarkers('merge', position);\n      if (!(nodeBefore instanceof Element)) {\n        /**\n         * Node before merge position must be an element.\n         *\n         * @error writer-merge-no-element-before\n         */\n        throw new CKEditorError('writer-merge-no-element-before: Node before merge position must be an element.', this);\n      }\n      if (!(nodeAfter instanceof Element)) {\n        /**\n         * Node after merge position must be an element.\n         *\n         * @error writer-merge-no-element-after\n         */\n        throw new CKEditorError('writer-merge-no-element-after: Node after merge position must be an element.', this);\n      }\n      if (!position.root.document) {\n        this._mergeDetached(position);\n      } else {\n        this._merge(position);\n      }\n    }\n\n    /**\n     * Shortcut for {@link module:engine/model/model~Model#createPositionFromPath `Model#createPositionFromPath()`}.\n     *\n     * @param {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment} root Root of the position.\n     * @param {Array.<Number>} path Position path. See {@link module:engine/model/position~Position#path}.\n     * @param {module:engine/model/position~PositionStickiness} [stickiness='toNone'] Position stickiness.\n     * See {@link module:engine/model/position~PositionStickiness}.\n     * @returns {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"createPositionFromPath\",\n    value: function createPositionFromPath(root, path, stickiness) {\n      return this.model.createPositionFromPath(root, path, stickiness);\n    }\n\n    /**\n     * Shortcut for {@link module:engine/model/model~Model#createPositionAt `Model#createPositionAt()`}.\n     *\n     * @param {module:engine/model/item~Item|module:engine/model/position~Position} itemOrPosition\n     * @param {Number|'end'|'before'|'after'} [offset] Offset or one of the flags. Used only when\n     * first parameter is a {@link module:engine/model/item~Item model item}.\n     * @returns {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"createPositionAt\",\n    value: function createPositionAt(itemOrPosition, offset) {\n      return this.model.createPositionAt(itemOrPosition, offset);\n    }\n\n    /**\n     * Shortcut for {@link module:engine/model/model~Model#createPositionAfter `Model#createPositionAfter()`}.\n     *\n     * @param {module:engine/model/item~Item} item Item after which the position should be placed.\n     * @returns {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"createPositionAfter\",\n    value: function createPositionAfter(item) {\n      return this.model.createPositionAfter(item);\n    }\n\n    /**\n     * Shortcut for {@link module:engine/model/model~Model#createPositionBefore `Model#createPositionBefore()`}.\n     *\n     * @param {module:engine/model/item~Item} item Item after which the position should be placed.\n     * @returns {module:engine/model/position~Position}\n     */\n  }, {\n    key: \"createPositionBefore\",\n    value: function createPositionBefore(item) {\n      return this.model.createPositionBefore(item);\n    }\n\n    /**\n     * Shortcut for {@link module:engine/model/model~Model#createRange `Model#createRange()`}.\n     *\n     * @param {module:engine/model/position~Position} start Start position.\n     * @param {module:engine/model/position~Position} [end] End position. If not set, range will be collapsed at `start` position.\n     * @returns {module:engine/model/range~Range}\n     */\n  }, {\n    key: \"createRange\",\n    value: function createRange(start, end) {\n      return this.model.createRange(start, end);\n    }\n\n    /**\n     * Shortcut for {@link module:engine/model/model~Model#createRangeIn `Model#createRangeIn()`}.\n     *\n     * @param {module:engine/model/element~Element} element Element which is a parent for the range.\n     * @returns {module:engine/model/range~Range}\n     */\n  }, {\n    key: \"createRangeIn\",\n    value: function createRangeIn(element) {\n      return this.model.createRangeIn(element);\n    }\n\n    /**\n     * Shortcut for {@link module:engine/model/model~Model#createRangeOn `Model#createRangeOn()`}.\n     *\n     * @param {module:engine/model/element~Element} element Element which is a parent for the range.\n     * @returns {module:engine/model/range~Range}\n     */\n  }, {\n    key: \"createRangeOn\",\n    value: function createRangeOn(element) {\n      return this.model.createRangeOn(element);\n    }\n\n    /**\n     * Shortcut for {@link module:engine/model/model~Model#createSelection `Model#createSelection()`}.\n     *\n     * @param {module:engine/model/selection~Selectable} selectable\n     * @param {Number|'before'|'end'|'after'|'on'|'in'} [placeOrOffset] Sets place or offset of the selection.\n     * @param {Object} [options]\n     * @param {Boolean} [options.backward] Sets this selection instance to be backward.\n     * @returns {module:engine/model/selection~Selection}\n     */\n  }, {\n    key: \"createSelection\",\n    value: function createSelection(selectable, placeOrOffset, options) {\n      return this.model.createSelection(selectable, placeOrOffset, options);\n    }\n\n    /**\n     * Performs merge action in a detached tree.\n     *\n     * @private\n     * @param {module:engine/model/position~Position} position Position between merged elements.\n     */\n  }, {\n    key: \"_mergeDetached\",\n    value: function _mergeDetached(position) {\n      var nodeBefore = position.nodeBefore;\n      var nodeAfter = position.nodeAfter;\n      this.move(Range._createIn(nodeAfter), Position._createAt(nodeBefore, 'end'));\n      this.remove(nodeAfter);\n    }\n\n    /**\n     * Performs merge action in a non-detached tree.\n     *\n     * @private\n     * @param {module:engine/model/position~Position} position Position between merged elements.\n     */\n  }, {\n    key: \"_merge\",\n    value: function _merge(position) {\n      var targetPosition = Position._createAt(position.nodeBefore, 'end');\n      var sourcePosition = Position._createAt(position.nodeAfter, 0);\n      var graveyard = position.root.document.graveyard;\n      var graveyardPosition = new Position(graveyard, [0]);\n      var version = position.root.document.version;\n      var merge = new MergeOperation(sourcePosition, position.nodeAfter.maxOffset, targetPosition, graveyardPosition, version);\n      this.batch.addOperation(merge);\n      this.model.applyOperation(merge);\n    }\n\n    /**\n     * Renames the given element.\n     *\n     * @param {module:engine/model/element~Element} element The element to rename.\n     * @param {String} newName New element name.\n     */\n  }, {\n    key: \"rename\",\n    value: function rename(element, newName) {\n      this._assertWriterUsedCorrectly();\n      if (!(element instanceof Element)) {\n        /**\n         * Trying to rename an object which is not an instance of Element.\n         *\n         * @error writer-rename-not-element-instance\n         */\n        throw new CKEditorError('writer-rename-not-element-instance: Trying to rename an object which is not an instance of Element.', this);\n      }\n      var version = element.root.document ? element.root.document.version : null;\n      var renameOperation = new RenameOperation(Position._createBefore(element), element.name, newName, version);\n      this.batch.addOperation(renameOperation);\n      this.model.applyOperation(renameOperation);\n    }\n\n    /**\n     * Splits elements starting from the given position and going to the top of the model tree as long as given\n     * `limitElement` is reached. When `limitElement` is not defined then only the parent of the given position will be split.\n     *\n     * The element needs to have a parent. It cannot be a root element nor a document fragment.\n     * The `writer-split-element-no-parent` error will be thrown if you try to split an element with no parent.\n     *\n     * @param {module:engine/model/position~Position} position Position of split.\n     * @param {module:engine/model/node~Node} [limitElement] Stop splitting when this element will be reached.\n     * @returns {Object} result Split result.\n     * @returns {module:engine/model/position~Position} result.position Position between split elements.\n     * @returns {module:engine/model/range~Range} result.range Range that stars from the end of the first split element and ends\n     * at the beginning of the first copy element.\n     */\n  }, {\n    key: \"split\",\n    value: function split(position, limitElement) {\n      this._assertWriterUsedCorrectly();\n      var splitElement = position.parent;\n      if (!splitElement.parent) {\n        /**\n         * Element with no parent can not be split.\n         *\n         * @error writer-split-element-no-parent\n         */\n        throw new CKEditorError('writer-split-element-no-parent: Element with no parent can not be split.', this);\n      }\n\n      // When limit element is not defined lets set splitElement parent as limit.\n      if (!limitElement) {\n        limitElement = splitElement.parent;\n      }\n      if (!position.parent.getAncestors({\n        includeSelf: true\n      }).includes(limitElement)) {\n        throw new CKEditorError('writer-split-invalid-limit-element: Limit element is not a position ancestor.', this);\n      }\n\n      // We need to cache elements that will be created as a result of the first split because\n      // we need to create a range from the end of the first split element to the beginning of the\n      // first copy element. This should be handled by LiveRange but it doesn't work on detached nodes.\n      var firstSplitElement, firstCopyElement;\n      do {\n        var version = splitElement.root.document ? splitElement.root.document.version : null;\n        var howMany = splitElement.maxOffset - position.offset;\n        var _split = new SplitOperation(position, howMany, null, version);\n        this.batch.addOperation(_split);\n        this.model.applyOperation(_split);\n\n        // Cache result of the first split.\n        if (!firstSplitElement && !firstCopyElement) {\n          firstSplitElement = splitElement;\n          firstCopyElement = position.parent.nextSibling;\n        }\n        position = this.createPositionAfter(position.parent);\n        splitElement = position.parent;\n      } while (splitElement !== limitElement);\n      return {\n        position: position,\n        range: new Range(Position._createAt(firstSplitElement, 'end'), Position._createAt(firstCopyElement, 0))\n      };\n    }\n\n    /**\n     * Wraps the given range with the given element or with a new element (if a string was passed).\n     *\n     * **Note:** range to wrap should be a \"flat range\" (see {@link module:engine/model/range~Range#isFlat `Range#isFlat`}).\n     * If not, an error will be thrown.\n     *\n     * @param {module:engine/model/range~Range} range Range to wrap.\n     * @param {module:engine/model/element~Element|String} elementOrString Element or name of element to wrap the range with.\n     */\n  }, {\n    key: \"wrap\",\n    value: function wrap(range, elementOrString) {\n      this._assertWriterUsedCorrectly();\n      if (!range.isFlat) {\n        /**\n         * Range to wrap is not flat.\n         *\n         * @error writer-wrap-range-not-flat\n         */\n        throw new CKEditorError('writer-wrap-range-not-flat: Range to wrap is not flat.', this);\n      }\n      var element = elementOrString instanceof Element ? elementOrString : new Element(elementOrString);\n      if (element.childCount > 0) {\n        /**\n         * Element to wrap with is not empty.\n         *\n         * @error writer-wrap-element-not-empty\n         */\n        throw new CKEditorError('writer-wrap-element-not-empty: Element to wrap with is not empty.', this);\n      }\n      if (element.parent !== null) {\n        /**\n         * Element to wrap with is already attached to a tree model.\n         *\n         * @error writer-wrap-element-attached\n         */\n        throw new CKEditorError('writer-wrap-element-attached: Element to wrap with is already attached to tree model.', this);\n      }\n      this.insert(element, range.start);\n\n      // Shift the range-to-wrap because we just inserted an element before that range.\n      var shiftedRange = new Range(range.start.getShiftedBy(1), range.end.getShiftedBy(1));\n      this.move(shiftedRange, Position._createAt(element, 0));\n    }\n\n    /**\n     * Unwraps children of the given element – all its children are moved before it and then the element is removed.\n     * Throws error if you try to unwrap an element which does not have a parent.\n     *\n     * @param {module:engine/model/element~Element} element Element to unwrap.\n     */\n  }, {\n    key: \"unwrap\",\n    value: function unwrap(element) {\n      this._assertWriterUsedCorrectly();\n      if (element.parent === null) {\n        /**\n         * Trying to unwrap an element which has no parent.\n         *\n         * @error writer-unwrap-element-no-parent\n         */\n        throw new CKEditorError('writer-unwrap-element-no-parent: Trying to unwrap an element which has no parent.', this);\n      }\n      this.move(Range._createIn(element), this.createPositionAfter(element));\n      this.remove(element);\n    }\n\n    /**\n     * Adds a {@link module:engine/model/markercollection~Marker marker}. Marker is a named range, which tracks\n     * changes in the document and updates its range automatically, when model tree changes.\n     *\n     * As the first parameter you can set marker name.\n     *\n     * The required `options.usingOperation` parameter lets you decide if the marker should be managed by operations or not. See\n     * {@link module:engine/model/markercollection~Marker marker class description} to learn about the difference between\n     * markers managed by operations and not-managed by operations.\n     *\n     * The `options.affectsData` parameter, which defaults to `false`, allows you to define if a marker affects the data. It should be\n     * `true` when the marker change changes the data returned by the\n     * {@link module:core/editor/utils/dataapimixin~DataApi#getData `editor.getData()`} method.\n     * When set to `true` it fires the {@link module:engine/model/document~Document#event:change:data `change:data`} event.\n     * When set to `false` it fires the {@link module:engine/model/document~Document#event:change `change`} event.\n     *\n     * Create marker directly base on marker's name:\n     *\n     *\t\taddMarker( markerName, { range, usingOperation: false } );\n     *\n     * Create marker using operation:\n     *\n     *\t\taddMarker( markerName, { range, usingOperation: true } );\n     *\n     * Create marker that affects the editor data:\n     *\n     *\t\taddMarker( markerName, { range, usingOperation: false, affectsData: true } );\n     *\n     * Note: For efficiency reasons, it's best to create and keep as little markers as possible.\n     *\n     * @see module:engine/model/markercollection~Marker\n     * @param {String} name Name of a marker to create - must be unique.\n     * @param {Object} options\n     * @param {Boolean} options.usingOperation Flag indicating that the marker should be added by MarkerOperation.\n     * See {@link module:engine/model/markercollection~Marker#managedUsingOperations}.\n     * @param {module:engine/model/range~Range} options.range Marker range.\n     * @param {Boolean} [options.affectsData=false] Flag indicating that the marker changes the editor data.\n     * @returns {module:engine/model/markercollection~Marker} Marker that was set.\n     */\n  }, {\n    key: \"addMarker\",\n    value: function addMarker(name, options) {\n      this._assertWriterUsedCorrectly();\n      if (!options || typeof options.usingOperation != 'boolean') {\n        /**\n         * The `options.usingOperation` parameter is required when adding a new marker.\n         *\n         * @error writer-addMarker-no-usingOperation\n         */\n        throw new CKEditorError('writer-addMarker-no-usingOperation: The options.usingOperation parameter is required when adding a new marker.', this);\n      }\n      var usingOperation = options.usingOperation;\n      var range = options.range;\n      var affectsData = options.affectsData === undefined ? false : options.affectsData;\n      if (this.model.markers.has(name)) {\n        /**\n         * Marker with provided name already exists.\n         *\n         * @error writer-addMarker-marker-exists\n         */\n        throw new CKEditorError('writer-addMarker-marker-exists: Marker with provided name already exists.', this);\n      }\n      if (!range) {\n        /**\n         * Range parameter is required when adding a new marker.\n         *\n         * @error writer-addMarker-no-range\n         */\n        throw new CKEditorError('writer-addMarker-no-range: Range parameter is required when adding a new marker.', this);\n      }\n      if (!usingOperation) {\n        return this.model.markers._set(name, range, usingOperation, affectsData);\n      }\n      applyMarkerOperation(this, name, null, range, affectsData);\n      return this.model.markers.get(name);\n    }\n\n    /**\n     * Adds, updates or refreshes a {@link module:engine/model/markercollection~Marker marker}. Marker is a named range, which tracks\n     * changes in the document and updates its range automatically, when model tree changes. Still, it is possible to change the\n     * marker's range directly using this method.\n     *\n     * As the first parameter you can set marker name or instance. If none of them is provided, new marker, with a unique\n     * name is created and returned.\n     *\n     * As the second parameter you can set the new marker data or leave this parameter as empty which will just refresh\n     * the marker by triggering downcast conversion for it. Refreshing the marker is useful when you want to change\n     * the marker {@link module:engine/view/element~Element view element} without changing any marker data.\n     *\n     * \t\tlet isCommentActive = false;\n     *\n     * \t\tmodel.conversion.markerToHighlight( {\n     * \t\t\tmodel: 'comment',\n     *\t\t\tview: data => {\n     *\t\t\t\tconst classes = [ 'comment-marker' ];\n     *\n     *\t\t\t\tif ( isCommentActive ) {\n     *\t\t\t\t\tclasses.push( 'comment-marker--active' );\n     *\t\t\t\t}\n     *\n     *\t\t\t\treturn { classes };\n     *\t\t\t}\n     * \t\t} );\n     *\n     * \t\t// Change the property that indicates if marker is displayed as active or not.\n     * \t\tisCommentActive = true;\n     *\n     * \t\t// And refresh the marker to convert it with additional class.\n     * \t\tmodel.change( writer => writer.updateMarker( 'comment' ) );\n     *\n     * The `options.usingOperation` parameter lets you change if the marker should be managed by operations or not. See\n     * {@link module:engine/model/markercollection~Marker marker class description} to learn about the difference between\n     * markers managed by operations and not-managed by operations. It is possible to change this option for an existing marker.\n     *\n     * The `options.affectsData` parameter, which defaults to `false`, allows you to define if a marker affects the data. It should be\n     * `true` when the marker change changes the data returned by\n     * the {@link module:core/editor/utils/dataapimixin~DataApi#getData `editor.getData()`} method.\n     * When set to `true` it fires the {@link module:engine/model/document~Document#event:change:data `change:data`} event.\n     * When set to `false` it fires the {@link module:engine/model/document~Document#event:change `change`} event.\n     *\n     * Update marker directly base on marker's name:\n     *\n     *\t\tupdateMarker( markerName, { range } );\n     *\n     * Update marker using operation:\n     *\n     *\t\tupdateMarker( marker, { range, usingOperation: true } );\n     *\t\tupdateMarker( markerName, { range, usingOperation: true } );\n     *\n     * Change marker's option (start using operations to manage it):\n     *\n     *\t\tupdateMarker( marker, { usingOperation: true } );\n     *\n     * Change marker's option (inform the engine, that the marker does not affect the data anymore):\n     *\n     *\t\tupdateMarker( markerName, { affectsData: false } );\n     *\n     * @see module:engine/model/markercollection~Marker\n     * @param {String|module:engine/model/markercollection~Marker} markerOrName Name of a marker to update, or a marker instance.\n     * @param {Object} [options] If options object is not defined then marker will be refreshed by triggering\n     * downcast conversion for this marker with the same data.\n     * @param {module:engine/model/range~Range} [options.range] Marker range to update.\n     * @param {Boolean} [options.usingOperation] Flag indicated whether the marker should be added by MarkerOperation.\n     * See {@link module:engine/model/markercollection~Marker#managedUsingOperations}.\n     * @param {Boolean} [options.affectsData] Flag indicating that the marker changes the editor data.\n     */\n  }, {\n    key: \"updateMarker\",\n    value: function updateMarker(markerOrName, options) {\n      this._assertWriterUsedCorrectly();\n      var markerName = typeof markerOrName == 'string' ? markerOrName : markerOrName.name;\n      var currentMarker = this.model.markers.get(markerName);\n      if (!currentMarker) {\n        /**\n         * Marker with provided name does not exists.\n         *\n         * @error writer-updateMarker-marker-not-exists\n         */\n        throw new CKEditorError('writer-updateMarker-marker-not-exists: Marker with provided name does not exists.', this);\n      }\n      if (!options) {\n        this.model.markers._refresh(currentMarker);\n        return;\n      }\n      var hasUsingOperationDefined = typeof options.usingOperation == 'boolean';\n      var affectsDataDefined = typeof options.affectsData == 'boolean';\n\n      // Use previously defined marker's affectsData if the property is not provided.\n      var affectsData = affectsDataDefined ? options.affectsData : currentMarker.affectsData;\n      if (!hasUsingOperationDefined && !options.range && !affectsDataDefined) {\n        /**\n         * One of the options is required - provide range, usingOperations or affectsData.\n         *\n         * @error writer-updateMarker-wrong-options\n         */\n        throw new CKEditorError('writer-updateMarker-wrong-options: One of the options is required - provide range, usingOperations or affectsData.', this);\n      }\n      var currentRange = currentMarker.getRange();\n      var updatedRange = options.range ? options.range : currentRange;\n      if (hasUsingOperationDefined && options.usingOperation !== currentMarker.managedUsingOperations) {\n        // The marker type is changed so it's necessary to create proper operations.\n        if (options.usingOperation) {\n          // If marker changes to a managed one treat this as synchronizing existing marker.\n          // Create `MarkerOperation` with `oldRange` set to `null`, so reverse operation will remove the marker.\n          applyMarkerOperation(this, markerName, null, updatedRange, affectsData);\n        } else {\n          // If marker changes to a marker that do not use operations then we need to create additional operation\n          // that removes that marker first.\n          applyMarkerOperation(this, markerName, currentRange, null, affectsData);\n\n          // Although not managed the marker itself should stay in model and its range should be preserver or changed to passed range.\n          this.model.markers._set(markerName, updatedRange, undefined, affectsData);\n        }\n        return;\n      }\n\n      // Marker's type doesn't change so update it accordingly.\n      if (currentMarker.managedUsingOperations) {\n        applyMarkerOperation(this, markerName, currentRange, updatedRange, affectsData);\n      } else {\n        this.model.markers._set(markerName, updatedRange, undefined, affectsData);\n      }\n    }\n\n    /**\n     * Removes given {@link module:engine/model/markercollection~Marker marker} or marker with given name.\n     * The marker is removed accordingly to how it has been created, so if the marker was created using operation,\n     * it will be destroyed using operation.\n     *\n     * @param {module:engine/model/markercollection~Marker|String} markerOrName Marker or marker name to remove.\n     */\n  }, {\n    key: \"removeMarker\",\n    value: function removeMarker(markerOrName) {\n      this._assertWriterUsedCorrectly();\n      var name = typeof markerOrName == 'string' ? markerOrName : markerOrName.name;\n      if (!this.model.markers.has(name)) {\n        /**\n         * Trying to remove marker which does not exist.\n         *\n         * @error writer-removeMarker-no-marker\n         */\n        throw new CKEditorError('writer-removeMarker-no-marker: Trying to remove marker which does not exist.', this);\n      }\n      var marker = this.model.markers.get(name);\n      if (!marker.managedUsingOperations) {\n        this.model.markers._remove(name);\n        return;\n      }\n      var oldRange = marker.getRange();\n      applyMarkerOperation(this, name, oldRange, null, marker.affectsData);\n    }\n\n    /**\n     * Sets the document's selection (ranges and direction) to the specified location based on the given\n     * {@link module:engine/model/selection~Selectable selectable} or creates an empty selection if no arguments were passed.\n     *\n     *\t\t// Sets selection to the given range.\n     *\t\tconst range = writer.createRange( start, end );\n     *\t\twriter.setSelection( range );\n     *\n     *\t\t// Sets selection to given ranges.\n     *\t\tconst ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ];\n     *\t\twriter.setSelection( range );\n     *\n     *\t\t// Sets selection to other selection.\n     *\t\tconst otherSelection = writer.createSelection();\n     *\t\twriter.setSelection( otherSelection );\n     *\n     *\t\t// Sets selection to the given document selection.\n     *\t\tconst documentSelection = model.document.selection;\n     *\t\twriter.setSelection( documentSelection );\n     *\n     *\t\t// Sets collapsed selection at the given position.\n     *\t\tconst position = writer.createPosition( root, path );\n     *\t\twriter.setSelection( position );\n     *\n     *\t\t// Sets collapsed selection at the position of the given node and an offset.\n     *\t\twriter.setSelection( paragraph, offset );\n     *\n     * Creates a range inside an {@link module:engine/model/element~Element element} which starts before the first child of\n    \t * that element and ends after the last child of that element.\n     *\n     *\t\twriter.setSelection( paragraph, 'in' );\n     *\n     * Creates a range on an {@link module:engine/model/item~Item item} which starts before the item and ends just after the item.\n     *\n     *\t\twriter.setSelection( paragraph, 'on' );\n     *\n     *\t\t// Removes all selection's ranges.\n     *\t\twriter.setSelection( null );\n     *\n     * `Writer#setSelection()` allow passing additional options (`backward`) as the last argument.\n     *\n     *\t\t// Sets selection as backward.\n     *\t\twriter.setSelection( range, { backward: true } );\n     *\n     * Throws `writer-incorrect-use` error when the writer is used outside the `change()` block.\n     *\n     * @param {module:engine/model/selection~Selectable} selectable\n     * @param {Number|'before'|'end'|'after'|'on'|'in'} [placeOrOffset] Sets place or offset of the selection.\n     * @param {Object} [options]\n     * @param {Boolean} [options.backward] Sets this selection instance to be backward.\n     */\n  }, {\n    key: \"setSelection\",\n    value: function setSelection(selectable, placeOrOffset, options) {\n      this._assertWriterUsedCorrectly();\n      this.model.document.selection._setTo(selectable, placeOrOffset, options);\n    }\n\n    /**\n     * Moves {@link module:engine/model/documentselection~DocumentSelection#focus} to the specified location.\n     *\n     * The location can be specified in the same form as\n     * {@link #createPositionAt `writer.createPositionAt()`} parameters.\n     *\n     * @param {module:engine/model/item~Item|module:engine/model/position~Position} itemOrPosition\n     * @param {Number|'end'|'before'|'after'} [offset=0] Offset or one of the flags. Used only when\n     * first parameter is a {@link module:engine/model/item~Item model item}.\n     */\n  }, {\n    key: \"setSelectionFocus\",\n    value: function setSelectionFocus(itemOrPosition, offset) {\n      this._assertWriterUsedCorrectly();\n      this.model.document.selection._setFocus(itemOrPosition, offset);\n    }\n\n    /**\n     * Sets attribute(s) on the selection. If attribute with the same key already is set, it's value is overwritten.\n     *\n     * Using key and value pair:\n     *\n     * \twriter.setSelectionAttribute( 'italic', true );\n     *\n     * Using key-value object:\n     *\n     * \twriter.setSelectionAttribute( { italic: true, bold: false } );\n     *\n     * Using iterable object:\n     *\n     * \twriter.setSelectionAttribute( new Map( [ [ 'italic', true ] ] ) );\n     *\n     * @param {String|Object|Iterable.<*>} keyOrObjectOrIterable Key of the attribute to set\n     * or object / iterable of key => value attribute pairs.\n     * @param {*} [value] Attribute value.\n     */\n  }, {\n    key: \"setSelectionAttribute\",\n    value: function setSelectionAttribute(keyOrObjectOrIterable, value) {\n      this._assertWriterUsedCorrectly();\n      if (typeof keyOrObjectOrIterable === 'string') {\n        this._setSelectionAttribute(keyOrObjectOrIterable, value);\n      } else {\n        var _iterator8 = _createForOfIteratorHelper(toMap(keyOrObjectOrIterable)),\n          _step8;\n        try {\n          for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n            var _step8$value = _slicedToArray(_step8.value, 2),\n              key = _step8$value[0],\n              _value = _step8$value[1];\n            this._setSelectionAttribute(key, _value);\n          }\n        } catch (err) {\n          _iterator8.e(err);\n        } finally {\n          _iterator8.f();\n        }\n      }\n    }\n\n    /**\n     * Removes attribute(s) with given key(s) from the selection.\n     *\n     * Remove one attribute:\n     *\n     *\t\twriter.removeSelectionAttribute( 'italic' );\n     *\n     * Remove multiple attributes:\n     *\n     *\t\twriter.removeSelectionAttribute( [ 'italic', 'bold' ] );\n     *\n     * @param {String|Iterable.<String>} keyOrIterableOfKeys Key of the attribute to remove or an iterable of attribute keys to remove.\n     */\n  }, {\n    key: \"removeSelectionAttribute\",\n    value: function removeSelectionAttribute(keyOrIterableOfKeys) {\n      this._assertWriterUsedCorrectly();\n      if (typeof keyOrIterableOfKeys === 'string') {\n        this._removeSelectionAttribute(keyOrIterableOfKeys);\n      } else {\n        var _iterator9 = _createForOfIteratorHelper(keyOrIterableOfKeys),\n          _step9;\n        try {\n          for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n            var key = _step9.value;\n            this._removeSelectionAttribute(key);\n          }\n        } catch (err) {\n          _iterator9.e(err);\n        } finally {\n          _iterator9.f();\n        }\n      }\n    }\n\n    /**\n     * Temporarily changes the {@link module:engine/model/documentselection~DocumentSelection#isGravityOverridden gravity}\n     * of the selection from left to right.\n     *\n     * The gravity defines from which direction the selection inherits its attributes. If it's the default left gravity,\n     * then the selection (after being moved by the user) inherits attributes from its left-hand side.\n     * This method allows to temporarily override this behavior by forcing the gravity to the right.\n     *\n     * For the following model fragment:\n     *\n     *\t\t<$text bold=\"true\" linkHref=\"url\">bar[]</$text><$text bold=\"true\">biz</$text>\n     *\n     * * Default gravity: selection will have the `bold` and `linkHref` attributes.\n     * * Overridden gravity: selection will have `bold` attribute.\n     *\n     * **Note**: It returns an unique identifier which is required to restore the gravity. It guarantees the symmetry\n     * of the process.\n     *\n     * @returns {String} The unique id which allows restoring the gravity.\n     */\n  }, {\n    key: \"overrideSelectionGravity\",\n    value: function overrideSelectionGravity() {\n      return this.model.document.selection._overrideGravity();\n    }\n\n    /**\n     * Restores {@link ~Writer#overrideSelectionGravity} gravity to default.\n     *\n     * Restoring the gravity is only possible using the unique identifier returned by\n     * {@link ~Writer#overrideSelectionGravity}. Note that the gravity remains overridden as long as won't be restored\n     * the same number of times it was overridden.\n     *\n     * @param {String} uid The unique id returned by {@link ~Writer#overrideSelectionGravity}.\n     */\n  }, {\n    key: \"restoreSelectionGravity\",\n    value: function restoreSelectionGravity(uid) {\n      this.model.document.selection._restoreGravity(uid);\n    }\n\n    /**\n     * @private\n     * @param {String} key Key of the attribute to remove.\n     * @param {*} value Attribute value.\n     */\n  }, {\n    key: \"_setSelectionAttribute\",\n    value: function _setSelectionAttribute(key, value) {\n      var selection = this.model.document.selection;\n\n      // Store attribute in parent element if the selection is collapsed in an empty node.\n      if (selection.isCollapsed && selection.anchor.parent.isEmpty) {\n        var storeKey = DocumentSelection._getStoreAttributeKey(key);\n        this.setAttribute(storeKey, value, selection.anchor.parent);\n      }\n      selection._setAttribute(key, value);\n    }\n\n    /**\n     * @private\n     * @param {String} key Key of the attribute to remove.\n     */\n  }, {\n    key: \"_removeSelectionAttribute\",\n    value: function _removeSelectionAttribute(key) {\n      var selection = this.model.document.selection;\n\n      // Remove stored attribute from parent element if the selection is collapsed in an empty node.\n      if (selection.isCollapsed && selection.anchor.parent.isEmpty) {\n        var storeKey = DocumentSelection._getStoreAttributeKey(key);\n        this.removeAttribute(storeKey, selection.anchor.parent);\n      }\n      selection._removeAttribute(key);\n    }\n\n    /**\n     * Throws `writer-detached-writer-tries-to-modify-model` error when the writer is used outside of the `change()` block.\n     *\n     * @private\n     */\n  }, {\n    key: \"_assertWriterUsedCorrectly\",\n    value: function _assertWriterUsedCorrectly() {\n      /**\n       * Trying to use a writer outside a {@link module:engine/model/model~Model#change `change()`} or\n       * {@link module:engine/model/model~Model#enqueueChange `enqueueChange()`} blocks.\n       *\n       * The writer can only be used inside these blocks which ensures that the model\n       * can only be changed during such \"sessions\".\n       *\n       * @error writer-incorrect-use\n       */\n      if (this.model._currentWriter !== this) {\n        throw new CKEditorError('writer-incorrect-use: Trying to use a writer outside the change() block.', this);\n      }\n    }\n\n    /**\n     * For given action `type` and `positionOrRange` where the action happens, this function finds all affected markers\n     * and applies a marker operation with the new marker range equal to the current range. Thanks to this, the marker range\n     * can be later correctly processed during undo.\n     *\n     * @private\n     * @param {'move'|'merge'} type Writer action type.\n     * @param {module:engine/model/position~Position|module:engine/model/range~Range} positionOrRange Position or range\n     * where the writer action happens.\n     */\n  }, {\n    key: \"_addOperationForAffectedMarkers\",\n    value: function _addOperationForAffectedMarkers(type, positionOrRange) {\n      var _iterator0 = _createForOfIteratorHelper(this.model.markers),\n        _step0;\n      try {\n        for (_iterator0.s(); !(_step0 = _iterator0.n()).done;) {\n          var marker = _step0.value;\n          if (!marker.managedUsingOperations) {\n            continue;\n          }\n          var markerRange = marker.getRange();\n          var isAffected = false;\n          if (type == 'move') {\n            isAffected = positionOrRange.containsPosition(markerRange.start) || positionOrRange.start.isEqual(markerRange.start) || positionOrRange.containsPosition(markerRange.end) || positionOrRange.end.isEqual(markerRange.end);\n          } else {\n            // if type == 'merge'.\n            var elementBefore = positionOrRange.nodeBefore;\n            var elementAfter = positionOrRange.nodeAfter;\n\n            //               Start:  <p>Foo[</p><p>Bar]</p>\n            //         After merge:  <p>Foo[Bar]</p>\n            // After undoing split:  <p>Foo</p><p>[Bar]</p>     <-- incorrect, needs remembering for undo.\n            //\n            var affectedInLeftElement = markerRange.start.parent == elementBefore && markerRange.start.isAtEnd;\n\n            //               Start:  <p>[Foo</p><p>]Bar</p>\n            //         After merge:  <p>[Foo]Bar</p>\n            // After undoing split:  <p>[Foo]</p><p>Bar</p>     <-- incorrect, needs remembering for undo.\n            //\n            var affectedInRightElement = markerRange.end.parent == elementAfter && markerRange.end.offset == 0;\n\n            //               Start:  <p>[Foo</p>]<p>Bar</p>\n            //         After merge:  <p>[Foo]Bar</p>\n            // After undoing split:  <p>[Foo]</p><p>Bar</p>     <-- incorrect, needs remembering for undo.\n            //\n            var affectedAfterLeftElement = markerRange.end.nodeAfter == elementAfter;\n\n            //               Start:  <p>Foo</p>[<p>Bar]</p>\n            //         After merge:  <p>Foo[Bar]</p>\n            // After undoing split:  <p>Foo</p><p>[Bar]</p>     <-- incorrect, needs remembering for undo.\n            //\n            var affectedBeforeRightElement = markerRange.start.nodeAfter == elementAfter;\n            isAffected = affectedInLeftElement || affectedInRightElement || affectedAfterLeftElement || affectedBeforeRightElement;\n          }\n          if (isAffected) {\n            this.updateMarker(marker.name, {\n              range: markerRange\n            });\n          }\n        }\n      } catch (err) {\n        _iterator0.e(err);\n      } finally {\n        _iterator0.f();\n      }\n    }\n  }]);\n}(); // Sets given attribute to each node in given range. When attribute value is null then attribute will be removed.\n//\n// Because attribute operation needs to have the same attribute value on the whole range, this function splits\n// the range into smaller parts.\n//\n// Given `range` must be flat.\n//\n// @private\n// @param {module:engine/model/writer~Writer} writer\n// @param {String} key Attribute key.\n// @param {*} value Attribute new value.\n// @param {module:engine/model/range~Range} range Model range on which the attribute will be set.\nexport { Writer as default };\nfunction setAttributeOnRange(writer, key, value, range) {\n  var model = writer.model;\n  var doc = model.document;\n\n  // Position of the last split, the beginning of the new range.\n  var lastSplitPosition = range.start;\n\n  // Currently position in the scanning range. Because we need value after the position, it is not a current\n  // position of the iterator but the previous one (we need to iterate one more time to get the value after).\n  var position;\n\n  // Value before the currently position.\n  var valueBefore;\n\n  // Value after the currently position.\n  var valueAfter;\n  var _iterator1 = _createForOfIteratorHelper(range.getWalker({\n      shallow: true\n    })),\n    _step1;\n  try {\n    for (_iterator1.s(); !(_step1 = _iterator1.n()).done;) {\n      var val = _step1.value;\n      valueAfter = val.item.getAttribute(key);\n\n      // At the first run of the iterator the position in undefined. We also do not have a valueBefore, but\n      // because valueAfter may be null, valueBefore may be equal valueAfter ( undefined == null ).\n      if (position && valueBefore != valueAfter) {\n        // if valueBefore == value there is nothing to change, so we add operation only if these values are different.\n        if (valueBefore != value) {\n          addOperation();\n        }\n        lastSplitPosition = position;\n      }\n      position = val.nextPosition;\n      valueBefore = valueAfter;\n    }\n\n    // Because position in the loop is not the iterator position (see let position comment), the last position in\n    // the while loop will be last but one position in the range. We need to check the last position manually.\n  } catch (err) {\n    _iterator1.e(err);\n  } finally {\n    _iterator1.f();\n  }\n  if (position instanceof Position && position != lastSplitPosition && valueBefore != value) {\n    addOperation();\n  }\n  function addOperation() {\n    var range = new Range(lastSplitPosition, position);\n    var version = range.root.document ? doc.version : null;\n    var operation = new AttributeOperation(range, key, valueBefore, value, version);\n    writer.batch.addOperation(operation);\n    model.applyOperation(operation);\n  }\n}\n\n// Sets given attribute to the given node. When attribute value is null then attribute will be removed.\n//\n// @private\n// @param {module:engine/model/writer~Writer} writer\n// @param {String} key Attribute key.\n// @param {*} value Attribute new value.\n// @param {module:engine/model/item~Item} item Model item on which the attribute will be set.\nfunction setAttributeOnItem(writer, key, value, item) {\n  var model = writer.model;\n  var doc = model.document;\n  var previousValue = item.getAttribute(key);\n  var range, operation;\n  if (previousValue != value) {\n    var isRootChanged = item.root === item;\n    if (isRootChanged) {\n      // If we change attributes of root element, we have to use `RootAttributeOperation`.\n      var version = item.document ? doc.version : null;\n      operation = new RootAttributeOperation(item, key, previousValue, value, version);\n    } else {\n      range = new Range(Position._createBefore(item), writer.createPositionAfter(item));\n      var _version = range.root.document ? doc.version : null;\n      operation = new AttributeOperation(range, key, previousValue, value, _version);\n    }\n    writer.batch.addOperation(operation);\n    model.applyOperation(operation);\n  }\n}\n\n// Creates and applies marker operation to {@link module:engine/model/operation/operation~Operation operation}.\n//\n// @private\n// @param {module:engine/model/writer~Writer} writer\n// @param {String} name Marker name.\n// @param {module:engine/model/range~Range} oldRange Marker range before the change.\n// @param {module:engine/model/range~Range} newRange Marker range after the change.\n// @param {Boolean} affectsData\nfunction applyMarkerOperation(writer, name, oldRange, newRange, affectsData) {\n  var model = writer.model;\n  var doc = model.document;\n  var operation = new MarkerOperation(name, oldRange, newRange, model.markers, affectsData, doc.version);\n  writer.batch.addOperation(operation);\n  model.applyOperation(operation);\n}\n\n// Creates `MoveOperation` or `DetachOperation` that removes `howMany` nodes starting from `position`.\n// The operation will be applied on given model instance and added to given operation instance.\n//\n// @private\n// @param {module:engine/model/position~Position} position Position from which nodes are removed.\n// @param {Number} howMany Number of nodes to remove.\n// @param {Batch} batch Batch to which the operation will be added.\n// @param {module:engine/model/model~Model} model Model instance on which operation will be applied.\nfunction applyRemoveOperation(position, howMany, batch, model) {\n  var operation;\n  if (position.root.document) {\n    var doc = model.document;\n    var graveyardPosition = new Position(doc.graveyard, [0]);\n    operation = new MoveOperation(position, howMany, graveyardPosition, doc.version);\n  } else {\n    operation = new DetachOperation(position, howMany);\n  }\n  batch.addOperation(operation);\n  model.applyOperation(operation);\n}\n\n// Returns `true` if both root elements are the same element or both are documents root elements.\n//\n// Elements in the same tree can be moved (for instance you can move element form one documents root to another, or\n// within the same document fragment), but when element supposed to be moved from document fragment to the document, or\n// to another document it should be removed and inserted to avoid problems with OT. This is because features like undo or\n// collaboration may track changes on the document but ignore changes on detached fragments and should not get\n// unexpected `move` operation.\nfunction isSameTree(rootA, rootB) {\n  // If it is the same root this is the same tree.\n  if (rootA === rootB) {\n    return true;\n  }\n\n  // If both roots are documents root it is operation within the document what we still treat as the same tree.\n  if (rootA instanceof RootElement && rootB instanceof RootElement) {\n    return true;\n  }\n  return false;\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/utils/bindtwostepcarettoattribute\n */\n\nimport { keyCodes } from '@ckeditor/ckeditor5-utils/src/keyboard';\nimport priorities from '@ckeditor/ckeditor5-utils/src/priorities';\n\n/**\n * This helper enables the two-step caret (phantom) movement behavior for the given {@link module:engine/model/model~Model}\n * attribute on arrow right (<kbd>→</kbd>) and left (<kbd>←</kbd>) key press.\n *\n * Thanks to this (phantom) caret movement the user is able to type before/after as well as at the\n * beginning/end of an attribute.\n *\n * **Note:** This helper support right–to–left (Arabic, Hebrew, etc.) content by mirroring its behavior\n * but for the sake of simplicity examples showcase only left–to–right use–cases.\n *\n * # Forward movement\n *\n * ## \"Entering\" an attribute:\n *\n * When this behavior is enabled for the `a` attribute and the selection is right before it\n * (at the attribute boundary), pressing the right arrow key will not move the selection but update its\n * attributes accordingly:\n *\n * * When enabled:\n *\n *   \t\tfoo{}<$text a=\"true\">bar</$text>\n *\n *    <kbd>→</kbd>\n *\n *   \t\tfoo<$text a=\"true\">{}bar</$text>\n *\n * * When disabled:\n *\n *   \t\tfoo{}<$text a=\"true\">bar</$text>\n *\n *   <kbd>→</kbd>\n *\n *   \t\tfoo<$text a=\"true\">b{}ar</$text>\n *\n *\n * ## \"Leaving\" an attribute:\n *\n * * When enabled:\n *\n *   \t\t<$text a=\"true\">bar{}</$text>baz\n *\n *    <kbd>→</kbd>\n *\n *   \t\t<$text a=\"true\">bar</$text>{}baz\n *\n * * When disabled:\n *\n *   \t\t<$text a=\"true\">bar{}</$text>baz\n *\n *   <kbd>→</kbd>\n *\n *   \t\t<$text a=\"true\">bar</$text>b{}az\n *\n * # Backward movement\n *\n * * When enabled:\n *\n *   \t\t<$text a=\"true\">bar</$text>{}baz\n *\n *    <kbd>←</kbd>\n *\n *   \t\t<$text a=\"true\">bar{}</$text>baz\n *\n * * When disabled:\n *\n *   \t\t<$text a=\"true\">bar</$text>{}baz\n *\n *   <kbd>←</kbd>\n *\n *   \t\t<$text a=\"true\">ba{}r</$text>b{}az\n *\n * @param {Object} options Helper options.\n * @param {module:engine/view/view~View} options.view View controller instance.\n * @param {module:engine/model/model~Model} options.model Data model instance.\n * @param {module:utils/dom/emittermixin~Emitter} options.emitter The emitter to which this behavior should be added\n * (e.g. a plugin instance).\n * @param {String} options.attribute Attribute for which this behavior will be added.\n * @param {module:utils/locale~Locale} options.locale The {@link module:core/editor/editor~Editor#locale} instance.\n */\nexport default function bindTwoStepCaretToAttribute(_ref) {\n  var view = _ref.view,\n    model = _ref.model,\n    emitter = _ref.emitter,\n    attribute = _ref.attribute,\n    locale = _ref.locale;\n  var twoStepCaretHandler = new TwoStepCaretHandler(model, emitter, attribute);\n  var modelSelection = model.document.selection;\n\n  // Listen to keyboard events and handle the caret movement according to the 2-step caret logic.\n  //\n  // Note: This listener has the \"high+1\" priority:\n  // * \"high\" because of the filler logic implemented in the renderer which also engages on #keydown.\n  // When the gravity is overridden the attributes of the (model) selection attributes are reset.\n  // It may end up with the filler kicking in and breaking the selection.\n  // * \"+1\" because we would like to avoid collisions with other features (like Widgets), which\n  // take over the keydown events with the \"high\" priority. Two-step caret movement takes precedence\n  // over Widgets in that matter.\n  //\n  // Find out more in https://github.com/ckeditor/ckeditor5-engine/issues/1301.\n  emitter.listenTo(view.document, 'keydown', function (evt, data) {\n    // This implementation works only for collapsed selection.\n    if (!modelSelection.isCollapsed) {\n      return;\n    }\n\n    // When user tries to expand the selection or jump over the whole word or to the beginning/end then\n    // two-steps movement is not necessary.\n    if (data.shiftKey || data.altKey || data.ctrlKey) {\n      return;\n    }\n    var arrowRightPressed = data.keyCode == keyCodes.arrowright;\n    var arrowLeftPressed = data.keyCode == keyCodes.arrowleft;\n\n    // When neither left or right arrow has been pressed then do noting.\n    if (!arrowRightPressed && !arrowLeftPressed) {\n      return;\n    }\n    var position = modelSelection.getFirstPosition();\n    var contentDirection = locale.contentLanguageDirection;\n    var isMovementHandled;\n    if (contentDirection === 'ltr' && arrowRightPressed || contentDirection === 'rtl' && arrowLeftPressed) {\n      isMovementHandled = twoStepCaretHandler.handleForwardMovement(position, data);\n    } else {\n      isMovementHandled = twoStepCaretHandler.handleBackwardMovement(position, data);\n    }\n\n    // Stop the keydown event if the two-step caret movement handled it. Avoid collisions\n    // with other features which may also take over the caret movement (e.g. Widget).\n    if (isMovementHandled) {\n      evt.stop();\n    }\n  }, {\n    priority: priorities.get('high') + 1\n  });\n}\n\n/**\n * This is a protected helper–class for {@link module:engine/utils/bindtwostepcarettoattribute}.\n * It handles the state of the 2-step caret movement for a single {@link module:engine/model/model~Model}\n * attribute upon the `keypress` in the {@link module:engine/view/view~View}.\n *\n * @protected\n */\nexport var TwoStepCaretHandler = /*#__PURE__*/function () {\n  /*\n   * Creates two step handler instance.\n   *\n   * @param {module:engine/model/model~Model} model Data model instance.\n   * @param {module:utils/dom/emittermixin~Emitter} emitter The emitter to which this behavior should be added\n   * (e.g. a plugin instance).\n   * @param {String} attribute Attribute for which the behavior will be added.\n   */\n  function TwoStepCaretHandler(model, emitter, attribute) {\n    var _this = this;\n    _classCallCheck(this, TwoStepCaretHandler);\n    /**\n     * The model instance this class instance operates on.\n     *\n     * @readonly\n     * @member {module:engine/model/model~Model#schema}\n     */\n    this.model = model;\n\n    /**\n     * The Attribute this class instance operates on.\n     *\n     * @readonly\n     * @member {String}\n     */\n    this.attribute = attribute;\n\n    /**\n     * A reference to the document selection.\n     *\n     * @private\n     * @member {module:engine/model/selection~Selection}\n     */\n    this._modelSelection = model.document.selection;\n\n    /**\n     * The current UID of the overridden gravity, as returned by\n     * {@link module:engine/model/writer~Writer#overrideSelectionGravity}.\n     *\n     * @private\n     * @member {String}\n     */\n    this._overrideUid = null;\n\n    /**\n     * A flag indicating that the automatic gravity restoration for this attribute\n     * should not happen upon the next\n     * {@link module:engine/model/selection~Selection#event:change:range} event.\n     *\n     * @private\n     * @member {String}\n     */\n    this._isNextGravityRestorationSkipped = false;\n\n    // The automatic gravity restoration logic.\n    emitter.listenTo(this._modelSelection, 'change:range', function (evt, data) {\n      // Skipping the automatic restoration is needed if the selection should change\n      // but the gravity must remain overridden afterwards. See the #handleBackwardMovement\n      // to learn more.\n      if (_this._isNextGravityRestorationSkipped) {\n        _this._isNextGravityRestorationSkipped = false;\n        return;\n      }\n\n      // Skip automatic restore when the gravity is not overridden — simply, there's nothing to restore\n      // at this moment.\n      if (!_this._isGravityOverridden) {\n        return;\n      }\n\n      // Skip automatic restore when the change is indirect AND the selection is at the attribute boundary.\n      // It means that e.g. if the change was external (collaboration) and the user had their\n      // selection around the link, its gravity should remain intact in this change:range event.\n      if (!data.directChange && isAtBoundary(_this._modelSelection.getFirstPosition(), attribute)) {\n        return;\n      }\n      _this._restoreGravity();\n    });\n  }\n\n  /**\n   * Updates the document selection and the view according to the two–step caret movement state\n   * when moving **forwards**. Executed upon `keypress` in the {@link module:engine/view/view~View}.\n   *\n   * @param {module:engine/model/position~Position} position The model position at the moment of the key press.\n   * @param {module:engine/view/observer/domeventdata~DomEventData} data Data of the key press.\n   * @returns {Boolean} `true` when the handler prevented caret movement\n   */\n  return _createClass(TwoStepCaretHandler, [{\n    key: \"handleForwardMovement\",\n    value: function handleForwardMovement(position, data) {\n      var attribute = this.attribute;\n\n      // DON'T ENGAGE 2-SCM if gravity is already overridden. It means that we just entered\n      //\n      // \t\t<paragraph>foo<$text attribute>{}bar</$text>baz</paragraph>\n      //\n      // or left the attribute\n      //\n      // \t\t<paragraph>foo<$text attribute>bar</$text>{}baz</paragraph>\n      //\n      // and the gravity will be restored automatically.\n      if (this._isGravityOverridden) {\n        return;\n      }\n\n      // DON'T ENGAGE 2-SCM when the selection is at the beginning of the block AND already has the\n      // attribute:\n      // * when the selection was initially set there using the mouse,\n      // * when the editor has just started\n      //\n      //\t\t<paragraph><$text attribute>{}bar</$text>baz</paragraph>\n      //\n      if (position.isAtStart && this._hasSelectionAttribute) {\n        return;\n      }\n\n      // ENGAGE 2-SCM when about to leave one attribute value and enter another:\n      //\n      // \t\t<paragraph><$text attribute=\"1\">foo{}</$text><$text attribute=\"2\">bar</$text></paragraph>\n      //\n      // but DON'T when already in between of them (no attribute selection):\n      //\n      // \t\t<paragraph><$text attribute=\"1\">foo</$text>{}<$text attribute=\"2\">bar</$text></paragraph>\n      //\n      if (isBetweenDifferentValues(position, attribute) && this._hasSelectionAttribute) {\n        this._preventCaretMovement(data);\n        this._removeSelectionAttribute();\n        return true;\n      }\n\n      // ENGAGE 2-SCM when entering an attribute:\n      //\n      // \t\t<paragraph>foo{}<$text attribute>bar</$text>baz</paragraph>\n      //\n      if (isAtStartBoundary(position, attribute)) {\n        this._preventCaretMovement(data);\n        this._overrideGravity();\n        return true;\n      }\n\n      // ENGAGE 2-SCM when leaving an attribute:\n      //\n      //\t\t<paragraph>foo<$text attribute>bar{}</$text>baz</paragraph>\n      //\n      if (isAtEndBoundary(position, attribute) && this._hasSelectionAttribute) {\n        this._preventCaretMovement(data);\n        this._overrideGravity();\n        return true;\n      }\n    }\n\n    /**\n     * Updates the document selection and the view according to the two–step caret movement state\n     * when moving **backwards**. Executed upon `keypress` in the {@link module:engine/view/view~View}.\n     *\n     * @param {module:engine/model/position~Position} position The model position at the moment of the key press.\n     * @param {module:engine/view/observer/domeventdata~DomEventData} data Data of the key press.\n     * @returns {Boolean} `true` when the handler prevented caret movement\n     */\n  }, {\n    key: \"handleBackwardMovement\",\n    value: function handleBackwardMovement(position, data) {\n      var attribute = this.attribute;\n\n      // When the gravity is already overridden...\n      if (this._isGravityOverridden) {\n        // ENGAGE 2-SCM & REMOVE SELECTION ATTRIBUTE\n        // when about to leave one attribute value and enter another:\n        //\n        // \t\t<paragraph><$text attribute=\"1\">foo</$text><$text attribute=\"2\">{}bar</$text></paragraph>\n        //\n        // but DON'T when already in between of them (no attribute selection):\n        //\n        // \t\t<paragraph><$text attribute=\"1\">foo</$text>{}<$text attribute=\"2\">bar</$text></paragraph>\n        //\n        if (isBetweenDifferentValues(position, attribute) && this._hasSelectionAttribute) {\n          this._preventCaretMovement(data);\n          this._restoreGravity();\n          this._removeSelectionAttribute();\n          return true;\n        }\n\n        // ENGAGE 2-SCM when at any boundary of the attribute:\n        //\n        // \t\t<paragraph>foo<$text attribute>bar</$text>{}baz</paragraph>\n        // \t\t<paragraph>foo<$text attribute>{}bar</$text>baz</paragraph>\n        //\n        else {\n          this._preventCaretMovement(data);\n          this._restoreGravity();\n\n          // REMOVE SELECTION ATRIBUTE at the beginning of the block.\n          // It's like restoring gravity but towards a non-existent content when\n          // the gravity is overridden:\n          //\n          // \t\t<paragraph><$text attribute>{}bar</$text></paragraph>\n          //\n          // becomes:\n          //\n          // \t\t<paragraph>{}<$text attribute>bar</$text></paragraph>\n          //\n          if (position.isAtStart) {\n            this._removeSelectionAttribute();\n          }\n          return true;\n        }\n      } else {\n        // ENGAGE 2-SCM when between two different attribute values but selection has no attribute:\n        //\n        // \t\t<paragraph><$text attribute=\"1\">foo</$text>{}<$text attribute=\"2\">bar</$text></paragraph>\n        //\n        if (isBetweenDifferentValues(position, attribute) && !this._hasSelectionAttribute) {\n          this._preventCaretMovement(data);\n          this._setSelectionAttributeFromTheNodeBefore(position);\n          return true;\n        }\n\n        // End of block boundary cases:\n        //\n        // \t\t<paragraph><$text attribute>bar{}</$text></paragraph>\n        // \t\t<paragraph><$text attribute>bar</$text>{}</paragraph>\n        //\n        if (position.isAtEnd && isAtEndBoundary(position, attribute)) {\n          // DON'T ENGAGE 2-SCM if the selection has the attribute already.\n          // This is a common selection if set using the mouse.\n          //\n          // \t\t<paragraph><$text attribute>bar{}</$text></paragraph>\n          //\n          if (this._hasSelectionAttribute) {\n            // DON'T ENGAGE 2-SCM if the attribute at the end of the block which has length == 1.\n            // Make sure the selection will not the attribute after it moves backwards.\n            //\n            // \t\t<paragraph>foo<$text attribute>b{}</$text></paragraph>\n            //\n            if (isStepAfterTheAttributeBoundary(position, attribute)) {\n              // Skip the automatic gravity restore upon the next selection#change:range event.\n              // If not skipped, it would automatically restore the gravity, which should remain\n              // overridden.\n              this._skipNextAutomaticGravityRestoration();\n              this._overrideGravity();\n\n              // Don't return \"true\" here because we didn't call _preventCaretMovement.\n              // Returning here will destabilize the filler logic, which also listens to\n              // keydown (and the event would be stopped).\n            }\n            return;\n          }\n          // ENGAGE 2-SCM if the selection has no attribute. This may happen when the user\n          // left the attribute using a FORWARD 2-SCM.\n          //\n          // \t\t<paragraph><$text attribute>bar</$text>{}</paragraph>\n          //\n          else {\n            this._preventCaretMovement(data);\n            this._setSelectionAttributeFromTheNodeBefore(position);\n            return true;\n          }\n        }\n\n        // REMOVE SELECTION ATRIBUTE when restoring gravity towards a non-existent content at the\n        // beginning of the block.\n        //\n        // \t\t<paragraph>{}<$text attribute>bar</$text></paragraph>\n        //\n        if (position.isAtStart) {\n          if (this._hasSelectionAttribute) {\n            this._removeSelectionAttribute();\n            this._preventCaretMovement(data);\n            return true;\n          }\n          return;\n        }\n\n        // DON'T ENGAGE 2-SCM when about to enter of leave an attribute.\n        // We need to check if the caret is a one position before the attribute boundary:\n        //\n        // \t\t<paragraph>foo<$text attribute>b{}ar</$text>baz</paragraph>\n        // \t\t<paragraph>foo<$text attribute>bar</$text>b{}az</paragraph>\n        //\n        if (isStepAfterTheAttributeBoundary(position, attribute)) {\n          // Skip the automatic gravity restore upon the next selection#change:range event.\n          // If not skipped, it would automatically restore the gravity, which should remain\n          // overridden.\n          this._skipNextAutomaticGravityRestoration();\n          this._overrideGravity();\n\n          // Don't return \"true\" here because we didn't call _preventCaretMovement.\n          // Returning here will destabilize the filler logic, which also listens to\n          // keydown (and the event would be stopped).\n        }\n      }\n    }\n\n    /**\n     * `true` when the gravity is overridden for the {@link #attribute}.\n     *\n     * @readonly\n     * @private\n     * @type {Boolean}\n     */\n  }, {\n    key: \"_isGravityOverridden\",\n    get: function get() {\n      return !!this._overrideUid;\n    }\n\n    /**\n     * `true` when the {@link module:engine/model/selection~Selection} has the {@link #attribute}.\n     *\n     * @readonly\n     * @private\n     * @type {Boolean}\n     */\n  }, {\n    key: \"_hasSelectionAttribute\",\n    get: function get() {\n      return this._modelSelection.hasAttribute(this.attribute);\n    }\n\n    /**\n     * Overrides the gravity using the {@link module:engine/model/writer~Writer model writer}\n     * and stores the information about this fact in the {@link #_overrideUid}.\n     *\n     * A shorthand for {@link module:engine/model/writer~Writer#overrideSelectionGravity}.\n     *\n     * @private\n     */\n  }, {\n    key: \"_overrideGravity\",\n    value: function _overrideGravity() {\n      this._overrideUid = this.model.change(function (writer) {\n        return writer.overrideSelectionGravity();\n      });\n    }\n\n    /**\n     * Restores the gravity using the {@link module:engine/model/writer~Writer model writer}.\n     *\n     * A shorthand for {@link module:engine/model/writer~Writer#restoreSelectionGravity}.\n     *\n     * @private\n     */\n  }, {\n    key: \"_restoreGravity\",\n    value: function _restoreGravity() {\n      var _this2 = this;\n      this.model.change(function (writer) {\n        writer.restoreSelectionGravity(_this2._overrideUid);\n        _this2._overrideUid = null;\n      });\n    }\n\n    /**\n     * Prevents the caret movement in the view by calling `preventDefault` on the event data.\n     *\n     * @private\n     */\n  }, {\n    key: \"_preventCaretMovement\",\n    value: function _preventCaretMovement(data) {\n      data.preventDefault();\n    }\n\n    /**\n     * Removes the {@link #attribute} from the selection using using the\n     * {@link module:engine/model/writer~Writer model writer}.\n     *\n     * @private\n     */\n  }, {\n    key: \"_removeSelectionAttribute\",\n    value: function _removeSelectionAttribute() {\n      var _this3 = this;\n      this.model.change(function (writer) {\n        writer.removeSelectionAttribute(_this3.attribute);\n      });\n    }\n\n    /**\n     * Applies the {@link #attribute} to the current selection using using the\n     * value from the node before the current position. Uses\n     * the {@link module:engine/model/writer~Writer model writer}.\n     *\n     * @private\n     * @param {module:engine/model/position~Position} position\n     */\n  }, {\n    key: \"_setSelectionAttributeFromTheNodeBefore\",\n    value: function _setSelectionAttributeFromTheNodeBefore(position) {\n      var _this4 = this;\n      var attribute = this.attribute;\n      this.model.change(function (writer) {\n        writer.setSelectionAttribute(_this4.attribute, position.nodeBefore.getAttribute(attribute));\n      });\n    }\n\n    /**\n     * Skips the next automatic selection gravity restoration upon the\n     * {@link module:engine/model/selection~Selection#event:change:range} event.\n     *\n     * See {@link #_isNextGravityRestorationSkipped}.\n     *\n     * @private\n     */\n  }, {\n    key: \"_skipNextAutomaticGravityRestoration\",\n    value: function _skipNextAutomaticGravityRestoration() {\n      this._isNextGravityRestorationSkipped = true;\n    }\n  }]);\n}();\n\n// @param {module:engine/model/position~Position} position\n// @param {String} attribute\n// @returns {Boolean} `true` when position between the nodes sticks to the bound of text with given attribute.\nfunction isAtBoundary(position, attribute) {\n  return isAtStartBoundary(position, attribute) || isAtEndBoundary(position, attribute);\n}\n\n// @param {module:engine/model/position~Position} position\n// @param {String} attribute\nfunction isAtStartBoundary(position, attribute) {\n  var nodeBefore = position.nodeBefore,\n    nodeAfter = position.nodeAfter;\n  var isAttrBefore = nodeBefore ? nodeBefore.hasAttribute(attribute) : false;\n  var isAttrAfter = nodeAfter ? nodeAfter.hasAttribute(attribute) : false;\n  return isAttrAfter && (!isAttrBefore || nodeBefore.getAttribute(attribute) !== nodeAfter.getAttribute(attribute));\n}\n\n// @param {module:engine/model/position~Position} position\n// @param {String} attribute\nfunction isAtEndBoundary(position, attribute) {\n  var nodeBefore = position.nodeBefore,\n    nodeAfter = position.nodeAfter;\n  var isAttrBefore = nodeBefore ? nodeBefore.hasAttribute(attribute) : false;\n  var isAttrAfter = nodeAfter ? nodeAfter.hasAttribute(attribute) : false;\n  return isAttrBefore && (!isAttrAfter || nodeBefore.getAttribute(attribute) !== nodeAfter.getAttribute(attribute));\n}\n\n// @param {module:engine/model/position~Position} position\n// @param {String} attribute\nfunction isBetweenDifferentValues(position, attribute) {\n  var nodeBefore = position.nodeBefore,\n    nodeAfter = position.nodeAfter;\n  var isAttrBefore = nodeBefore ? nodeBefore.hasAttribute(attribute) : false;\n  var isAttrAfter = nodeAfter ? nodeAfter.hasAttribute(attribute) : false;\n  if (!isAttrAfter || !isAttrBefore) {\n    return;\n  }\n  return nodeAfter.getAttribute(attribute) !== nodeBefore.getAttribute(attribute);\n}\n\n// @param {module:engine/model/position~Position} position\n// @param {String} attribute\nfunction isStepAfterTheAttributeBoundary(position, attribute) {\n  return isAtBoundary(position.getShiftedBy(-1), attribute);\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/attributeelement\n */\n\nimport Element from './element';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n// Default attribute priority.\nvar DEFAULT_PRIORITY = 10;\n\n/**\n * Attribute elements are used to represent formatting elements in the view (think – `<b>`, `<span style=\"font-size: 2em\">`, etc.).\n * Most often they are created when downcasting model text attributes.\n *\n * Editing engine does not define a fixed HTML DTD. This is why a feature developer needs to choose between various\n * types (container element, {@link module:engine/view/attributeelement~AttributeElement attribute element},\n * {@link module:engine/view/emptyelement~EmptyElement empty element}, etc) when developing a feature.\n *\n * To create a new attribute element instance use the\n * {@link module:engine/view/downcastwriter~DowncastWriter#createAttributeElement `DowncastWriter#createAttributeElement()`} method.\n *\n * @extends module:engine/view/element~Element\n */\nvar AttributeElement = /*#__PURE__*/function (_Element) {\n  /**\n   * Creates an attribute element.\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#createAttributeElement\n   * @see module:engine/view/element~Element\n   * @protected\n   */\n  function AttributeElement(name, attrs, children) {\n    var _this;\n    _classCallCheck(this, AttributeElement);\n    _this = _callSuper(this, AttributeElement, [name, attrs, children]);\n\n    /**\n     * Returns block {@link module:engine/view/filler filler} offset or `null` if block filler is not needed.\n     *\n     * @method #getFillerOffset\n     * @returns {Number|null} Block filler offset or `null` if block filler is not needed.\n     */\n    _this.getFillerOffset = getFillerOffset;\n\n    /**\n     * Element priority. Decides in what order elements are wrapped by {@link module:engine/view/downcastwriter~DowncastWriter}.\n     *\n     * @protected\n     * @member {Number}\n     */\n    _this._priority = DEFAULT_PRIORITY;\n\n    /**\n     * Element identifier. If set, it is used by {@link module:engine/view/element~Element#isSimilar},\n     * and then two elements are considered similar if, and only if they have the same `_id`.\n     *\n     * @protected\n     * @member {String|Number}\n     */\n    _this._id = null;\n\n    /**\n     * Keeps all the attribute elements that have the same {@link module:engine/view/attributeelement~AttributeElement#id ids}\n     * and still exist in the view tree.\n     *\n     * This property is managed by {@link module:engine/view/downcastwriter~DowncastWriter}.\n     *\n     * @protected\n     * @member {Set.<module:engine/view/attributeelement~AttributeElement>|null}\n     */\n    _this._clonesGroup = null;\n    return _this;\n  }\n\n  /**\n   * Element priority. Decides in what order elements are wrapped by {@link module:engine/view/downcastwriter~DowncastWriter}.\n   *\n   * @readonly\n   * @type {Number}\n   */\n  _inherits(AttributeElement, _Element);\n  return _createClass(AttributeElement, [{\n    key: \"priority\",\n    get: function get() {\n      return this._priority;\n    }\n\n    /**\n     * Element identifier. If set, it is used by {@link module:engine/view/element~Element#isSimilar},\n     * and then two elements are considered similar if, and only if they have the same `id`.\n     *\n     * @readonly\n     * @type {String|Number}\n     */\n  }, {\n    key: \"id\",\n    get: function get() {\n      return this._id;\n    }\n\n    /**\n     * Returns all {@link module:engine/view/attributeelement~AttributeElement attribute elements} that has the\n     * same {@link module:engine/view/attributeelement~AttributeElement#id id} and are in the view tree (were not removed).\n     *\n     * Note: If this element has been removed from the tree, returned set will not include it.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError attribute-element-get-elements-with-same-id-no-id}\n     * if this element has no `id`.\n     *\n     * @returns {Set.<module:engine/view/attributeelement~AttributeElement>} Set containing all the attribute elements\n     * with the same `id` that were added and not removed from the view tree.\n     */\n  }, {\n    key: \"getElementsWithSameId\",\n    value: function getElementsWithSameId() {\n      if (this.id === null) {\n        /**\n         * Cannot get elements with the same id for an attribute element without id.\n         *\n         * @error attribute-element-get-elements-with-same-id-no-id\n         */\n        throw new CKEditorError('attribute-element-get-elements-with-same-id-no-id: ' + 'Cannot get elements with the same id for an attribute element without id.', this);\n      }\n      return new Set(this._clonesGroup);\n    }\n\n    /**\n     * Checks whether this object is of the given.\n     *\n     *\t\tattributeElement.is( 'attributeElement' ); // -> true\n     *\t\tattributeElement.is( 'element' ); // -> true\n     *\t\tattributeElement.is( 'node' ); // -> true\n     *\t\tattributeElement.is( 'view:attributeElement' ); // -> true\n     *\t\tattributeElement.is( 'view:element' ); // -> true\n     *\t\tattributeElement.is( 'view:node' ); // -> true\n     *\n     *\t\tattributeElement.is( 'model:element' ); // -> false\n     *\t\tattributeElement.is( 'documentFragment' ); // -> false\n     *\n     * Assuming that the object being checked is an attribute element, you can also check its\n     * {@link module:engine/view/attributeelement~AttributeElement#name name}:\n     *\n     *\t\tattributeElement.is( 'b' ); // -> true if this is a bold element\n     *\t\tattributeElement.is( 'attributeElement', 'b' ); // -> same as above\n     *\t\ttext.is( 'b' ); -> false\n     *\n     * {@link module:engine/view/node~Node#is Check the entire list of view objects} which implement the `is()` method.\n     *\n     * @param {String} type Type to check when `name` parameter is present.\n     * Otherwise, it acts like the `name` parameter.\n     * @param {String} [name] Element name.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var cutType = type && type.replace(/^view:/, '');\n      if (!name) {\n        return cutType == 'attributeElement' || _superPropGet(AttributeElement, \"is\", this, 3)([type]);\n      } else {\n        return cutType == 'attributeElement' && name == this.name || _superPropGet(AttributeElement, \"is\", this, 3)([type, name]);\n      }\n    }\n\n    /**\n     * Checks if this element is similar to other element.\n     *\n     * If none of elements has set {@link module:engine/view/attributeelement~AttributeElement#id}, then both elements\n     * should have the same name, attributes and priority to be considered as similar. Two similar elements can contain\n     * different set of children nodes.\n     *\n     * If at least one element has {@link module:engine/view/attributeelement~AttributeElement#id} set, then both\n     * elements have to have the same {@link module:engine/view/attributeelement~AttributeElement#id} value to be\n     * considered similar.\n     *\n     * Similarity is important for {@link module:engine/view/downcastwriter~DowncastWriter}. For example:\n     *\n     * * two following similar elements can be merged together into one, longer element,\n     * * {@link module:engine/view/downcastwriter~DowncastWriter#unwrap} checks similarity of passed element and processed element to\n     * decide whether processed element should be unwrapped,\n     * * etc.\n     *\n     * @param {module:engine/view/element~Element} otherElement\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"isSimilar\",\n    value: function isSimilar(otherElement) {\n      // If any element has an `id` set, just compare the ids.\n      if (this.id !== null || otherElement.id !== null) {\n        return this.id === otherElement.id;\n      }\n      return _superPropGet(AttributeElement, \"isSimilar\", this, 3)([otherElement]) && this.priority == otherElement.priority;\n    }\n\n    /**\n     * Clones provided element with priority.\n     *\n     * @protected\n     * @param {Boolean} deep If set to `true` clones element and all its children recursively. When set to `false`,\n     * element will be cloned without any children.\n     * @returns {module:engine/view/attributeelement~AttributeElement} Clone of this element.\n     */\n  }, {\n    key: \"_clone\",\n    value: function _clone(deep) {\n      var cloned = _superPropGet(AttributeElement, \"_clone\", this, 3)([deep]);\n\n      // Clone priority too.\n      cloned._priority = this._priority;\n\n      // And id too.\n      cloned._id = this._id;\n      return cloned;\n    }\n  }]);\n}(Element);\n/**\n * Default attribute priority.\n *\n * @member {Number} module:engine/view/attributeelement~AttributeElement.DEFAULT_PRIORITY\n */\nexport { AttributeElement as default };\nAttributeElement.DEFAULT_PRIORITY = DEFAULT_PRIORITY;\n\n// Returns block {@link module:engine/view/filler~Filler filler} offset or `null` if block filler is not needed.\n//\n// @returns {Number|null} Block filler offset or `null` if block filler is not needed.\nfunction getFillerOffset() {\n  // <b>foo</b> does not need filler.\n  if (nonUiChildrenCount(this)) {\n    return null;\n  }\n  var element = this.parent;\n\n  // <p><b></b></p> needs filler -> <p><b><br></b></p>\n  while (element && element.is('attributeElement')) {\n    if (nonUiChildrenCount(element) > 1) {\n      return null;\n    }\n    element = element.parent;\n  }\n  if (!element || nonUiChildrenCount(element) > 1) {\n    return null;\n  }\n\n  // Render block filler at the end of element (after all ui elements).\n  return this.childCount;\n}\n\n// Returns total count of children that are not {@link module:engine/view/uielement~UIElement UIElements}.\n//\n// @param {module:engine/view/element~Element} element\n// @returns {Number}\nfunction nonUiChildrenCount(element) {\n  return Array.from(element.getChildren()).filter(function (element) {\n    return !element.is('uiElement');\n  }).length;\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _toConsumableArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/containerelement\n */\n\nimport Element from './element';\n\n/**\n * Containers are elements which define document structure. They define boundaries for\n * {@link module:engine/view/attributeelement~AttributeElement attributes}. They are mostly used for block elements like `<p>` or `<div>`.\n *\n * Editing engine does not define a fixed HTML DTD. This is why a feature developer needs to choose between various\n * types (container element, {@link module:engine/view/attributeelement~AttributeElement attribute element},\n * {@link module:engine/view/emptyelement~EmptyElement empty element}, etc) when developing a feature.\n *\n * The container element should be your default choice when writing a converter, unless:\n *\n * * this element represents a model text attribute (then use {@link module:engine/view/attributeelement~AttributeElement}),\n * * this is an empty element like `<img>` (then use {@link module:engine/view/emptyelement~EmptyElement}),\n * * this is a root element,\n * * this is a nested editable element (then use  {@link module:engine/view/editableelement~EditableElement}).\n *\n * To create a new container element instance use the\n * {@link module:engine/view/downcastwriter~DowncastWriter#createContainerElement `DowncastWriter#createContainerElement()`}\n * method.\n *\n * @extends module:engine/view/element~Element\n */\nvar ContainerElement = /*#__PURE__*/function (_Element) {\n  /**\n   * Creates a container element.\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#createContainerElement\n   * @see module:engine/view/element~Element\n   * @protected\n   */\n  function ContainerElement(name, attrs, children) {\n    var _this;\n    _classCallCheck(this, ContainerElement);\n    _this = _callSuper(this, ContainerElement, [name, attrs, children]);\n\n    /**\n     * Returns block {@link module:engine/view/filler filler} offset or `null` if block filler is not needed.\n     *\n     * @method #getFillerOffset\n     * @returns {Number|null} Block filler offset or `null` if block filler is not needed.\n     */\n    _this.getFillerOffset = getFillerOffset;\n    return _this;\n  }\n\n  /**\n   * Checks whether this object is of the given.\n   *\n   *\t\tcontainerElement.is( 'containerElement' ); // -> true\n   *\t\tcontainerElement.is( 'element' ); // -> true\n   *\t\tcontainerElement.is( 'node' ); // -> true\n   *\t\tcontainerElement.is( 'view:containerElement' ); // -> true\n   *\t\tcontainerElement.is( 'view:element' ); // -> true\n   *\t\tcontainerElement.is( 'view:node' ); // -> true\n   *\n   *\t\tcontainerElement.is( 'model:element' ); // -> false\n   *\t\tcontainerElement.is( 'documentFragment' ); // -> false\n   *\n   * Assuming that the object being checked is a container element, you can also check its\n   * {@link module:engine/view/containerelement~ContainerElement#name name}:\n   *\n   *\t\tcontainerElement.is( 'div' ); // -> true if this is a div container element\n   *\t\tcontainerElement.is( 'contaienrElement', 'div' ); // -> same as above\n   *\t\ttext.is( 'div' ); -> false\n   *\n   * {@link module:engine/view/node~Node#is Check the entire list of view objects} which implement the `is()` method.\n   *\n   * @param {String} type Type to check when `name` parameter is present.\n   * Otherwise, it acts like the `name` parameter.\n   * @param {String} [name] Element name.\n   * @returns {Boolean}\n   */\n  _inherits(ContainerElement, _Element);\n  return _createClass(ContainerElement, [{\n    key: \"is\",\n    value: function is(type) {\n      var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var cutType = type && type.replace(/^view:/, '');\n      if (!name) {\n        return cutType == 'containerElement' || _superPropGet(ContainerElement, \"is\", this, 3)([type]);\n      } else {\n        return cutType == 'containerElement' && name == this.name || _superPropGet(ContainerElement, \"is\", this, 3)([type, name]);\n      }\n    }\n  }]);\n}(Element);\n/**\n * Returns block {@link module:engine/view/filler filler} offset or `null` if block filler is not needed.\n *\n * @returns {Number|null} Block filler offset or `null` if block filler is not needed.\n */\nexport { ContainerElement as default };\nexport function getFillerOffset() {\n  var children = _toConsumableArray(this.getChildren());\n  var lastChild = children[this.childCount - 1];\n\n  // Block filler is required after a `<br>` if it's the last element in its container. See #1422.\n  if (lastChild && lastChild.is('element', 'br')) {\n    return this.childCount;\n  }\n  var _iterator = _createForOfIteratorHelper(children),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var child = _step.value;\n      // If there's any non-UI element – don't render the bogus.\n      if (!child.is('uiElement')) {\n        return null;\n      }\n    }\n\n    // If there are only UI elements – render the bogus at the end of the element.\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  return this.childCount;\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/document\n */\n\nimport DocumentSelection from './documentselection';\nimport Collection from '@ckeditor/ckeditor5-utils/src/collection';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';\n\n/**\n * Document class creates an abstract layer over the content editable area, contains a tree of view elements and\n * {@link module:engine/view/documentselection~DocumentSelection view selection} associated with this document.\n *\n * @mixes module:utils/observablemixin~ObservableMixin\n */\nvar Document = /*#__PURE__*/function () {\n  /**\n   * Creates a Document instance.\n   */\n  function Document() {\n    _classCallCheck(this, Document);\n    /**\n     * Selection done on this document.\n     *\n     * @readonly\n     * @member {module:engine/view/documentselection~DocumentSelection} module:engine/view/document~Document#selection\n     */\n    this.selection = new DocumentSelection();\n\n    /**\n     * Roots of the view tree. Collection of the {@link module:engine/view/element~Element view elements}.\n     *\n     * View roots are created as a result of binding between {@link module:engine/view/document~Document#roots} and\n     * {@link module:engine/model/document~Document#roots} and this is handled by\n     * {@link module:engine/controller/editingcontroller~EditingController}, so to create view root we need to create\n     * model root using {@link module:engine/model/document~Document#createRoot}.\n     *\n     * @readonly\n     * @member {module:utils/collection~Collection} module:engine/view/document~Document#roots\n     */\n    this.roots = new Collection({\n      idProperty: 'rootName'\n    });\n\n    /**\n     * Defines whether document is in read-only mode.\n     *\n     * When document is read-ony then all roots are read-only as well and caret placed inside this root is hidden.\n     *\n     * @observable\n     * @member {Boolean} #isReadOnly\n     */\n    this.set('isReadOnly', false);\n\n    /**\n     * True if document is focused.\n     *\n     * This property is updated by the {@link module:engine/view/observer/focusobserver~FocusObserver}.\n     * If the {@link module:engine/view/observer/focusobserver~FocusObserver} is disabled this property will not change.\n     *\n     * @readonly\n     * @observable\n     * @member {Boolean} module:engine/view/document~Document#isFocused\n     */\n    this.set('isFocused', false);\n\n    /**\n     * True if composition is in progress inside the document.\n     *\n     * This property is updated by the {@link module:engine/view/observer/compositionobserver~CompositionObserver}.\n     * If the {@link module:engine/view/observer/compositionobserver~CompositionObserver} is disabled this property will not change.\n     *\n     * @readonly\n     * @observable\n     * @member {Boolean} module:engine/view/document~Document#isComposing\n     */\n    this.set('isComposing', false);\n\n    /**\n     * Post-fixer callbacks registered to the view document.\n     *\n     * @private\n     * @member {Set}\n     */\n    this._postFixers = new Set();\n  }\n\n  /**\n   * Gets a {@link module:engine/view/document~Document#roots view root element} with the specified name. If the name is not\n   * specific \"main\" root is returned.\n   *\n   * @param {String} [name='main'] Name of the root.\n   * @returns {module:engine/view/rooteditableelement~RootEditableElement|null} The view root element with the specified name\n   * or null when there is no root of given name.\n   */\n  return _createClass(Document, [{\n    key: \"getRoot\",\n    value: function getRoot() {\n      var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'main';\n      return this.roots.get(name);\n    }\n\n    /**\n     * Allows registering post-fixer callbacks. A post-fixers mechanism allows to update the view tree just before it is rendered\n     * to the DOM.\n     *\n     * Post-fixers are executed right after all changes from the outermost change block were applied but\n     * before the {@link module:engine/view/view~View#event:render render event} is fired. If a post-fixer callback made\n     * a change, it should return `true`. When this happens, all post-fixers are fired again to check if something else should\n     * not be fixed in the new document tree state.\n     *\n     * View post-fixers are useful when you want to apply some fixes whenever the view structure changes. Keep in mind that\n     * changes executed in a view post-fixer should not break model-view mapping.\n     *\n     * The types of changes which should be safe:\n     *\n     * * adding or removing attribute from elements,\n     * * changes inside of {@link module:engine/view/uielement~UIElement UI elements},\n     * * {@link module:engine/model/differ~Differ#refreshItem marking some of the model elements to be re-converted}.\n     *\n     * Try to avoid changes which touch view structure:\n     *\n     * * you should not add or remove nor wrap or unwrap any view elements,\n     * * you should not change the editor data model in a view post-fixer.\n     *\n     * As a parameter, a post-fixer callback receives a {@link module:engine/view/downcastwriter~DowncastWriter downcast writer}.\n     *\n     * Typically, a post-fixer will look like this:\n     *\n     *\t\teditor.editing.view.document.registerPostFixer( writer => {\n     *\t\t\tif ( checkSomeCondition() ) {\n     *\t\t\t\twriter.doSomething();\n     *\n     *\t\t\t\t// Let other post-fixers know that something changed.\n     *\t\t\t\treturn true;\n     *\t\t\t}\n     *\t\t} );\n     *\n     * Note that nothing happens right after you register a post-fixer (e.g. execute such a code in the console).\n     * That is because adding a post-fixer does not execute it.\n     * The post-fixer will be executed as soon as any change in the document needs to cause its rendering.\n     * If you want to re-render the editor's view after registering the post-fixer then you should do it manually by calling\n     * {@link module:engine/view/view~View#forceRender `view.forceRender()`}.\n     *\n     * If you need to register a callback which is executed when DOM elements are already updated,\n     * use {@link module:engine/view/view~View#event:render render event}.\n     *\n     * @param {Function} postFixer\n     */\n  }, {\n    key: \"registerPostFixer\",\n    value: function registerPostFixer(postFixer) {\n      this._postFixers.add(postFixer);\n    }\n\n    /**\n     * Destroys this instance. Makes sure that all observers are destroyed and listeners removed.\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.roots.map(function (root) {\n        return root.destroy();\n      });\n      this.stopListening();\n    }\n\n    /**\n     * Performs post-fixer loops. Executes post-fixer callbacks as long as none of them has done any changes to the model.\n     *\n     * @protected\n     * @param {module:engine/view/downcastwriter~DowncastWriter} writer\n     */\n  }, {\n    key: \"_callPostFixers\",\n    value: function _callPostFixers(writer) {\n      var wasFixed = false;\n      do {\n        var _iterator = _createForOfIteratorHelper(this._postFixers),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var callback = _step.value;\n            wasFixed = callback(writer);\n            if (wasFixed) {\n              break;\n            }\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      } while (wasFixed);\n    }\n\n    /**\n     * Event fired whenever document content layout changes. It is fired whenever content is\n     * {@link module:engine/view/view~View#event:render rendered}, but should be also fired by observers in case of\n     * other actions which may change layout, for instance when image loads.\n     *\n     * @event layoutChanged\n     */\n  }]);\n}();\nexport { Document as default };\nmix(Document, ObservableMixin);\n\n/**\n * Enum representing type of the change.\n *\n * Possible values:\n *\n * * `children` - for child list changes,\n * * `attributes` - for element attributes changes,\n * * `text` - for text nodes changes.\n *\n * @typedef {String} module:engine/view/document~ChangeType\n */","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/documentfragment\n */\n\nimport Text from './text';\nimport TextProxy from './textproxy';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport isIterable from '@ckeditor/ckeditor5-utils/src/isiterable';\nimport EmitterMixin from '@ckeditor/ckeditor5-utils/src/emittermixin';\n\n/**\n * Document fragment.\n *\n * To create a new document fragment instance use the\n * {@link module:engine/view/upcastwriter~UpcastWriter#createDocumentFragment `UpcastWriter#createDocumentFragment()`}\n * method.\n */\nvar DocumentFragment = /*#__PURE__*/function () {\n  /**\n   * Creates new DocumentFragment instance.\n   *\n   * @protected\n   * @param {module:engine/view/node~Node|Iterable.<module:engine/view/node~Node>} [children]\n   * A list of nodes to be inserted into the created document fragment.\n   */\n  function DocumentFragment(children) {\n    _classCallCheck(this, DocumentFragment);\n    /**\n     * Array of child nodes.\n     *\n     * @protected\n     * @member {Array.<module:engine/view/element~Element>} module:engine/view/documentfragment~DocumentFragment#_children\n     */\n    this._children = [];\n    if (children) {\n      this._insertChild(0, children);\n    }\n  }\n\n  /**\n   * Iterable interface.\n   *\n   * Iterates over nodes added to this document fragment.\n   *\n   * @returns {Iterable.<module:engine/view/node~Node>}\n   */\n  return _createClass(DocumentFragment, [{\n    key: Symbol.iterator,\n    value: function value() {\n      return this._children[Symbol.iterator]();\n    }\n\n    /**\n     * Number of child nodes in this document fragment.\n     *\n     * @readonly\n     * @type {Number}\n     */\n  }, {\n    key: \"childCount\",\n    get: function get() {\n      return this._children.length;\n    }\n\n    /**\n     * Is `true` if there are no nodes inside this document fragment, `false` otherwise.\n     *\n     * @readonly\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isEmpty\",\n    get: function get() {\n      return this.childCount === 0;\n    }\n\n    /**\n     * Artificial root of `DocumentFragment`. Returns itself. Added for compatibility reasons.\n     *\n     * @readonly\n     * @type {module:engine/model/documentfragment~DocumentFragment}\n     */\n  }, {\n    key: \"root\",\n    get: function get() {\n      return this;\n    }\n\n    /**\n     * Artificial parent of `DocumentFragment`. Returns `null`. Added for compatibility reasons.\n     *\n     * @readonly\n     * @type {null}\n     */\n  }, {\n    key: \"parent\",\n    get: function get() {\n      return null;\n    }\n\n    /**\n     * Checks whether this object is of the given type.\n     *\n     *\t\tdocFrag.is( 'documentFragment' ); // -> true\n     *\t\tdocFrag.is( 'view:documentFragment' ); // -> true\n     *\n     *\t\tdocFrag.is( 'model:documentFragment' ); // -> false\n     *\t\tdocFrag.is( 'element' ); // -> false\n     *\t\tdocFrag.is( 'node' ); // -> false\n     *\n     * {@link module:engine/view/node~Node#is Check the entire list of view objects} which implement the `is()` method.\n     *\n     * @param {String} type\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'documentFragment' || type == 'view:documentFragment';\n    }\n\n    /**\n     * {@link module:engine/view/documentfragment~DocumentFragment#_insertChild Insert} a child node or a list of child nodes at the end\n     * and sets the parent of these nodes to this fragment.\n     *\n     * @param {module:engine/view/item~Item|Iterable.<module:engine/view/item~Item>} items Items to be inserted.\n     * @returns {Number} Number of appended nodes.\n     */\n  }, {\n    key: \"_appendChild\",\n    value: function _appendChild(items) {\n      return this._insertChild(this.childCount, items);\n    }\n\n    /**\n     * Gets child at the given index.\n     *\n     * @param {Number} index Index of child.\n     * @returns {module:engine/view/node~Node} Child node.\n     */\n  }, {\n    key: \"getChild\",\n    value: function getChild(index) {\n      return this._children[index];\n    }\n\n    /**\n     * Gets index of the given child node. Returns `-1` if child node is not found.\n     *\n     * @param {module:engine/view/node~Node} node Child node.\n     * @returns {Number} Index of the child node.\n     */\n  }, {\n    key: \"getChildIndex\",\n    value: function getChildIndex(node) {\n      return this._children.indexOf(node);\n    }\n\n    /**\n     * Gets child nodes iterator.\n     *\n     * @returns {Iterable.<module:engine/view/node~Node>} Child nodes iterator.\n     */\n  }, {\n    key: \"getChildren\",\n    value: function getChildren() {\n      return this._children[Symbol.iterator]();\n    }\n\n    /**\n     * Inserts a child node or a list of child nodes on the given index and sets the parent of these nodes to\n     * this fragment.\n     *\n     * @param {Number} index Position where nodes should be inserted.\n     * @param {module:engine/view/item~Item|Iterable.<module:engine/view/item~Item>} items Items to be inserted.\n     * @returns {Number} Number of inserted nodes.\n     */\n  }, {\n    key: \"_insertChild\",\n    value: function _insertChild(index, items) {\n      this._fireChange('children', this);\n      var count = 0;\n      var nodes = normalize(items);\n      var _iterator = _createForOfIteratorHelper(nodes),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var node = _step.value;\n          // If node that is being added to this element is already inside another element, first remove it from the old parent.\n          if (node.parent !== null) {\n            node._remove();\n          }\n          node.parent = this;\n          this._children.splice(index, 0, node);\n          index++;\n          count++;\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      return count;\n    }\n\n    /**\n     * Removes number of child nodes starting at the given index and set the parent of these nodes to `null`.\n     *\n     * @param {Number} index Number of the first node to remove.\n     * @param {Number} [howMany=1] Number of nodes to remove.\n     * @returns {Array.<module:engine/view/node~Node>} The array of removed nodes.\n     */\n  }, {\n    key: \"_removeChildren\",\n    value: function _removeChildren(index) {\n      var howMany = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      this._fireChange('children', this);\n      for (var i = index; i < index + howMany; i++) {\n        this._children[i].parent = null;\n      }\n      return this._children.splice(index, howMany);\n    }\n\n    /**\n     * Fires `change` event with given type of the change.\n     *\n     * @private\n     * @param {module:engine/view/document~ChangeType} type Type of the change.\n     * @param {module:engine/view/node~Node} node Changed node.\n     * @fires module:engine/view/node~Node#change\n     */\n  }, {\n    key: \"_fireChange\",\n    value: function _fireChange(type, node) {\n      this.fire('change:' + type, node);\n    }\n  }]);\n}();\nexport { DocumentFragment as default };\nmix(DocumentFragment, EmitterMixin);\n\n// Converts strings to Text and non-iterables to arrays.\n//\n// @param {String|module:engine/view/item~Item|Iterable.<String|module:engine/view/item~Item>}\n// @returns {Iterable.<module:engine/view/node~Node>}\nfunction normalize(nodes) {\n  // Separate condition because string is iterable.\n  if (typeof nodes == 'string') {\n    return [new Text(nodes)];\n  }\n  if (!isIterable(nodes)) {\n    nodes = [nodes];\n  }\n\n  // Array.from to enable .map() on non-arrays.\n  return Array.from(nodes).map(function (node) {\n    if (typeof node == 'string') {\n      return new Text(node);\n    }\n    if (node instanceof TextProxy) {\n      return new Text(node.data);\n    }\n    return node;\n  });\n}","import _regeneratorValues from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regeneratorValues.js\";\nimport _regenerator from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regenerator.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.anchor.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/documentselection\n */\n\nimport Selection from './selection';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport EmitterMixin from '@ckeditor/ckeditor5-utils/src/emittermixin';\n\n/**\n * Class representing the document selection in the view.\n *\n * Its instance is available in {@link module:engine/view/document~Document#selection `Document#selection`}.\n *\n * It is similar to {@link module:engine/view/selection~Selection} but\n * it has a read-only API and can be modified only by the writer available in\n * the {@link module:engine/view/view~View#change `View#change()`} block\n * (so via {@link module:engine/view/downcastwriter~DowncastWriter#setSelection `DowncastWriter#setSelection()`}).\n */\nvar DocumentSelection = /*#__PURE__*/function () {\n  /**\n   * Creates new DocumentSelection instance.\n   *\n   * \t\t// Creates empty selection without ranges.\n   *\t\tconst selection = new DocumentSelection();\n   *\n   *\t\t// Creates selection at the given range.\n   *\t\tconst range = writer.createRange( start, end );\n   *\t\tconst selection = new DocumentSelection( range );\n   *\n   *\t\t// Creates selection at the given ranges\n   * \t\tconst ranges = [ writer.createRange( start1, end2 ), writer.createRange( start2, end2 ) ];\n   *\t\tconst selection = new DocumentSelection( ranges );\n   *\n   *\t\t// Creates selection from the other selection.\n   *\t\tconst otherSelection = writer.createSelection();\n   *\t\tconst selection = new DocumentSelection( otherSelection );\n   *\n   * \t\t// Creates selection at the given position.\n   *\t\tconst position = writer.createPositionAt( root, offset );\n   *\t\tconst selection = new DocumentSelection( position );\n   *\n   *\t\t// Creates collapsed selection at the position of given item and offset.\n   *\t\tconst paragraph = writer.createContainerElement( 'paragraph' );\n   *\t\tconst selection = new DocumentSelection( paragraph, offset );\n   *\n   *\t\t// Creates a range inside an {@link module:engine/view/element~Element element} which starts before the\n   *\t\t// first child of that element and ends after the last child of that element.\n   *\t\tconst selection = new DocumentSelection( paragraph, 'in' );\n   *\n   *\t\t// Creates a range on an {@link module:engine/view/item~Item item} which starts before the item and ends\n   *\t\t// just after the item.\n   *\t\tconst selection = new DocumentSelection( paragraph, 'on' );\n   *\n   * `Selection`'s constructor allow passing additional options (`backward`, `fake` and `label`) as the last argument.\n   *\n   *\t\t// Creates backward selection.\n   *\t\tconst selection = new DocumentSelection( range, { backward: true } );\n   *\n   * Fake selection does not render as browser native selection over selected elements and is hidden to the user.\n   * This way, no native selection UI artifacts are displayed to the user and selection over elements can be\n   * represented in other way, for example by applying proper CSS class.\n   *\n   * Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM\n   * (and be  properly handled by screen readers).\n   *\n   *\t\t// Creates fake selection with label.\n   *\t\tconst selection = new DocumentSelection( range, { fake: true, label: 'foo' } );\n   *\n   * @param {module:engine/view/selection~Selectable} [selectable=null]\n   * @param {Number|'before'|'end'|'after'|'on'|'in'} [placeOrOffset] Offset or place when selectable is an `Item`.\n   * @param {Object} [options]\n   * @param {Boolean} [options.backward] Sets this selection instance to be backward.\n   * @param {Boolean} [options.fake] Sets this selection instance to be marked as `fake`.\n   * @param {String} [options.label] Label for the fake selection.\n   */\n  function DocumentSelection() {\n    var selectable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    var placeOrOffset = arguments.length > 1 ? arguments[1] : undefined;\n    var options = arguments.length > 2 ? arguments[2] : undefined;\n    _classCallCheck(this, DocumentSelection);\n    /**\n     * Selection is used internally (`DocumentSelection` is a proxy to that selection).\n     *\n     * @private\n     * @member {module:engine/view/selection~Selection}\n     */\n    this._selection = new Selection();\n\n    // Delegate change event to be fired on DocumentSelection instance.\n    this._selection.delegate('change').to(this);\n\n    // Set selection data.\n    this._selection.setTo(selectable, placeOrOffset, options);\n  }\n\n  /**\n   * Returns true if selection instance is marked as `fake`.\n   *\n   * @see #_setTo\n   * @returns {Boolean}\n   */\n  return _createClass(DocumentSelection, [{\n    key: \"isFake\",\n    get: function get() {\n      return this._selection.isFake;\n    }\n\n    /**\n     * Returns fake selection label.\n     *\n     * @see #_setTo\n     * @returns {String}\n     */\n  }, {\n    key: \"fakeSelectionLabel\",\n    get: function get() {\n      return this._selection.fakeSelectionLabel;\n    }\n\n    /**\n     * Selection anchor. Anchor may be described as a position where the selection starts. Together with\n     * {@link #focus focus} they define the direction of selection, which is important\n     * when expanding/shrinking selection. Anchor is always the start or end of the most recent added range.\n     * It may be a bit unintuitive when there are multiple ranges in selection.\n     *\n     * @see #focus\n     * @type {module:engine/view/position~Position}\n     */\n  }, {\n    key: \"anchor\",\n    get: function get() {\n      return this._selection.anchor;\n    }\n\n    /**\n     * Selection focus. Focus is a position where the selection ends.\n     *\n     * @see #anchor\n     * @type {module:engine/view/position~Position}\n     */\n  }, {\n    key: \"focus\",\n    get: function get() {\n      return this._selection.focus;\n    }\n\n    /**\n     * Returns whether the selection is collapsed. Selection is collapsed when there is exactly one range which is\n     * collapsed.\n     *\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isCollapsed\",\n    get: function get() {\n      return this._selection.isCollapsed;\n    }\n\n    /**\n     * Returns number of ranges in selection.\n     *\n     * @type {Number}\n     */\n  }, {\n    key: \"rangeCount\",\n    get: function get() {\n      return this._selection.rangeCount;\n    }\n\n    /**\n     * Specifies whether the {@link #focus} precedes {@link #anchor}.\n     *\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isBackward\",\n    get: function get() {\n      return this._selection.isBackward;\n    }\n\n    /**\n     * {@link module:engine/view/editableelement~EditableElement EditableElement} instance that contains this selection, or `null`\n     * if the selection is not inside an editable element.\n     *\n     * @type {module:engine/view/editableelement~EditableElement|null}\n     */\n  }, {\n    key: \"editableElement\",\n    get: function get() {\n      return this._selection.editableElement;\n    }\n\n    /**\n     * Used for the compatibility with the {@link module:engine/view/selection~Selection#isEqual} method.\n     *\n     * @protected\n     */\n  }, {\n    key: \"_ranges\",\n    get: function get() {\n      return this._selection._ranges;\n    }\n\n    /**\n     * Returns an iterable that contains copies of all ranges added to the selection.\n     *\n     * @returns {Iterable.<module:engine/view/range~Range>}\n     */\n  }, {\n    key: \"getRanges\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function getRanges() {\n      return _regenerator().w(function (_context) {\n        while (1) switch (_context.n) {\n          case 0:\n            return _context.d(_regeneratorValues(this._selection.getRanges()), 1);\n          case 1:\n            return _context.a(2);\n        }\n      }, getRanges, this);\n    })\n    /**\n     * Returns copy of the first range in the selection. First range is the one which\n     * {@link module:engine/view/range~Range#start start} position {@link module:engine/view/position~Position#isBefore is before} start\n     * position of all other ranges (not to confuse with the first range added to the selection).\n     * Returns `null` if no ranges are added to selection.\n     *\n     * @returns {module:engine/view/range~Range|null}\n     */\n  }, {\n    key: \"getFirstRange\",\n    value: function getFirstRange() {\n      return this._selection.getFirstRange();\n    }\n\n    /**\n     * Returns copy of the last range in the selection. Last range is the one which {@link module:engine/view/range~Range#end end}\n     * position {@link module:engine/view/position~Position#isAfter is after} end position of all other ranges (not to confuse\n     * with the last range added to the selection). Returns `null` if no ranges are added to selection.\n     *\n     * @returns {module:engine/view/range~Range|null}\n     */\n  }, {\n    key: \"getLastRange\",\n    value: function getLastRange() {\n      return this._selection.getLastRange();\n    }\n\n    /**\n     * Returns copy of the first position in the selection. First position is the position that\n     * {@link module:engine/view/position~Position#isBefore is before} any other position in the selection ranges.\n     * Returns `null` if no ranges are added to selection.\n     *\n     * @returns {module:engine/view/position~Position|null}\n     */\n  }, {\n    key: \"getFirstPosition\",\n    value: function getFirstPosition() {\n      return this._selection.getFirstPosition();\n    }\n\n    /**\n     * Returns copy of the last position in the selection. Last position is the position that\n     * {@link module:engine/view/position~Position#isAfter is after} any other position in the selection ranges.\n     * Returns `null` if no ranges are added to selection.\n     *\n     * @returns {module:engine/view/position~Position|null}\n     */\n  }, {\n    key: \"getLastPosition\",\n    value: function getLastPosition() {\n      return this._selection.getLastPosition();\n    }\n\n    /**\n     * Returns the selected element. {@link module:engine/view/element~Element Element} is considered as selected if there is only\n     * one range in the selection, and that range contains exactly one element.\n     * Returns `null` if there is no selected element.\n     *\n     * @returns {module:engine/view/element~Element|null}\n     */\n  }, {\n    key: \"getSelectedElement\",\n    value: function getSelectedElement() {\n      return this._selection.getSelectedElement();\n    }\n\n    /**\n     * Checks whether, this selection is equal to given selection. Selections are equal if they have same directions,\n     * same number of ranges and all ranges from one selection equal to a range from other selection.\n     *\n     * @param {module:engine/view/selection~Selection|module:engine/view/documentselection~DocumentSelection} otherSelection\n     * Selection to compare with.\n     * @returns {Boolean} `true` if selections are equal, `false` otherwise.\n     */\n  }, {\n    key: \"isEqual\",\n    value: function isEqual(otherSelection) {\n      return this._selection.isEqual(otherSelection);\n    }\n\n    /**\n     * Checks whether this selection is similar to given selection. Selections are similar if they have same directions, same\n     * number of ranges, and all {@link module:engine/view/range~Range#getTrimmed trimmed} ranges from one selection are\n     * equal to any trimmed range from other selection.\n     *\n     * @param {module:engine/view/selection~Selection|module:engine/view/documentselection~DocumentSelection} otherSelection\n     * Selection to compare with.\n     * @returns {Boolean} `true` if selections are similar, `false` otherwise.\n     */\n  }, {\n    key: \"isSimilar\",\n    value: function isSimilar(otherSelection) {\n      return this._selection.isSimilar(otherSelection);\n    }\n\n    /**\n     * Checks whether this object is of the given type.\n     *\n     *\t\tdocSelection.is( 'selection' ); // -> true\n     *\t\tdocSelection.is( 'documentSelection' ); // -> true\n     *\t\tdocSelection.is( 'view:selection' ); // -> true\n     *\t\tdocSelection.is( 'view:documentSelection' ); // -> true\n     *\n     *\t\tdocSelection.is( 'model:documentSelection' ); // -> false\n     *\t\tdocSelection.is( 'element' ); // -> false\n     *\t\tdocSelection.is( 'node' ); // -> false\n     *\n     * {@link module:engine/view/node~Node#is Check the entire list of view objects} which implement the `is()` method.\n     *\n     * @param {String} type\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'selection' || type == 'documentSelection' || type == 'view:selection' || type == 'view:documentSelection';\n    }\n\n    /**\n     * Sets this selection's ranges and direction to the specified location based on the given\n     * {@link module:engine/view/selection~Selectable selectable}.\n     *\n     *\t\t// Sets selection to the given range.\n     *\t\tconst range = writer.createRange( start, end );\n     *\t\tdocumentSelection._setTo( range );\n     *\n     *\t\t// Sets selection to given ranges.\n     * \t\tconst ranges = [ writer.createRange( start1, end2 ), writer.createRange( start2, end2 ) ];\n     *\t\tdocumentSelection._setTo( range );\n     *\n     *\t\t// Sets selection to the other selection.\n     *\t\tconst otherSelection = writer.createSelection();\n     *\t\tdocumentSelection._setTo( otherSelection );\n     *\n     * \t\t// Sets collapsed selection at the given position.\n     *\t\tconst position = writer.createPositionAt( root, offset );\n     *\t\tdocumentSelection._setTo( position );\n     *\n     * \t\t// Sets collapsed selection at the position of given item and offset.\n     *\t\tdocumentSelection._setTo( paragraph, offset );\n     *\n     * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n     * that element and ends after the last child of that element.\n     *\n     *\t\tdocumentSelection._setTo( paragraph, 'in' );\n     *\n     * Creates a range on an {@link module:engine/view/item~Item item} which starts before the item and ends just after the item.\n     *\n     *\t\tdocumentSelection._setTo( paragraph, 'on' );\n     *\n     * \t\t// Clears selection. Removes all ranges.\n     *\t\tdocumentSelection._setTo( null );\n     *\n     * `Selection#_setTo()` method allow passing additional options (`backward`, `fake` and `label`) as the last argument.\n     *\n     *\t\t// Sets selection as backward.\n     *\t\tdocumentSelection._setTo( range, { backward: true } );\n     *\n     * Fake selection does not render as browser native selection over selected elements and is hidden to the user.\n     * This way, no native selection UI artifacts are displayed to the user and selection over elements can be\n     * represented in other way, for example by applying proper CSS class.\n     *\n     * Additionally fake's selection label can be provided. It will be used to des cribe fake selection in DOM\n     * (and be  properly handled by screen readers).\n     *\n     *\t\t// Creates fake selection with label.\n     *\t\tdocumentSelection._setTo( range, { fake: true, label: 'foo' } );\n     *\n     * @protected\n     * @fires change\n     * @param {module:engine/view/selection~Selectable} selectable\n     * @param {Number|'before'|'end'|'after'|'on'|'in'} [placeOrOffset] Sets place or offset of the selection.\n     * @param {Object} [options]\n     * @param {Boolean} [options.backward] Sets this selection instance to be backward.\n     * @param {Boolean} [options.fake] Sets this selection instance to be marked as `fake`.\n     * @param {String} [options.label] Label for the fake selection.\n     */\n  }, {\n    key: \"_setTo\",\n    value: function _setTo(selectable, placeOrOffset, options) {\n      this._selection.setTo(selectable, placeOrOffset, options);\n    }\n\n    /**\n     * Moves {@link #focus} to the specified location.\n     *\n     * The location can be specified in the same form as {@link module:engine/view/view~View#createPositionAt view.createPositionAt()}\n     * parameters.\n     *\n     * @protected\n     * @fires change\n     * @param {module:engine/view/item~Item|module:engine/view/position~Position} itemOrPosition\n     * @param {Number|'end'|'before'|'after'} [offset] Offset or one of the flags. Used only when\n     * first parameter is a {@link module:engine/view/item~Item view item}.\n     */\n  }, {\n    key: \"_setFocus\",\n    value: function _setFocus(itemOrPosition, offset) {\n      this._selection.setFocus(itemOrPosition, offset);\n    }\n\n    /**\n     * Fired whenever selection ranges are changed through {@link ~DocumentSelection Selection API}.\n     *\n     * @event change\n     */\n  }]);\n}();\nexport { DocumentSelection as default };\nmix(DocumentSelection, EmitterMixin);","import _slicedToArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport _regenerator from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regenerator.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.regexp.test.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/domconverter\n */\n\n/* globals document, Node, NodeFilter, Text */\n\nimport ViewText from './text';\nimport ViewElement from './element';\nimport ViewPosition from './position';\nimport ViewRange from './range';\nimport ViewSelection from './selection';\nimport ViewDocumentFragment from './documentfragment';\nimport ViewTreeWalker from './treewalker';\nimport { BR_FILLER, getDataWithoutFiller, INLINE_FILLER_LENGTH, isInlineFiller, NBSP_FILLER, startsWithFiller } from './filler';\nimport global from '@ckeditor/ckeditor5-utils/src/dom/global';\nimport indexOf from '@ckeditor/ckeditor5-utils/src/dom/indexof';\nimport getAncestors from '@ckeditor/ckeditor5-utils/src/dom/getancestors';\nimport getCommonAncestor from '@ckeditor/ckeditor5-utils/src/dom/getcommonancestor';\nimport isText from '@ckeditor/ckeditor5-utils/src/dom/istext';\nimport { isElement } from 'lodash-es';\n\n// eslint-disable-next-line new-cap\nvar BR_FILLER_REF = BR_FILLER(document);\n\n/**\n * DomConverter is a set of tools to do transformations between DOM nodes and view nodes. It also handles\n * {@link module:engine/view/domconverter~DomConverter#bindElements binding} these nodes.\n *\n * The instance of DOMConverter is available in {@link module:engine/view/view~View#domConverter `editor.editing.view.domConverter`}.\n *\n * DomConverter does not check which nodes should be rendered (use {@link module:engine/view/renderer~Renderer}), does not keep a\n * state of a tree nor keeps synchronization between tree view and DOM tree (use {@link module:engine/view/document~Document}).\n *\n * DomConverter keeps DOM elements to View element bindings, so when the converter will be destroyed, the binding will\n * be lost. Two converters will keep separate binding maps, so one tree view can be bound with two DOM trees.\n */\nvar DomConverter = /*#__PURE__*/function () {\n  /**\n   * Creates DOM converter.\n   *\n   * @param {Object} options Object with configuration options.\n   * @param {module:engine/view/filler~BlockFillerMode} [options.blockFillerMode='br'] The type of the block filler to use.\n   */\n  function DomConverter() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _classCallCheck(this, DomConverter);\n    /**\n     * The mode of a block filler used by DOM converter.\n     *\n     * @readonly\n     * @member {'br'|'nbsp'} module:engine/view/domconverter~DomConverter#blockFillerMode\n     */\n    this.blockFillerMode = options.blockFillerMode || 'br';\n\n    /**\n     * Elements which are considered pre-formatted elements.\n     *\n     * @readonly\n     * @member {Array.<String>} module:engine/view/domconverter~DomConverter#preElements\n     */\n    this.preElements = ['pre'];\n\n    /**\n     * Elements which are considered block elements (and hence should be filled with a\n     * {@link #isBlockFiller block filler}).\n     *\n     * Whether an element is considered a block element also affects handling of trailing whitespaces.\n     *\n     * You can extend this array if you introduce support for block elements which are not yet recognized here.\n     *\n     * @readonly\n     * @member {Array.<String>} module:engine/view/domconverter~DomConverter#blockElements\n     */\n    this.blockElements = ['p', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'li', 'dd', 'dt', 'figcaption'];\n\n    /**\n     * Block {@link module:engine/view/filler filler} creator, which is used to create all block fillers during the\n     * view to DOM conversion and to recognize block fillers during the DOM to view conversion.\n     *\n     * @readonly\n     * @private\n     * @member {Function} module:engine/view/domconverter~DomConverter#_blockFiller\n     */\n    this._blockFiller = this.blockFillerMode == 'br' ? BR_FILLER : NBSP_FILLER;\n\n    /**\n     * DOM to View mapping.\n     *\n     * @private\n     * @member {WeakMap} module:engine/view/domconverter~DomConverter#_domToViewMapping\n     */\n    this._domToViewMapping = new WeakMap();\n\n    /**\n     * View to DOM mapping.\n     *\n     * @private\n     * @member {WeakMap} module:engine/view/domconverter~DomConverter#_viewToDomMapping\n     */\n    this._viewToDomMapping = new WeakMap();\n\n    /**\n     * Holds mapping between fake selection containers and corresponding view selections.\n     *\n     * @private\n     * @member {WeakMap} module:engine/view/domconverter~DomConverter#_fakeSelectionMapping\n     */\n    this._fakeSelectionMapping = new WeakMap();\n  }\n\n  /**\n   * Binds given DOM element that represents fake selection to a **position** of a\n   * {@link module:engine/view/documentselection~DocumentSelection document selection}.\n   * Document selection copy is stored and can be retrieved by\n   * {@link module:engine/view/domconverter~DomConverter#fakeSelectionToView} method.\n   *\n   * @param {HTMLElement} domElement\n   * @param {module:engine/view/documentselection~DocumentSelection} viewDocumentSelection\n   */\n  return _createClass(DomConverter, [{\n    key: \"bindFakeSelection\",\n    value: function bindFakeSelection(domElement, viewDocumentSelection) {\n      this._fakeSelectionMapping.set(domElement, new ViewSelection(viewDocumentSelection));\n    }\n\n    /**\n     * Returns {@link module:engine/view/selection~Selection view selection} instance corresponding to\n     * given DOM element that represents fake selection. Returns `undefined` if binding to given DOM element does not exists.\n     *\n     * @param {HTMLElement} domElement\n     * @returns {module:engine/view/selection~Selection|undefined}\n     */\n  }, {\n    key: \"fakeSelectionToView\",\n    value: function fakeSelectionToView(domElement) {\n      return this._fakeSelectionMapping.get(domElement);\n    }\n\n    /**\n     * Binds DOM and View elements, so it will be possible to get corresponding elements using\n     * {@link module:engine/view/domconverter~DomConverter#mapDomToView} and\n     * {@link module:engine/view/domconverter~DomConverter#mapViewToDom}.\n     *\n     * @param {HTMLElement} domElement DOM element to bind.\n     * @param {module:engine/view/element~Element} viewElement View element to bind.\n     */\n  }, {\n    key: \"bindElements\",\n    value: function bindElements(domElement, viewElement) {\n      this._domToViewMapping.set(domElement, viewElement);\n      this._viewToDomMapping.set(viewElement, domElement);\n    }\n\n    /**\n     * Unbinds given `domElement` from the view element it was bound to. Unbinding is deep, meaning that all children of\n     * `domElement` will be unbound too.\n     *\n     * @param {HTMLElement} domElement DOM element to unbind.\n     */\n  }, {\n    key: \"unbindDomElement\",\n    value: function unbindDomElement(domElement) {\n      var viewElement = this._domToViewMapping.get(domElement);\n      if (viewElement) {\n        this._domToViewMapping.delete(domElement);\n        this._viewToDomMapping.delete(viewElement);\n\n        // Use Array.from because of MS Edge (#923).\n        for (var _i = 0, _Array$from = Array.from(domElement.childNodes); _i < _Array$from.length; _i++) {\n          var child = _Array$from[_i];\n          this.unbindDomElement(child);\n        }\n      }\n    }\n\n    /**\n     * Binds DOM and View document fragments, so it will be possible to get corresponding document fragments using\n     * {@link module:engine/view/domconverter~DomConverter#mapDomToView} and\n     * {@link module:engine/view/domconverter~DomConverter#mapViewToDom}.\n     *\n     * @param {DocumentFragment} domFragment DOM document fragment to bind.\n     * @param {module:engine/view/documentfragment~DocumentFragment} viewFragment View document fragment to bind.\n     */\n  }, {\n    key: \"bindDocumentFragments\",\n    value: function bindDocumentFragments(domFragment, viewFragment) {\n      this._domToViewMapping.set(domFragment, viewFragment);\n      this._viewToDomMapping.set(viewFragment, domFragment);\n    }\n\n    /**\n     * Converts view to DOM. For all text nodes, not bound elements and document fragments new items will\n     * be created. For bound elements and document fragments function will return corresponding items.\n     *\n     * @param {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment} viewNode\n     * View node or document fragment to transform.\n     * @param {Document} domDocument Document which will be used to create DOM nodes.\n     * @param {Object} [options] Conversion options.\n     * @param {Boolean} [options.bind=false] Determines whether new elements will be bound.\n     * @param {Boolean} [options.withChildren=true] If `true`, node's and document fragment's children will be converted too.\n     * @returns {Node|DocumentFragment} Converted node or DocumentFragment.\n     */\n  }, {\n    key: \"viewToDom\",\n    value: function viewToDom(viewNode, domDocument) {\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      if (viewNode.is('text')) {\n        var textData = this._processDataFromViewText(viewNode);\n        return domDocument.createTextNode(textData);\n      } else {\n        if (this.mapViewToDom(viewNode)) {\n          return this.mapViewToDom(viewNode);\n        }\n        var domElement;\n        if (viewNode.is('documentFragment')) {\n          // Create DOM document fragment.\n          domElement = domDocument.createDocumentFragment();\n          if (options.bind) {\n            this.bindDocumentFragments(domElement, viewNode);\n          }\n        } else if (viewNode.is('uiElement')) {\n          // UIElement has its own render() method (see #799).\n          domElement = viewNode.render(domDocument);\n          if (options.bind) {\n            this.bindElements(domElement, viewNode);\n          }\n          return domElement;\n        } else {\n          // Create DOM element.\n          if (viewNode.hasAttribute('xmlns')) {\n            domElement = domDocument.createElementNS(viewNode.getAttribute('xmlns'), viewNode.name);\n          } else {\n            domElement = domDocument.createElement(viewNode.name);\n          }\n          if (options.bind) {\n            this.bindElements(domElement, viewNode);\n          }\n\n          // Copy element's attributes.\n          var _iterator = _createForOfIteratorHelper(viewNode.getAttributeKeys()),\n            _step;\n          try {\n            for (_iterator.s(); !(_step = _iterator.n()).done;) {\n              var key = _step.value;\n              domElement.setAttribute(key, viewNode.getAttribute(key));\n            }\n          } catch (err) {\n            _iterator.e(err);\n          } finally {\n            _iterator.f();\n          }\n        }\n        if (options.withChildren || options.withChildren === undefined) {\n          var _iterator2 = _createForOfIteratorHelper(this.viewChildrenToDom(viewNode, domDocument, options)),\n            _step2;\n          try {\n            for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n              var child = _step2.value;\n              domElement.appendChild(child);\n            }\n          } catch (err) {\n            _iterator2.e(err);\n          } finally {\n            _iterator2.f();\n          }\n        }\n        return domElement;\n      }\n    }\n\n    /**\n     * Converts children of the view element to DOM using the\n     * {@link module:engine/view/domconverter~DomConverter#viewToDom} method.\n     * Additionally, this method adds block {@link module:engine/view/filler filler} to the list of children, if needed.\n     *\n     * @param {module:engine/view/element~Element|module:engine/view/documentfragment~DocumentFragment} viewElement Parent view element.\n     * @param {Document} domDocument Document which will be used to create DOM nodes.\n     * @param {Object} options See {@link module:engine/view/domconverter~DomConverter#viewToDom} options parameter.\n     * @returns {Iterable.<Node>} DOM nodes.\n     */\n  }, {\n    key: \"viewChildrenToDom\",\n    value: function viewChildrenToDom(viewElement, domDocument) {\n      var _this = this;\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      return /*#__PURE__*/_regenerator().m(function _callee() {\n        var fillerPositionOffset, offset, _iterator3, _step3, childView, _t;\n        return _regenerator().w(function (_context) {\n          while (1) switch (_context.p = _context.n) {\n            case 0:\n              fillerPositionOffset = viewElement.getFillerOffset && viewElement.getFillerOffset();\n              offset = 0;\n              _iterator3 = _createForOfIteratorHelper(viewElement.getChildren());\n              _context.p = 1;\n              _iterator3.s();\n            case 2:\n              if ((_step3 = _iterator3.n()).done) {\n                _context.n = 6;\n                break;\n              }\n              childView = _step3.value;\n              if (!(fillerPositionOffset === offset)) {\n                _context.n = 3;\n                break;\n              }\n              _context.n = 3;\n              return _this._blockFiller(domDocument);\n            case 3:\n              _context.n = 4;\n              return _this.viewToDom(childView, domDocument, options);\n            case 4:\n              offset++;\n            case 5:\n              _context.n = 2;\n              break;\n            case 6:\n              _context.n = 8;\n              break;\n            case 7:\n              _context.p = 7;\n              _t = _context.v;\n              _iterator3.e(_t);\n            case 8:\n              _context.p = 8;\n              _iterator3.f();\n              return _context.f(8);\n            case 9:\n              if (!(fillerPositionOffset === offset)) {\n                _context.n = 10;\n                break;\n              }\n              _context.n = 10;\n              return _this._blockFiller(domDocument);\n            case 10:\n              return _context.a(2);\n          }\n        }, _callee, null, [[1, 7, 8, 9]]);\n      })();\n    }\n\n    /**\n     * Converts view {@link module:engine/view/range~Range} to DOM range.\n     * Inline and block {@link module:engine/view/filler fillers} are handled during the conversion.\n     *\n     * @param {module:engine/view/range~Range} viewRange View range.\n     * @returns {Range} DOM range.\n     */\n  }, {\n    key: \"viewRangeToDom\",\n    value: function viewRangeToDom(viewRange) {\n      var domStart = this.viewPositionToDom(viewRange.start);\n      var domEnd = this.viewPositionToDom(viewRange.end);\n      var domRange = document.createRange();\n      domRange.setStart(domStart.parent, domStart.offset);\n      domRange.setEnd(domEnd.parent, domEnd.offset);\n      return domRange;\n    }\n\n    /**\n     * Converts view {@link module:engine/view/position~Position} to DOM parent and offset.\n     *\n     * Inline and block {@link module:engine/view/filler fillers} are handled during the conversion.\n     * If the converted position is directly before inline filler it is moved inside the filler.\n     *\n     * @param {module:engine/view/position~Position} viewPosition View position.\n     * @returns {Object|null} position DOM position or `null` if view position could not be converted to DOM.\n     * @returns {Node} position.parent DOM position parent.\n     * @returns {Number} position.offset DOM position offset.\n     */\n  }, {\n    key: \"viewPositionToDom\",\n    value: function viewPositionToDom(viewPosition) {\n      var viewParent = viewPosition.parent;\n      if (viewParent.is('text')) {\n        var domParent = this.findCorrespondingDomText(viewParent);\n        if (!domParent) {\n          // Position is in a view text node that has not been rendered to DOM yet.\n          return null;\n        }\n        var offset = viewPosition.offset;\n        if (startsWithFiller(domParent)) {\n          offset += INLINE_FILLER_LENGTH;\n        }\n        return {\n          parent: domParent,\n          offset: offset\n        };\n      } else {\n        // viewParent is instance of ViewElement.\n        var _domParent, domBefore, domAfter;\n        if (viewPosition.offset === 0) {\n          _domParent = this.mapViewToDom(viewParent);\n          if (!_domParent) {\n            // Position is in a view element that has not been rendered to DOM yet.\n            return null;\n          }\n          domAfter = _domParent.childNodes[0];\n        } else {\n          var nodeBefore = viewPosition.nodeBefore;\n          domBefore = nodeBefore.is('text') ? this.findCorrespondingDomText(nodeBefore) : this.mapViewToDom(viewPosition.nodeBefore);\n          if (!domBefore) {\n            // Position is after a view element that has not been rendered to DOM yet.\n            return null;\n          }\n          _domParent = domBefore.parentNode;\n          domAfter = domBefore.nextSibling;\n        }\n\n        // If there is an inline filler at position return position inside the filler. We should never return\n        // the position before the inline filler.\n        if (isText(domAfter) && startsWithFiller(domAfter)) {\n          return {\n            parent: domAfter,\n            offset: INLINE_FILLER_LENGTH\n          };\n        }\n        var _offset = domBefore ? indexOf(domBefore) + 1 : 0;\n        return {\n          parent: _domParent,\n          offset: _offset\n        };\n      }\n    }\n\n    /**\n     * Converts DOM to view. For all text nodes, not bound elements and document fragments new items will\n     * be created. For bound elements and document fragments function will return corresponding items. For\n     * {@link module:engine/view/filler fillers} `null` will be returned.\n     * For all DOM elements rendered by {@link module:engine/view/uielement~UIElement} that UIElement will be returned.\n     *\n     * @param {Node|DocumentFragment} domNode DOM node or document fragment to transform.\n     * @param {Object} [options] Conversion options.\n     * @param {Boolean} [options.bind=false] Determines whether new elements will be bound.\n     * @param {Boolean} [options.withChildren=true] If `true`, node's and document fragment's children will be converted too.\n     * @param {Boolean} [options.keepOriginalCase=false] If `false`, node's tag name will be converter to lower case.\n     * @returns {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment|null} Converted node or document fragment\n     * or `null` if DOM node is a {@link module:engine/view/filler filler} or the given node is an empty text node.\n     */\n  }, {\n    key: \"domToView\",\n    value: function domToView(domNode) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      if (this.isBlockFiller(domNode, this.blockFillerMode)) {\n        return null;\n      }\n\n      // When node is inside UIElement return that UIElement as it's view representation.\n      var uiElement = this.getParentUIElement(domNode, this._domToViewMapping);\n      if (uiElement) {\n        return uiElement;\n      }\n      if (isText(domNode)) {\n        if (isInlineFiller(domNode)) {\n          return null;\n        } else {\n          var textData = this._processDataFromDomText(domNode);\n          return textData === '' ? null : new ViewText(textData);\n        }\n      } else if (this.isComment(domNode)) {\n        return null;\n      } else {\n        if (this.mapDomToView(domNode)) {\n          return this.mapDomToView(domNode);\n        }\n        var viewElement;\n        if (this.isDocumentFragment(domNode)) {\n          // Create view document fragment.\n          viewElement = new ViewDocumentFragment();\n          if (options.bind) {\n            this.bindDocumentFragments(domNode, viewElement);\n          }\n        } else {\n          // Create view element.\n          var viewName = options.keepOriginalCase ? domNode.tagName : domNode.tagName.toLowerCase();\n          viewElement = new ViewElement(viewName);\n          if (options.bind) {\n            this.bindElements(domNode, viewElement);\n          }\n\n          // Copy element's attributes.\n          var attrs = domNode.attributes;\n          for (var i = attrs.length - 1; i >= 0; i--) {\n            viewElement._setAttribute(attrs[i].name, attrs[i].value);\n          }\n        }\n        if (options.withChildren || options.withChildren === undefined) {\n          var _iterator4 = _createForOfIteratorHelper(this.domChildrenToView(domNode, options)),\n            _step4;\n          try {\n            for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n              var child = _step4.value;\n              viewElement._appendChild(child);\n            }\n          } catch (err) {\n            _iterator4.e(err);\n          } finally {\n            _iterator4.f();\n          }\n        }\n        return viewElement;\n      }\n    }\n\n    /**\n     * Converts children of the DOM element to view nodes using\n     * the {@link module:engine/view/domconverter~DomConverter#domToView} method.\n     * Additionally this method omits block {@link module:engine/view/filler filler}, if it exists in the DOM parent.\n     *\n     * @param {HTMLElement} domElement Parent DOM element.\n     * @param {Object} options See {@link module:engine/view/domconverter~DomConverter#domToView} options parameter.\n     * @returns {Iterable.<module:engine/view/node~Node>} View nodes.\n     */\n  }, {\n    key: \"domChildrenToView\",\n    value: function domChildrenToView(domElement) {\n      var _this2 = this;\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      return /*#__PURE__*/_regenerator().m(function _callee2() {\n        var i, domChild, viewChild;\n        return _regenerator().w(function (_context2) {\n          while (1) switch (_context2.n) {\n            case 0:\n              i = 0;\n            case 1:\n              if (!(i < domElement.childNodes.length)) {\n                _context2.n = 3;\n                break;\n              }\n              domChild = domElement.childNodes[i];\n              viewChild = _this2.domToView(domChild, options);\n              if (!(viewChild !== null)) {\n                _context2.n = 2;\n                break;\n              }\n              _context2.n = 2;\n              return viewChild;\n            case 2:\n              i++;\n              _context2.n = 1;\n              break;\n            case 3:\n              return _context2.a(2);\n          }\n        }, _callee2);\n      })();\n    }\n\n    /**\n     * Converts DOM selection to view {@link module:engine/view/selection~Selection}.\n     * Ranges which cannot be converted will be omitted.\n     *\n     * @param {Selection} domSelection DOM selection.\n     * @returns {module:engine/view/selection~Selection} View selection.\n     */\n  }, {\n    key: \"domSelectionToView\",\n    value: function domSelectionToView(domSelection) {\n      // DOM selection might be placed in fake selection container.\n      // If container contains fake selection - return corresponding view selection.\n      if (domSelection.rangeCount === 1) {\n        var container = domSelection.getRangeAt(0).startContainer;\n\n        // The DOM selection might be moved to the text node inside the fake selection container.\n        if (isText(container)) {\n          container = container.parentNode;\n        }\n        var viewSelection = this.fakeSelectionToView(container);\n        if (viewSelection) {\n          return viewSelection;\n        }\n      }\n      var isBackward = this.isDomSelectionBackward(domSelection);\n      var viewRanges = [];\n      for (var i = 0; i < domSelection.rangeCount; i++) {\n        // DOM Range have correct start and end, no matter what is the DOM Selection direction. So we don't have to fix anything.\n        var domRange = domSelection.getRangeAt(i);\n        var viewRange = this.domRangeToView(domRange);\n        if (viewRange) {\n          viewRanges.push(viewRange);\n        }\n      }\n      return new ViewSelection(viewRanges, {\n        backward: isBackward\n      });\n    }\n\n    /**\n     * Converts DOM Range to view {@link module:engine/view/range~Range}.\n     * If the start or end position can not be converted `null` is returned.\n     *\n     * @param {Range} domRange DOM range.\n     * @returns {module:engine/view/range~Range|null} View range.\n     */\n  }, {\n    key: \"domRangeToView\",\n    value: function domRangeToView(domRange) {\n      var viewStart = this.domPositionToView(domRange.startContainer, domRange.startOffset);\n      var viewEnd = this.domPositionToView(domRange.endContainer, domRange.endOffset);\n      if (viewStart && viewEnd) {\n        return new ViewRange(viewStart, viewEnd);\n      }\n      return null;\n    }\n\n    /**\n     * Converts DOM parent and offset to view {@link module:engine/view/position~Position}.\n     *\n     * If the position is inside a {@link module:engine/view/filler filler} which has no corresponding view node,\n     * position of the filler will be converted and returned.\n     *\n     * If the position is inside DOM element rendered by {@link module:engine/view/uielement~UIElement}\n     * that position will be converted to view position before that UIElement.\n     *\n     * If structures are too different and it is not possible to find corresponding position then `null` will be returned.\n     *\n     * @param {Node} domParent DOM position parent.\n     * @param {Number} domOffset DOM position offset.\n     * @returns {module:engine/view/position~Position} viewPosition View position.\n     */\n  }, {\n    key: \"domPositionToView\",\n    value: function domPositionToView(domParent, domOffset) {\n      if (this.isBlockFiller(domParent, this.blockFillerMode)) {\n        return this.domPositionToView(domParent.parentNode, indexOf(domParent));\n      }\n\n      // If position is somewhere inside UIElement - return position before that element.\n      var viewElement = this.mapDomToView(domParent);\n      if (viewElement && viewElement.is('uiElement')) {\n        return ViewPosition._createBefore(viewElement);\n      }\n      if (isText(domParent)) {\n        if (isInlineFiller(domParent)) {\n          return this.domPositionToView(domParent.parentNode, indexOf(domParent));\n        }\n        var viewParent = this.findCorrespondingViewText(domParent);\n        var offset = domOffset;\n        if (!viewParent) {\n          return null;\n        }\n        if (startsWithFiller(domParent)) {\n          offset -= INLINE_FILLER_LENGTH;\n          offset = offset < 0 ? 0 : offset;\n        }\n        return new ViewPosition(viewParent, offset);\n      }\n      // domParent instanceof HTMLElement.\n      else {\n        if (domOffset === 0) {\n          var _viewParent = this.mapDomToView(domParent);\n          if (_viewParent) {\n            return new ViewPosition(_viewParent, 0);\n          }\n        } else {\n          var domBefore = domParent.childNodes[domOffset - 1];\n          var viewBefore = isText(domBefore) ? this.findCorrespondingViewText(domBefore) : this.mapDomToView(domBefore);\n\n          // TODO #663\n          if (viewBefore && viewBefore.parent) {\n            return new ViewPosition(viewBefore.parent, viewBefore.index + 1);\n          }\n        }\n        return null;\n      }\n    }\n\n    /**\n     * Returns corresponding view {@link module:engine/view/element~Element Element} or\n     * {@link module:engine/view/documentfragment~DocumentFragment} for provided DOM element or\n     * document fragment. If there is no view item {@link module:engine/view/domconverter~DomConverter#bindElements bound}\n     * to the given DOM - `undefined` is returned.\n     * For all DOM elements rendered by {@link module:engine/view/uielement~UIElement} that UIElement will be returned.\n     *\n     * @param {DocumentFragment|Element} domElementOrDocumentFragment DOM element or document fragment.\n     * @returns {module:engine/view/element~Element|module:engine/view/documentfragment~DocumentFragment|undefined}\n     * Corresponding view element, document fragment or `undefined` if no element was bound.\n     */\n  }, {\n    key: \"mapDomToView\",\n    value: function mapDomToView(domElementOrDocumentFragment) {\n      return this.getParentUIElement(domElementOrDocumentFragment) || this._domToViewMapping.get(domElementOrDocumentFragment);\n    }\n\n    /**\n     * Finds corresponding text node. Text nodes are not {@link module:engine/view/domconverter~DomConverter#bindElements bound},\n     * corresponding text node is returned based on the sibling or parent.\n     *\n     * If the directly previous sibling is a {@link module:engine/view/domconverter~DomConverter#bindElements bound} element, it is used\n     * to find the corresponding text node.\n     *\n     * If this is a first child in the parent and the parent is a {@link module:engine/view/domconverter~DomConverter#bindElements bound}\n     * element, it is used to find the corresponding text node.\n     *\n     * For all text nodes rendered by {@link module:engine/view/uielement~UIElement} that UIElement will be returned.\n     *\n     * Otherwise `null` is returned.\n     *\n     * Note that for the block or inline {@link module:engine/view/filler filler} this method returns `null`.\n     *\n     * @param {Text} domText DOM text node.\n     * @returns {module:engine/view/text~Text|null} Corresponding view text node or `null`, if it was not possible to find a\n     * corresponding node.\n     */\n  }, {\n    key: \"findCorrespondingViewText\",\n    value: function findCorrespondingViewText(domText) {\n      if (isInlineFiller(domText)) {\n        return null;\n      }\n\n      // If DOM text was rendered by UIElement - return that element.\n      var uiElement = this.getParentUIElement(domText);\n      if (uiElement) {\n        return uiElement;\n      }\n      var previousSibling = domText.previousSibling;\n\n      // Try to use previous sibling to find the corresponding text node.\n      if (previousSibling) {\n        if (!this.isElement(previousSibling)) {\n          // The previous is text or comment.\n          return null;\n        }\n        var viewElement = this.mapDomToView(previousSibling);\n        if (viewElement) {\n          var nextSibling = viewElement.nextSibling;\n\n          // It might be filler which has no corresponding view node.\n          if (nextSibling instanceof ViewText) {\n            return viewElement.nextSibling;\n          } else {\n            return null;\n          }\n        }\n      }\n      // Try to use parent to find the corresponding text node.\n      else {\n        var _viewElement = this.mapDomToView(domText.parentNode);\n        if (_viewElement) {\n          var firstChild = _viewElement.getChild(0);\n\n          // It might be filler which has no corresponding view node.\n          if (firstChild instanceof ViewText) {\n            return firstChild;\n          } else {\n            return null;\n          }\n        }\n      }\n      return null;\n    }\n\n    /**\n     * Returns corresponding DOM item for provided {@link module:engine/view/element~Element Element} or\n     * {@link module:engine/view/documentfragment~DocumentFragment DocumentFragment}.\n     * To find a corresponding text for {@link module:engine/view/text~Text view Text instance}\n     * use {@link #findCorrespondingDomText}.\n     *\n     * @param {module:engine/view/element~Element|module:engine/view/documentfragment~DocumentFragment} viewNode\n     * View element or document fragment.\n     * @returns {Node|DocumentFragment|undefined} Corresponding DOM node or document fragment.\n     */\n  }, {\n    key: \"mapViewToDom\",\n    value: function mapViewToDom(documentFragmentOrElement) {\n      return this._viewToDomMapping.get(documentFragmentOrElement);\n    }\n\n    /**\n     * Finds corresponding text node. Text nodes are not {@link module:engine/view/domconverter~DomConverter#bindElements bound},\n     * corresponding text node is returned based on the sibling or parent.\n     *\n     * If the directly previous sibling is a {@link module:engine/view/domconverter~DomConverter#bindElements bound} element, it is used\n     * to find the corresponding text node.\n     *\n     * If this is a first child in the parent and the parent is a {@link module:engine/view/domconverter~DomConverter#bindElements bound}\n     * element, it is used to find the corresponding text node.\n     *\n     * Otherwise `null` is returned.\n     *\n     * @param {module:engine/view/text~Text} viewText View text node.\n     * @returns {Text|null} Corresponding DOM text node or `null`, if it was not possible to find a corresponding node.\n     */\n  }, {\n    key: \"findCorrespondingDomText\",\n    value: function findCorrespondingDomText(viewText) {\n      var previousSibling = viewText.previousSibling;\n\n      // Try to use previous sibling to find the corresponding text node.\n      if (previousSibling && this.mapViewToDom(previousSibling)) {\n        return this.mapViewToDom(previousSibling).nextSibling;\n      }\n\n      // If this is a first node, try to use parent to find the corresponding text node.\n      if (!previousSibling && viewText.parent && this.mapViewToDom(viewText.parent)) {\n        return this.mapViewToDom(viewText.parent).childNodes[0];\n      }\n      return null;\n    }\n\n    /**\n     * Focuses DOM editable that is corresponding to provided {@link module:engine/view/editableelement~EditableElement}.\n     *\n     * @param {module:engine/view/editableelement~EditableElement} viewEditable\n     */\n  }, {\n    key: \"focus\",\n    value: function focus(viewEditable) {\n      var domEditable = this.mapViewToDom(viewEditable);\n      if (domEditable && domEditable.ownerDocument.activeElement !== domEditable) {\n        // Save the scrollX and scrollY positions before the focus.\n        var _global$window = global.window,\n          scrollX = _global$window.scrollX,\n          scrollY = _global$window.scrollY;\n        var scrollPositions = [];\n\n        // Save all scrollLeft and scrollTop values starting from domEditable up to\n        // document#documentElement.\n        forEachDomNodeAncestor(domEditable, function (node) {\n          var scrollLeft = node.scrollLeft,\n            scrollTop = node.scrollTop;\n          scrollPositions.push([scrollLeft, scrollTop]);\n        });\n        domEditable.focus();\n\n        // Restore scrollLeft and scrollTop values starting from domEditable up to\n        // document#documentElement.\n        // https://github.com/ckeditor/ckeditor5-engine/issues/951\n        // https://github.com/ckeditor/ckeditor5-engine/issues/957\n        forEachDomNodeAncestor(domEditable, function (node) {\n          var _scrollPositions$shif = scrollPositions.shift(),\n            _scrollPositions$shif2 = _slicedToArray(_scrollPositions$shif, 2),\n            scrollLeft = _scrollPositions$shif2[0],\n            scrollTop = _scrollPositions$shif2[1];\n          node.scrollLeft = scrollLeft;\n          node.scrollTop = scrollTop;\n        });\n\n        // Restore the scrollX and scrollY positions after the focus.\n        // https://github.com/ckeditor/ckeditor5-engine/issues/951\n        global.window.scrollTo(scrollX, scrollY);\n      }\n    }\n\n    /**\n     * Returns `true` when `node.nodeType` equals `Node.ELEMENT_NODE`.\n     *\n     * @param {Node} node Node to check.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"isElement\",\n    value: function isElement(node) {\n      return node && node.nodeType == Node.ELEMENT_NODE;\n    }\n\n    /**\n     * Returns `true` when `node.nodeType` equals `Node.DOCUMENT_FRAGMENT_NODE`.\n     *\n     * @param {Node} node Node to check.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"isDocumentFragment\",\n    value: function isDocumentFragment(node) {\n      return node && node.nodeType == Node.DOCUMENT_FRAGMENT_NODE;\n    }\n\n    /**\n     * Returns `true` when `node.nodeType` equals `Node.COMMENT_NODE`.\n     *\n     * @param {Node} node Node to check.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"isComment\",\n    value: function isComment(node) {\n      return node && node.nodeType == Node.COMMENT_NODE;\n    }\n\n    /**\n     * Checks if the node is an instance of the block filler for this DOM converter.\n     *\n     *\t\tconst converter = new DomConverter( { blockFillerMode: 'br' } );\n     *\n     *\t\tconverter.isBlockFiller( BR_FILLER( document ) ); // true\n     *\t\tconverter.isBlockFiller( NBSP_FILLER( document ) ); // false\n     *\n     * **Note:**: For the `'nbsp'` mode the method also checks context of a node so it cannot be a detached node.\n     *\n     * @param {Node} domNode DOM node to check.\n     * @returns {Boolean} True if a node is considered a block filler for given mode.\n     */\n  }, {\n    key: \"isBlockFiller\",\n    value: function isBlockFiller(domNode) {\n      return this.blockFillerMode == 'br' ? domNode.isEqualNode(BR_FILLER_REF) : isNbspBlockFiller(domNode, this.blockElements);\n    }\n\n    /**\n     * Returns `true` if given selection is a backward selection, that is, if it's `focus` is before `anchor`.\n     *\n     * @param {Selection} DOM Selection instance to check.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"isDomSelectionBackward\",\n    value: function isDomSelectionBackward(selection) {\n      if (selection.isCollapsed) {\n        return false;\n      }\n\n      // Since it takes multiple lines of code to check whether a \"DOM Position\" is before/after another \"DOM Position\",\n      // we will use the fact that range will collapse if it's end is before it's start.\n      var range = document.createRange();\n      range.setStart(selection.anchorNode, selection.anchorOffset);\n      range.setEnd(selection.focusNode, selection.focusOffset);\n      var backward = range.collapsed;\n      range.detach();\n      return backward;\n    }\n\n    /**\n     * Returns parent {@link module:engine/view/uielement~UIElement} for provided DOM node. Returns `null` if there is no\n     * parent UIElement.\n     *\n     * @param {Node} domNode\n     * @returns {module:engine/view/uielement~UIElement|null}\n     */\n  }, {\n    key: \"getParentUIElement\",\n    value: function getParentUIElement(domNode) {\n      var ancestors = getAncestors(domNode);\n\n      // Remove domNode from the list.\n      ancestors.pop();\n      while (ancestors.length) {\n        var _domNode = ancestors.pop();\n        var viewNode = this._domToViewMapping.get(_domNode);\n        if (viewNode && viewNode.is('uiElement')) {\n          return viewNode;\n        }\n      }\n      return null;\n    }\n\n    /**\n     * Checks if given selection's boundaries are at correct places.\n     *\n     * The following places are considered as incorrect for selection boundaries:\n     * * before or in the middle of the inline filler sequence,\n     * * inside the DOM element which represents {@link module:engine/view/uielement~UIElement a view ui element}.\n     *\n     * @param {Selection} domSelection DOM Selection object to be checked.\n     * @returns {Boolean} `true` if the given selection is at a correct place, `false` otherwise.\n     */\n  }, {\n    key: \"isDomSelectionCorrect\",\n    value: function isDomSelectionCorrect(domSelection) {\n      return this._isDomSelectionPositionCorrect(domSelection.anchorNode, domSelection.anchorOffset) && this._isDomSelectionPositionCorrect(domSelection.focusNode, domSelection.focusOffset);\n    }\n\n    /**\n     * Checks if the given DOM position is a correct place for selection boundary. See {@link #isDomSelectionCorrect}.\n     *\n     * @private\n     * @param {Element} domParent Position parent.\n     * @param {Number} offset Position offset.\n     * @returns {Boolean} `true` if given position is at a correct place for selection boundary, `false` otherwise.\n     */\n  }, {\n    key: \"_isDomSelectionPositionCorrect\",\n    value: function _isDomSelectionPositionCorrect(domParent, offset) {\n      // If selection is before or in the middle of inline filler string, it is incorrect.\n      if (isText(domParent) && startsWithFiller(domParent) && offset < INLINE_FILLER_LENGTH) {\n        // Selection in a text node, at wrong position (before or in the middle of filler).\n        return false;\n      }\n      if (this.isElement(domParent) && startsWithFiller(domParent.childNodes[offset])) {\n        // Selection in an element node, before filler text node.\n        return false;\n      }\n      var viewParent = this.mapDomToView(domParent);\n\n      // If selection is in `view.UIElement`, it is incorrect. Note that `mapDomToView()` returns `view.UIElement`\n      // also for any dom element that is inside the view ui element (so we don't need to perform any additional checks).\n      if (viewParent && viewParent.is('uiElement')) {\n        return false;\n      }\n      return true;\n    }\n\n    /**\n     * Takes text data from a given {@link module:engine/view/text~Text#data} and processes it so\n     * it is correctly displayed in the DOM.\n     *\n     * Following changes are done:\n     *\n     * * a space at the beginning is changed to `&nbsp;` if this is the first text node in its container\n     * element or if a previous text node ends with a space character,\n     * * space at the end of the text node is changed to `&nbsp;` if there are two spaces at the end of a node or if next node\n     * starts with a space or if it is the last text node in its container,\n     * * remaining spaces are replaced to a chain of spaces and `&nbsp;` (e.g. `'x   x'` becomes `'x &nbsp; x'`).\n     *\n     * Content of {@link #preElements} is not processed.\n     *\n     * @private\n     * @param {module:engine/view/text~Text} node View text node to process.\n     * @returns {String} Processed text data.\n     */\n  }, {\n    key: \"_processDataFromViewText\",\n    value: function _processDataFromViewText(node) {\n      var _this3 = this;\n      var data = node.data;\n\n      // If any of node ancestors has a name which is in `preElements` array, then currently processed\n      // view text node is (will be) in preformatted element. We should not change whitespaces then.\n      if (node.getAncestors().some(function (parent) {\n        return _this3.preElements.includes(parent.name);\n      })) {\n        return data;\n      }\n\n      // 1. Replace the first space with a nbsp if the previous node ends with a space or there is no previous node\n      // (container element boundary).\n      if (data.charAt(0) == ' ') {\n        var prevNode = this._getTouchingViewTextNode(node, false);\n        var prevEndsWithSpace = prevNode && this._nodeEndsWithSpace(prevNode);\n        if (prevEndsWithSpace || !prevNode) {\n          data = \"\\xA0\" + data.substr(1);\n        }\n      }\n\n      // 2. Replace the last space with nbsp if there are two spaces at the end or if the next node starts with space or there is no\n      // next node (container element boundary).\n      //\n      // Keep in mind that Firefox prefers $nbsp; before tag, not inside it:\n      //\n      // Foo <span>&nbsp;bar</span>  <-- bad.\n      // Foo&nbsp;<span> bar</span>  <-- good.\n      //\n      // More here: https://github.com/ckeditor/ckeditor5-engine/issues/1747.\n      if (data.charAt(data.length - 1) == ' ') {\n        var nextNode = this._getTouchingViewTextNode(node, true);\n        if (data.charAt(data.length - 2) == ' ' || !nextNode || nextNode.data.charAt(0) == ' ') {\n          data = data.substr(0, data.length - 1) + \"\\xA0\";\n        }\n      }\n\n      // 3. Create space+nbsp pairs.\n      return data.replace(/ {2}/g, \" \\xA0\");\n    }\n\n    /**\n     * Checks whether given node ends with a space character after changing appropriate space characters to `&nbsp;`s.\n     *\n     * @private\n     * @param {module:engine/view/text~Text} node Node to check.\n     * @returns {Boolean} `true` if given `node` ends with space, `false` otherwise.\n     */\n  }, {\n    key: \"_nodeEndsWithSpace\",\n    value: function _nodeEndsWithSpace(node) {\n      var _this4 = this;\n      if (node.getAncestors().some(function (parent) {\n        return _this4.preElements.includes(parent.name);\n      })) {\n        return false;\n      }\n      var data = this._processDataFromViewText(node);\n      return data.charAt(data.length - 1) == ' ';\n    }\n\n    /**\n     * Takes text data from native `Text` node and processes it to a correct {@link module:engine/view/text~Text view text node} data.\n     *\n     * Following changes are done:\n     *\n     * * multiple whitespaces are replaced to a single space,\n     * * space at the beginning of a text node is removed if it is the first text node in its container\n     * element or if the previous text node ends with a space character,\n     * * space at the end of the text node is removed if there are two spaces at the end of a node or if next node\n     * starts with a space or if it is the last text node in its container\n     * * nbsps are converted to spaces.\n     *\n     * @param {Node} node DOM text node to process.\n     * @returns {String} Processed data.\n     * @private\n     */\n  }, {\n    key: \"_processDataFromDomText\",\n    value: function _processDataFromDomText(node) {\n      var data = node.data;\n      if (_hasDomParentOfType(node, this.preElements)) {\n        return getDataWithoutFiller(node);\n      }\n\n      // Change all consecutive whitespace characters (from the [ \\n\\t\\r] set –\n      // see https://github.com/ckeditor/ckeditor5-engine/issues/822#issuecomment-311670249) to a single space character.\n      // That's how multiple whitespaces are treated when rendered, so we normalize those whitespaces.\n      // We're replacing 1+ (and not 2+) to also normalize singular \\n\\t\\r characters (#822).\n      data = data.replace(/[ \\n\\t\\r]{1,}/g, ' ');\n      var prevNode = this._getTouchingInlineDomNode(node, false);\n      var nextNode = this._getTouchingInlineDomNode(node, true);\n      var shouldLeftTrim = this._checkShouldLeftTrimDomText(prevNode);\n      var shouldRightTrim = this._checkShouldRightTrimDomText(node, nextNode);\n\n      // If the previous dom text node does not exist or it ends by whitespace character, remove space character from the beginning\n      // of this text node. Such space character is treated as a whitespace.\n      if (shouldLeftTrim) {\n        data = data.replace(/^ /, '');\n      }\n\n      // If the next text node does not exist remove space character from the end of this text node.\n      if (shouldRightTrim) {\n        data = data.replace(/ $/, '');\n      }\n\n      // At the beginning and end of a block element, Firefox inserts normal space + <br> instead of non-breaking space.\n      // This means that the text node starts/end with normal space instead of non-breaking space.\n      // This causes a problem because the normal space would be removed in `.replace` calls above. To prevent that,\n      // the inline filler is removed only after the data is initially processed (by the `.replace` above). See ckeditor5#692.\n      data = getDataWithoutFiller(new Text(data));\n\n      // At this point we should have removed all whitespaces from DOM text data.\n      //\n      // Now, We will reverse the process that happens in `_processDataFromViewText`.\n      //\n      // We have to change &nbsp; chars, that were in DOM text data because of rendering reasons, to spaces.\n      // First, change all ` \\u00A0` pairs (space + &nbsp;) to two spaces. DOM converter changes two spaces from model/view to\n      // ` \\u00A0` to ensure proper rendering. Since here we convert back, we recognize those pairs and change them back to `  `.\n      data = data.replace(/ \\u00A0/g, '  ');\n\n      // Then, let's change the last nbsp to a space.\n      if (/( |\\u00A0)\\u00A0$/.test(data) || !nextNode || nextNode.data && nextNode.data.charAt(0) == ' ') {\n        data = data.replace(/\\u00A0$/, ' ');\n      }\n\n      // Then, change &nbsp; character that is at the beginning of the text node to space character.\n      // We do that replacement only if this is the first node or the previous node ends on whitespace character.\n      if (shouldLeftTrim) {\n        data = data.replace(/^\\u00A0/, ' ');\n      }\n\n      // At this point, all whitespaces should be removed and all &nbsp; created for rendering reasons should be\n      // changed to normal space. All left &nbsp; are &nbsp; inserted intentionally.\n      return data;\n    }\n\n    /**\n     * Helper function which checks if a DOM text node, preceded by the given `prevNode` should\n     * be trimmed from the left side.\n     *\n     * @param {Node} prevNode\n     */\n  }, {\n    key: \"_checkShouldLeftTrimDomText\",\n    value: function _checkShouldLeftTrimDomText(prevNode) {\n      if (!prevNode) {\n        return true;\n      }\n      if (isElement(prevNode)) {\n        return true;\n      }\n      return /[^\\S\\u00A0]/.test(prevNode.data.charAt(prevNode.data.length - 1));\n    }\n\n    /**\n     * Helper function which checks if a DOM text node, succeeded by the given `nextNode` should\n     * be trimmed from the right side.\n     *\n     * @param {Node} node\n     * @param {Node} nextNode\n     */\n  }, {\n    key: \"_checkShouldRightTrimDomText\",\n    value: function _checkShouldRightTrimDomText(node, nextNode) {\n      if (nextNode) {\n        return false;\n      }\n      return !startsWithFiller(node);\n    }\n\n    /**\n     * Helper function. For given {@link module:engine/view/text~Text view text node}, it finds previous or next sibling\n     * that is contained in the same container element. If there is no such sibling, `null` is returned.\n     *\n     * @param {module:engine/view/text~Text} node Reference node.\n     * @param {Boolean} getNext\n     * @returns {module:engine/view/text~Text|null} Touching text node or `null` if there is no next or previous touching text node.\n     */\n  }, {\n    key: \"_getTouchingViewTextNode\",\n    value: function _getTouchingViewTextNode(node, getNext) {\n      var treeWalker = new ViewTreeWalker({\n        startPosition: getNext ? ViewPosition._createAfter(node) : ViewPosition._createBefore(node),\n        direction: getNext ? 'forward' : 'backward'\n      });\n      var _iterator5 = _createForOfIteratorHelper(treeWalker),\n        _step5;\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var value = _step5.value;\n          // ViewContainerElement is found on a way to next ViewText node, so given `node` was first/last\n          // text node in its container element.\n          if (value.item.is('containerElement')) {\n            return null;\n          }\n          // <br> found – it works like a block boundary, so do not scan further.\n          else if (value.item.is('br')) {\n            return null;\n          }\n          // Found a text node in the same container element.\n          else if (value.item.is('textProxy')) {\n            return value.item;\n          }\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n      return null;\n    }\n\n    /**\n     * Helper function. For the given text node, it finds the closest touching node which is either\n     * a text node or a `<br>`. The search is terminated at block element boundaries and if a matching node\n     * wasn't found so far, `null` is returned.\n     *\n     * In the following DOM structure:\n     *\n     *\t\t<p>foo<b>bar</b><br>bom</p>\n     *\n     * * `foo` doesn't have its previous touching inline node (`null` is returned),\n     * * `foo`'s next touching inline node is `bar`\n     * * `bar`'s next touching inline node is `<br>`\n     *\n     * This method returns text nodes and `<br>` elements because these types of nodes affect how\n     * spaces in the given text node need to be converted.\n     *\n     * @private\n     * @param {Text} node\n     * @param {Boolean} getNext\n     * @returns {Text|Element|null}\n     */\n  }, {\n    key: \"_getTouchingInlineDomNode\",\n    value: function _getTouchingInlineDomNode(node, getNext) {\n      if (!node.parentNode) {\n        return null;\n      }\n      var direction = getNext ? 'nextNode' : 'previousNode';\n      var document = node.ownerDocument;\n      var topmostParent = getAncestors(node)[0];\n      var treeWalker = document.createTreeWalker(topmostParent, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT, {\n        acceptNode: function acceptNode(node) {\n          if (isText(node)) {\n            return NodeFilter.FILTER_ACCEPT;\n          }\n          if (node.tagName == 'BR') {\n            return NodeFilter.FILTER_ACCEPT;\n          }\n          return NodeFilter.FILTER_SKIP;\n        }\n      });\n      treeWalker.currentNode = node;\n      var touchingNode = treeWalker[direction]();\n      if (touchingNode !== null) {\n        var lca = getCommonAncestor(node, touchingNode);\n\n        // If there is common ancestor between the text node and next/prev text node,\n        // and there are no block elements on a way from the text node to that ancestor,\n        // and there are no block elements on a way from next/prev text node to that ancestor...\n        if (lca && !_hasDomParentOfType(node, this.blockElements, lca) && !_hasDomParentOfType(touchingNode, this.blockElements, lca)) {\n          // Then they are in the same container element.\n          return touchingNode;\n        }\n      }\n      return null;\n    }\n  }]);\n}(); // Helper function.\n// Used to check if given native `Element` or `Text` node has parent with tag name from `types` array.\n//\n// @param {Node} node\n// @param {Array.<String>} types\n// @param {Boolean} [boundaryParent] Can be given if parents should be checked up to a given element (excluding that element).\n// @returns {Boolean} `true` if such parent exists or `false` if it does not.\nexport { DomConverter as default };\nfunction _hasDomParentOfType(node, types, boundaryParent) {\n  var parents = getAncestors(node);\n  if (boundaryParent) {\n    parents = parents.slice(parents.indexOf(boundaryParent) + 1);\n  }\n  return parents.some(function (parent) {\n    return parent.tagName && types.includes(parent.tagName.toLowerCase());\n  });\n}\n\n// A helper that executes given callback for each DOM node's ancestor, starting from the given node\n// and ending in document#documentElement.\n//\n// @param {Node} node\n// @param {Function} callback A callback to be executed for each ancestor.\nfunction forEachDomNodeAncestor(node, callback) {\n  while (node && node != global.document) {\n    callback(node);\n    node = node.parentNode;\n  }\n}\n\n// Checks if given node is a nbsp block filler.\n//\n// A &nbsp; is a block filler only if it is a single child of a block element.\n//\n// @param {Node} domNode DOM node.\n// @returns {Boolean}\nfunction isNbspBlockFiller(domNode, blockElements) {\n  var isNBSP = isText(domNode) && domNode.data == \"\\xA0\";\n  return isNBSP && hasBlockParent(domNode, blockElements) && domNode.parentNode.childNodes.length === 1;\n}\n\n// Checks if domNode has block parent.\n//\n// @param {Node} domNode DOM node.\n// @returns {Boolean}\nfunction hasBlockParent(domNode, blockElements) {\n  var parent = domNode.parentNode;\n  return parent && parent.tagName && blockElements.includes(parent.tagName.toLowerCase());\n}\n\n/**\n * Enum representing type of the block filler.\n *\n * Possible values:\n *\n * * `br` - for `<br>` block filler used in editing view,\n * * `nbsp` - for `&nbsp;` block fillers used in the data.\n *\n * @typedef {String} module:engine/view/filler~BlockFillerMode\n */","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _toConsumableArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.find.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module module:engine/view/downcastwriter\n */\n\nimport Position from './position';\nimport Range from './range';\nimport Selection from './selection';\nimport ContainerElement from './containerelement';\nimport AttributeElement from './attributeelement';\nimport EmptyElement from './emptyelement';\nimport UIElement from './uielement';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport DocumentFragment from './documentfragment';\nimport isIterable from '@ckeditor/ckeditor5-utils/src/isiterable';\nimport Text from './text';\nimport EditableElement from './editableelement';\nimport { isPlainObject } from 'lodash-es';\n\n/**\n * View downcast writer.\n *\n * It provides a set of methods used to manipulate view nodes.\n *\n * Do not create an instance of this writer manually. To modify a view structure, use\n * the {@link module:engine/view/view~View#change `View#change()`} block.\n *\n * The `DowncastWriter` is designed to work with semantic views which are the views that were/are being downcasted from the model.\n * To work with ordinary views (e.g. parsed from a pasted content) use the\n * {@link module:engine/view/upcastwriter~UpcastWriter upcast writer}.\n *\n * Read more about changing the view in the {@glink framework/guides/architecture/editing-engine#changing-the-view Changing the view}\n * section of the {@glink framework/guides/architecture/editing-engine Editing engine architecture} guide.\n */\nvar DowncastWriter = /*#__PURE__*/function () {\n  function DowncastWriter(document) {\n    _classCallCheck(this, DowncastWriter);\n    /**\n     * @readonly\n     * @type {module:engine/view/document~Document}\n     */\n    this.document = document;\n\n    /**\n     * Holds references to the attribute groups that share the same {@link module:engine/view/attributeelement~AttributeElement#id id}.\n     * The keys are `id`s, the values are `Set`s holding {@link module:engine/view/attributeelement~AttributeElement}s.\n     *\n     * @private\n     * @type {Map.<String,Set>}\n     */\n    this._cloneGroups = new Map();\n  }\n\n  /**\n   * Sets {@link module:engine/view/documentselection~DocumentSelection selection's} ranges and direction to the\n   * specified location based on the given {@link module:engine/view/selection~Selectable selectable}.\n   *\n   * Usage:\n   *\n   *\t\t// Sets selection to the given range.\n   *\t\tconst range = writer.createRange( start, end );\n   *\t\twriter.setSelection( range );\n   *\n   *\t\t// Sets backward selection to the given range.\n   *\t\tconst range = writer.createRange( start, end );\n   *\t\twriter.setSelection( range );\n   *\n   *\t\t// Sets selection to given ranges.\n   * \t\tconst ranges = [ writer.createRange( start1, end2 ), writer.createRange( start2, end2 ) ];\n   *\t\twriter.setSelection( range );\n   *\n   *\t\t// Sets selection to the other selection.\n   *\t\tconst otherSelection = writer.createSelection();\n   *\t\twriter.setSelection( otherSelection );\n   *\n   * \t\t// Sets collapsed selection at the given position.\n   *\t\tconst position = writer.createPositionFromPath( root, path );\n   *\t\twriter.setSelection( position );\n   *\n   * \t\t// Sets collapsed selection at the position of given item and offset.\n   *\t\tconst paragraph = writer.createContainerElement( 'p' );\n   *\t\twriter.setSelection( paragraph, offset );\n   *\n   * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n  \t * that element and ends after the last child of that element.\n   *\n   * \t\twriter.setSelection( paragraph, 'in' );\n   *\n   * Creates a range on the {@link module:engine/view/item~Item item} which starts before the item and ends just after the item.\n   *\n   *\t\twriter.setSelection( paragraph, 'on' );\n   *\n   * \t\t// Removes all ranges.\n   *\t\twriter.setSelection( null );\n   *\n   * `DowncastWriter#setSelection()` allow passing additional options (`backward`, `fake` and `label`) as the last argument.\n   *\n   *\t\t// Sets selection as backward.\n   *\t\twriter.setSelection( range, { backward: true } );\n   *\n   *\t\t// Sets selection as fake.\n   *\t\t// Fake selection does not render as browser native selection over selected elements and is hidden to the user.\n   * \t\t// This way, no native selection UI artifacts are displayed to the user and selection over elements can be\n   * \t\t// represented in other way, for example by applying proper CSS class.\n   *\t\twriter.setSelection( range, { fake: true } );\n   *\n   * \t\t// Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM\n   * \t\t// (and be  properly handled by screen readers).\n   *\t\twriter.setSelection( range, { fake: true, label: 'foo' } );\n   *\n   * @param {module:engine/view/selection~Selectable} selectable\n   * @param {Number|'before'|'end'|'after'|'on'|'in'} [placeOrOffset] Sets place or offset of the selection.\n   * @param {Object} [options]\n   * @param {Boolean} [options.backward] Sets this selection instance to be backward.\n   * @param {Boolean} [options.fake] Sets this selection instance to be marked as `fake`.\n   * @param {String} [options.label] Label for the fake selection.\n   */\n  return _createClass(DowncastWriter, [{\n    key: \"setSelection\",\n    value: function setSelection(selectable, placeOrOffset, options) {\n      this.document.selection._setTo(selectable, placeOrOffset, options);\n    }\n\n    /**\n     * Moves {@link module:engine/view/documentselection~DocumentSelection#focus selection's focus} to the specified location.\n     *\n     * The location can be specified in the same form as {@link module:engine/view/view~View#createPositionAt view.createPositionAt()}\n     * parameters.\n     *\n     * @param {module:engine/view/item~Item|module:engine/view/position~Position} itemOrPosition\n     * @param {Number|'end'|'before'|'after'} [offset] Offset or one of the flags. Used only when\n     * first parameter is a {@link module:engine/view/item~Item view item}.\n     */\n  }, {\n    key: \"setSelectionFocus\",\n    value: function setSelectionFocus(itemOrPosition, offset) {\n      this.document.selection._setFocus(itemOrPosition, offset);\n    }\n\n    /**\n     * Creates a new {@link module:engine/view/text~Text text node}.\n     *\n     *\t\twriter.createText( 'foo' );\n     *\n     * @param {String} data The text's data.\n     * @returns {module:engine/view/text~Text} The created text node.\n     */\n  }, {\n    key: \"createText\",\n    value: function createText(data) {\n      return new Text(data);\n    }\n\n    /**\n     * Creates new {@link module:engine/view/attributeelement~AttributeElement}.\n     *\n     *\t\twriter.createAttributeElement( 'strong' );\n     *\t\twriter.createAttributeElement( 'a', { href: 'foo.bar' } );\n     *\n     *\t\t// Make `<a>` element contain other attributes element so the `<a>` element is not broken.\n     *\t\twriter.createAttributeElement( 'a', { href: 'foo.bar' }, { priority: 5 } );\n     *\n     *\t\t// Set `id` of a marker element so it is not joined or merged with \"normal\" elements.\n     *\t\twriter.createAttributeElement( 'span', { class: 'my-marker' }, { id: 'marker:my' } );\n     *\n     * @param {String} name Name of the element.\n     * @param {Object} [attributes] Element's attributes.\n     * @param {Object} [options] Element's options.\n     * @param {Number} [options.priority] Element's {@link module:engine/view/attributeelement~AttributeElement#priority priority}.\n     * @param {Number|String} [options.id] Element's {@link module:engine/view/attributeelement~AttributeElement#id id}.\n     * @returns {module:engine/view/attributeelement~AttributeElement} Created element.\n     */\n  }, {\n    key: \"createAttributeElement\",\n    value: function createAttributeElement(name, attributes) {\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      var attributeElement = new AttributeElement(name, attributes);\n      if (options.priority) {\n        attributeElement._priority = options.priority;\n      }\n      if (options.id) {\n        attributeElement._id = options.id;\n      }\n      return attributeElement;\n    }\n\n    /**\n     * Creates new {@link module:engine/view/containerelement~ContainerElement}.\n     *\n     *\t\twriter.createContainerElement( 'p' );\n     *\n     *\t\t// Create element with custom attributes.\n     *\t\twriter.createContainerElement( 'div', { id: 'foo-bar', 'data-baz': '123' } );\n     *\n     *\t\t// Create element with custom styles.\n     *\t\twriter.createContainerElement( 'p', { style: 'font-weight: bold; padding-bottom: 10px' } );\n     *\n     *\t\t// Create element with custom classes.\n     *\t\twriter.createContainerElement( 'p', { class: 'foo bar baz' } );\n     *\n     * @param {String} name Name of the element.\n     * @param {Object} [attributes] Elements attributes.\n     * @returns {module:engine/view/containerelement~ContainerElement} Created element.\n     */\n  }, {\n    key: \"createContainerElement\",\n    value: function createContainerElement(name, attributes) {\n      return new ContainerElement(name, attributes);\n    }\n\n    /**\n     * Creates new {@link module:engine/view/editableelement~EditableElement}.\n     *\n     *\t\twriter.createEditableElement( 'div' );\n     *\t\twriter.createEditableElement( 'div', { id: 'foo-1234' } );\n     *\n     * @param {String} name Name of the element.\n     * @param {Object} [attributes] Elements attributes.\n     * @returns {module:engine/view/editableelement~EditableElement} Created element.\n     */\n  }, {\n    key: \"createEditableElement\",\n    value: function createEditableElement(name, attributes) {\n      var editableElement = new EditableElement(name, attributes);\n      editableElement._document = this.document;\n      return editableElement;\n    }\n\n    /**\n     * Creates new {@link module:engine/view/emptyelement~EmptyElement}.\n     *\n     *\t\twriter.createEmptyElement( 'img' );\n     *\t\twriter.createEmptyElement( 'img', { id: 'foo-1234' } );\n     *\n     * @param {String} name Name of the element.\n     * @param {Object} [attributes] Elements attributes.\n     * @returns {module:engine/view/emptyelement~EmptyElement} Created element.\n     */\n  }, {\n    key: \"createEmptyElement\",\n    value: function createEmptyElement(name, attributes) {\n      return new EmptyElement(name, attributes);\n    }\n\n    /**\n     * Creates new {@link module:engine/view/uielement~UIElement}.\n     *\n     *\t\twriter.createUIElement( 'span' );\n     *\t\twriter.createUIElement( 'span', { id: 'foo-1234' } );\n     *\n     * Custom render function can be provided as third parameter:\n     *\n     *\t\twriter.createUIElement( 'span', null, function( domDocument ) {\n     *\t\t\tconst domElement = this.toDomElement( domDocument );\n     *\t\t\tdomElement.innerHTML = '<b>this is ui element</b>';\n     *\n     *\t\t\treturn domElement;\n     *\t\t} );\n     *\n     * @param {String} name Name of the element.\n     * @param {Object} [attributes] Elements attributes.\n     * @param {Function} [renderFunction] Custom render function.\n     * @returns {module:engine/view/uielement~UIElement} Created element.\n     */\n  }, {\n    key: \"createUIElement\",\n    value: function createUIElement(name, attributes, renderFunction) {\n      var uiElement = new UIElement(name, attributes);\n      if (renderFunction) {\n        uiElement.render = renderFunction;\n      }\n      return uiElement;\n    }\n\n    /**\n     * Adds or overwrite element's attribute with a specified key and value.\n     *\n     *\t\twriter.setAttribute( 'href', 'http://ckeditor.com', linkElement );\n     *\n     * @param {String} key Attribute key.\n     * @param {String} value Attribute value.\n     * @param {module:engine/view/element~Element} element\n     */\n  }, {\n    key: \"setAttribute\",\n    value: function setAttribute(key, value, element) {\n      element._setAttribute(key, value);\n    }\n\n    /**\n     * Removes attribute from the element.\n     *\n     *\t\twriter.removeAttribute( 'href', linkElement );\n     *\n     * @param {String} key Attribute key.\n     * @param {module:engine/view/element~Element} element\n     */\n  }, {\n    key: \"removeAttribute\",\n    value: function removeAttribute(key, element) {\n      element._removeAttribute(key);\n    }\n\n    /**\n     * Adds specified class to the element.\n     *\n     *\t\twriter.addClass( 'foo', linkElement );\n     *\t\twriter.addClass( [ 'foo', 'bar' ], linkElement );\n     *\n     * @param {Array.<String>|String} className\n     * @param {module:engine/view/element~Element} element\n     */\n  }, {\n    key: \"addClass\",\n    value: function addClass(className, element) {\n      element._addClass(className);\n    }\n\n    /**\n     * Removes specified class from the element.\n     *\n     *\t\twriter.removeClass( 'foo', linkElement );\n     *\t\twriter.removeClass( [ 'foo', 'bar' ], linkElement );\n     *\n     * @param {Array.<String>|String} className\n     * @param {module:engine/view/element~Element} element\n     */\n  }, {\n    key: \"removeClass\",\n    value: function removeClass(className, element) {\n      element._removeClass(className);\n    }\n\n    /**\n     * Adds style to the element.\n     *\n     *\t\twriter.setStyle( 'color', 'red', element );\n     *\t\twriter.setStyle( {\n     *\t\t\tcolor: 'red',\n     *\t\t\tposition: 'fixed'\n     *\t\t}, element );\n     *\n     * @param {String|Object} property Property name or object with key - value pairs.\n     * @param {String} [value] Value to set. This parameter is ignored if object is provided as the first parameter.\n     * @param {module:engine/view/element~Element} element Element to set styles on.\n     */\n  }, {\n    key: \"setStyle\",\n    value: function setStyle(property, value, element) {\n      if (isPlainObject(property) && element === undefined) {\n        element = value;\n      }\n      element._setStyle(property, value);\n    }\n\n    /**\n     * Removes specified style from the element.\n     *\n     *\t\twriter.removeStyle( 'color', element );  // Removes 'color' style.\n     *\t\twriter.removeStyle( [ 'color', 'border-top' ], element ); // Removes both 'color' and 'border-top' styles.\n     *\n     * @param {Array.<String>|String} property\n     * @param {module:engine/view/element~Element} element\n     */\n  }, {\n    key: \"removeStyle\",\n    value: function removeStyle(property, element) {\n      element._removeStyle(property);\n    }\n\n    /**\n     * Sets a custom property on element. Unlike attributes, custom properties are not rendered to the DOM,\n     * so they can be used to add special data to elements.\n     *\n     * @param {String|Symbol} key\n     * @param {*} value\n     * @param {module:engine/view/element~Element} element\n     */\n  }, {\n    key: \"setCustomProperty\",\n    value: function setCustomProperty(key, value, element) {\n      element._setCustomProperty(key, value);\n    }\n\n    /**\n     * Removes a custom property stored under the given key.\n     *\n     * @param {String|Symbol} key\n     * @param {module:engine/view/element~Element} element\n     * @returns {Boolean} Returns true if property was removed.\n     */\n  }, {\n    key: \"removeCustomProperty\",\n    value: function removeCustomProperty(key, element) {\n      return element._removeCustomProperty(key);\n    }\n\n    /**\n     * Breaks attribute nodes at provided position or at boundaries of provided range. It breaks attribute elements inside\n     * up to a container element.\n     *\n     * In following examples `<p>` is a container, `<b>` and `<u>` are attribute nodes:\n     *\n     *\t\t<p>foo<b><u>bar{}</u></b></p> -> <p>foo<b><u>bar</u></b>[]</p>\n     *\t\t<p>foo<b><u>{}bar</u></b></p> -> <p>foo{}<b><u>bar</u></b></p>\n     *\t\t<p>foo<b><u>b{}ar</u></b></p> -> <p>foo<b><u>b</u></b>[]<b><u>ar</u></b></p>\n     *\t\t<p><b>fo{o</b><u>ba}r</u></p> -> <p><b>fo</b><b>o</b><u>ba</u><u>r</u></b></p>\n     *\n     * **Note:** {@link module:engine/view/documentfragment~DocumentFragment DocumentFragment} is treated like a container.\n     *\n     * **Note:** Difference between {@link module:engine/view/downcastwriter~DowncastWriter#breakAttributes breakAttributes} and\n     * {@link module:engine/view/downcastwriter~DowncastWriter#breakContainer breakContainer} is that `breakAttributes` breaks all\n     * {@link module:engine/view/attributeelement~AttributeElement attribute elements} that are ancestors of given `position`,\n     * up to the first encountered {@link module:engine/view/containerelement~ContainerElement container element}.\n     * `breakContainer` assumes that given `position` is directly in container element and breaks that container element.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container`\n     * when {@link module:engine/view/range~Range#start start}\n     * and {@link module:engine/view/range~Range#end end} positions of a passed range are not placed inside same parent container.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-cannot-break-empty-element`\n     * when trying to break attributes\n     * inside {@link module:engine/view/emptyelement~EmptyElement EmptyElement}.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-cannot-break-ui-element`\n     * when trying to break attributes\n     * inside {@link module:engine/view/uielement~UIElement UIElement}.\n     *\n     * @see module:engine/view/attributeelement~AttributeElement\n     * @see module:engine/view/containerelement~ContainerElement\n     * @see module:engine/view/downcastwriter~DowncastWriter#breakContainer\n     * @param {module:engine/view/position~Position|module:engine/view/range~Range} positionOrRange Position where\n     * to break attribute elements.\n     * @returns {module:engine/view/position~Position|module:engine/view/range~Range} New position or range, after breaking the attribute\n     * elements.\n     */\n  }, {\n    key: \"breakAttributes\",\n    value: function breakAttributes(positionOrRange) {\n      if (positionOrRange instanceof Position) {\n        return this._breakAttributes(positionOrRange);\n      } else {\n        return this._breakAttributesRange(positionOrRange);\n      }\n    }\n\n    /**\n     * Breaks {@link module:engine/view/containerelement~ContainerElement container view element} into two, at the given position. Position\n     * has to be directly inside container element and cannot be in root. Does not break if position is at the beginning\n     * or at the end of it's parent element.\n     *\n     *\t\t<p>foo^bar</p> -> <p>foo</p><p>bar</p>\n     *\t\t<div><p>foo</p>^<p>bar</p></div> -> <div><p>foo</p></div><div><p>bar</p></div>\n     *\t\t<p>^foobar</p> -> ^<p>foobar</p>\n     *\t\t<p>foobar^</p> -> <p>foobar</p>^\n     *\n     * **Note:** Difference between {@link module:engine/view/downcastwriter~DowncastWriter#breakAttributes breakAttributes} and\n     * {@link module:engine/view/downcastwriter~DowncastWriter#breakContainer breakContainer} is that `breakAttributes` breaks all\n     * {@link module:engine/view/attributeelement~AttributeElement attribute elements} that are ancestors of given `position`,\n     * up to the first encountered {@link module:engine/view/containerelement~ContainerElement container element}.\n     * `breakContainer` assumes that given `position` is directly in container element and breaks that container element.\n     *\n     * @see module:engine/view/attributeelement~AttributeElement\n     * @see module:engine/view/containerelement~ContainerElement\n     * @see module:engine/view/downcastwriter~DowncastWriter#breakAttributes\n     * @param {module:engine/view/position~Position} position Position where to break element.\n     * @returns {module:engine/view/position~Position} Position between broken elements. If element has not been broken,\n     * the returned position is placed either before it or after it.\n     */\n  }, {\n    key: \"breakContainer\",\n    value: function breakContainer(position) {\n      var element = position.parent;\n      if (!element.is('containerElement')) {\n        /**\n         * Trying to break an element which is not a container element.\n         *\n         * @error view-writer-break-non-container-element\n         */\n        throw new CKEditorError('view-writer-break-non-container-element: Trying to break an element which is not a container element.', this.document);\n      }\n      if (!element.parent) {\n        /**\n         * Trying to break root element.\n         *\n         * @error view-writer-break-root\n         */\n        throw new CKEditorError('view-writer-break-root: Trying to break root element.', this.document);\n      }\n      if (position.isAtStart) {\n        return Position._createBefore(element);\n      } else if (!position.isAtEnd) {\n        var newElement = element._clone(false);\n        this.insert(Position._createAfter(element), newElement);\n        var sourceRange = new Range(position, Position._createAt(element, 'end'));\n        var targetPosition = new Position(newElement, 0);\n        this.move(sourceRange, targetPosition);\n      }\n      return Position._createAfter(element);\n    }\n\n    /**\n     * Merges {@link module:engine/view/attributeelement~AttributeElement attribute elements}. It also merges text nodes if needed.\n     * Only {@link module:engine/view/attributeelement~AttributeElement#isSimilar similar} attribute elements can be merged.\n     *\n     * In following examples `<p>` is a container and `<b>` is an attribute element:\n     *\n     *\t\t<p>foo[]bar</p> -> <p>foo{}bar</p>\n     *\t\t<p><b>foo</b>[]<b>bar</b></p> -> <p><b>foo{}bar</b></p>\n     *\t\t<p><b foo=\"bar\">a</b>[]<b foo=\"baz\">b</b></p> -> <p><b foo=\"bar\">a</b>[]<b foo=\"baz\">b</b></p>\n     *\n     * It will also take care about empty attributes when merging:\n     *\n     *\t\t<p><b>[]</b></p> -> <p>[]</p>\n     *\t\t<p><b>foo</b><i>[]</i><b>bar</b></p> -> <p><b>foo{}bar</b></p>\n     *\n     * **Note:** Difference between {@link module:engine/view/downcastwriter~DowncastWriter#mergeAttributes mergeAttributes} and\n     * {@link module:engine/view/downcastwriter~DowncastWriter#mergeContainers mergeContainers} is that `mergeAttributes` merges two\n     * {@link module:engine/view/attributeelement~AttributeElement attribute elements} or {@link module:engine/view/text~Text text nodes}\n     * while `mergeContainer` merges two {@link module:engine/view/containerelement~ContainerElement container elements}.\n     *\n     * @see module:engine/view/attributeelement~AttributeElement\n     * @see module:engine/view/containerelement~ContainerElement\n     * @see module:engine/view/downcastwriter~DowncastWriter#mergeContainers\n     * @param {module:engine/view/position~Position} position Merge position.\n     * @returns {module:engine/view/position~Position} Position after merge.\n     */\n  }, {\n    key: \"mergeAttributes\",\n    value: function mergeAttributes(position) {\n      var positionOffset = position.offset;\n      var positionParent = position.parent;\n\n      // When inside text node - nothing to merge.\n      if (positionParent.is('text')) {\n        return position;\n      }\n\n      // When inside empty attribute - remove it.\n      if (positionParent.is('attributeElement') && positionParent.childCount === 0) {\n        var parent = positionParent.parent;\n        var offset = positionParent.index;\n        positionParent._remove();\n        this._removeFromClonedElementsGroup(positionParent);\n        return this.mergeAttributes(new Position(parent, offset));\n      }\n      var nodeBefore = positionParent.getChild(positionOffset - 1);\n      var nodeAfter = positionParent.getChild(positionOffset);\n\n      // Position should be placed between two nodes.\n      if (!nodeBefore || !nodeAfter) {\n        return position;\n      }\n\n      // When position is between two text nodes.\n      if (nodeBefore.is('text') && nodeAfter.is('text')) {\n        return mergeTextNodes(nodeBefore, nodeAfter);\n      }\n      // When position is between two same attribute elements.\n      else if (nodeBefore.is('attributeElement') && nodeAfter.is('attributeElement') && nodeBefore.isSimilar(nodeAfter)) {\n        // Move all children nodes from node placed after selection and remove that node.\n        var count = nodeBefore.childCount;\n        nodeBefore._appendChild(nodeAfter.getChildren());\n        nodeAfter._remove();\n        this._removeFromClonedElementsGroup(nodeAfter);\n\n        // New position is located inside the first node, before new nodes.\n        // Call this method recursively to merge again if needed.\n        return this.mergeAttributes(new Position(nodeBefore, count));\n      }\n      return position;\n    }\n\n    /**\n     * Merges two {@link module:engine/view/containerelement~ContainerElement container elements} that are before and after given position.\n     * Precisely, the element after the position is removed and it's contents are moved to element before the position.\n     *\n     *\t\t<p>foo</p>^<p>bar</p> -> <p>foo^bar</p>\n     *\t\t<div>foo</div>^<p>bar</p> -> <div>foo^bar</div>\n     *\n     * **Note:** Difference between {@link module:engine/view/downcastwriter~DowncastWriter#mergeAttributes mergeAttributes} and\n     * {@link module:engine/view/downcastwriter~DowncastWriter#mergeContainers mergeContainers} is that `mergeAttributes` merges two\n     * {@link module:engine/view/attributeelement~AttributeElement attribute elements} or {@link module:engine/view/text~Text text nodes}\n     * while `mergeContainer` merges two {@link module:engine/view/containerelement~ContainerElement container elements}.\n     *\n     * @see module:engine/view/attributeelement~AttributeElement\n     * @see module:engine/view/containerelement~ContainerElement\n     * @see module:engine/view/downcastwriter~DowncastWriter#mergeAttributes\n     * @param {module:engine/view/position~Position} position Merge position.\n     * @returns {module:engine/view/position~Position} Position after merge.\n     */\n  }, {\n    key: \"mergeContainers\",\n    value: function mergeContainers(position) {\n      var prev = position.nodeBefore;\n      var next = position.nodeAfter;\n      if (!prev || !next || !prev.is('containerElement') || !next.is('containerElement')) {\n        /**\n         * Element before and after given position cannot be merged.\n         *\n         * @error view-writer-merge-containers-invalid-position\n         */\n        throw new CKEditorError('view-writer-merge-containers-invalid-position: ' + 'Element before and after given position cannot be merged.', this.document);\n      }\n      var lastChild = prev.getChild(prev.childCount - 1);\n      var newPosition = lastChild instanceof Text ? Position._createAt(lastChild, 'end') : Position._createAt(prev, 'end');\n      this.move(Range._createIn(next), Position._createAt(prev, 'end'));\n      this.remove(Range._createOn(next));\n      return newPosition;\n    }\n\n    /**\n     * Insert node or nodes at specified position. Takes care about breaking attributes before insertion\n     * and merging them afterwards.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-insert-invalid-node` when nodes to insert\n     * contains instances that are not {@link module:engine/view/text~Text Texts},\n     * {@link module:engine/view/attributeelement~AttributeElement AttributeElements},\n     * {@link module:engine/view/containerelement~ContainerElement ContainerElements},\n     * {@link module:engine/view/emptyelement~EmptyElement EmptyElements} or\n     * {@link module:engine/view/uielement~UIElement UIElements}.\n     *\n     * @param {module:engine/view/position~Position} position Insertion position.\n     * @param {module:engine/view/text~Text|module:engine/view/attributeelement~AttributeElement|\n     * module:engine/view/containerelement~ContainerElement|module:engine/view/emptyelement~EmptyElement|\n     * module:engine/view/uielement~UIElement|Iterable.<module:engine/view/text~Text|\n     * module:engine/view/attributeelement~AttributeElement|module:engine/view/containerelement~ContainerElement|\n     * module:engine/view/emptyelement~EmptyElement|module:engine/view/uielement~UIElement>} nodes Node or nodes to insert.\n     * @returns {module:engine/view/range~Range} Range around inserted nodes.\n     */\n  }, {\n    key: \"insert\",\n    value: function insert(position, nodes) {\n      nodes = isIterable(nodes) ? _toConsumableArray(nodes) : [nodes];\n\n      // Check if nodes to insert are instances of AttributeElements, ContainerElements, EmptyElements, UIElements or Text.\n      validateNodesToInsert(nodes, this.document);\n      var container = getParentContainer(position);\n      if (!container) {\n        /**\n         * Position's parent container cannot be found.\n         *\n         * @error view-writer-invalid-position-container\n         */\n        throw new CKEditorError('view-writer-invalid-position-container', this.document);\n      }\n      var insertionPosition = this._breakAttributes(position, true);\n      var length = container._insertChild(insertionPosition.offset, nodes);\n      var _iterator = _createForOfIteratorHelper(nodes),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var node = _step.value;\n          this._addToClonedElementsGroup(node);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      var endPosition = insertionPosition.getShiftedBy(length);\n      var start = this.mergeAttributes(insertionPosition);\n\n      // When no nodes were inserted - return collapsed range.\n      if (length === 0) {\n        return new Range(start, start);\n      } else {\n        // If start position was merged - move end position.\n        if (!start.isEqual(insertionPosition)) {\n          endPosition.offset--;\n        }\n        var end = this.mergeAttributes(endPosition);\n        return new Range(start, end);\n      }\n    }\n\n    /**\n     * Removes provided range from the container.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container` when\n     * {@link module:engine/view/range~Range#start start} and {@link module:engine/view/range~Range#end end} positions are not placed inside\n     * same parent container.\n     *\n     * @param {module:engine/view/range~Range|module:engine/view/item~Item} rangeOrItem Range to remove from container\n     * or an {@link module:engine/view/item~Item item} to remove. If range is provided, after removing, it will be updated\n     * to a collapsed range showing the new position.\n     * @returns {module:engine/view/documentfragment~DocumentFragment} Document fragment containing removed nodes.\n     */\n  }, {\n    key: \"remove\",\n    value: function remove(rangeOrItem) {\n      var range = rangeOrItem instanceof Range ? rangeOrItem : Range._createOn(rangeOrItem);\n      validateRangeContainer(range, this.document);\n\n      // If range is collapsed - nothing to remove.\n      if (range.isCollapsed) {\n        return new DocumentFragment();\n      }\n\n      // Break attributes at range start and end.\n      var _this$_breakAttribute = this._breakAttributesRange(range, true),\n        breakStart = _this$_breakAttribute.start,\n        breakEnd = _this$_breakAttribute.end;\n      var parentContainer = breakStart.parent;\n      var count = breakEnd.offset - breakStart.offset;\n\n      // Remove nodes in range.\n      var removed = parentContainer._removeChildren(breakStart.offset, count);\n      var _iterator2 = _createForOfIteratorHelper(removed),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var node = _step2.value;\n          this._removeFromClonedElementsGroup(node);\n        }\n\n        // Merge after removing.\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      var mergePosition = this.mergeAttributes(breakStart);\n      range.start = mergePosition;\n      range.end = mergePosition.clone();\n\n      // Return removed nodes.\n      return new DocumentFragment(removed);\n    }\n\n    /**\n     * Removes matching elements from given range.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container` when\n     * {@link module:engine/view/range~Range#start start} and {@link module:engine/view/range~Range#end end} positions are not placed inside\n     * same parent container.\n     *\n     * @param {module:engine/view/range~Range} range Range to clear.\n     * @param {module:engine/view/element~Element} element Element to remove.\n     */\n  }, {\n    key: \"clear\",\n    value: function clear(range, element) {\n      validateRangeContainer(range, this.document);\n\n      // Create walker on given range.\n      // We walk backward because when we remove element during walk it modifies range end position.\n      var walker = range.getWalker({\n        direction: 'backward',\n        ignoreElementEnd: true\n      });\n\n      // Let's walk.\n      var _iterator3 = _createForOfIteratorHelper(walker),\n        _step3;\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var current = _step3.value;\n          var item = current.item;\n          var rangeToRemove = void 0;\n\n          // When current item matches to the given element.\n          if (item.is('element') && element.isSimilar(item)) {\n            // Create range on this element.\n            rangeToRemove = Range._createOn(item);\n            // When range starts inside Text or TextProxy element.\n          } else if (!current.nextPosition.isAfter(range.start) && item.is('textProxy')) {\n            // We need to check if parent of this text matches to given element.\n            var parentElement = item.getAncestors().find(function (ancestor) {\n              return ancestor.is('element') && element.isSimilar(ancestor);\n            });\n\n            // If it is then create range inside this element.\n            if (parentElement) {\n              rangeToRemove = Range._createIn(parentElement);\n            }\n          }\n\n          // If we have found element to remove.\n          if (rangeToRemove) {\n            // We need to check if element range stick out of the given range and truncate if it is.\n            if (rangeToRemove.end.isAfter(range.end)) {\n              rangeToRemove.end = range.end;\n            }\n            if (rangeToRemove.start.isBefore(range.start)) {\n              rangeToRemove.start = range.start;\n            }\n\n            // At the end we remove range with found element.\n            this.remove(rangeToRemove);\n          }\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n    }\n\n    /**\n     * Moves nodes from provided range to target position.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container` when\n     * {@link module:engine/view/range~Range#start start} and {@link module:engine/view/range~Range#end end} positions are not placed inside\n     * same parent container.\n     *\n     * @param {module:engine/view/range~Range} sourceRange Range containing nodes to move.\n     * @param {module:engine/view/position~Position} targetPosition Position to insert.\n     * @returns {module:engine/view/range~Range} Range in target container. Inserted nodes are placed between\n     * {@link module:engine/view/range~Range#start start} and {@link module:engine/view/range~Range#end end} positions.\n     */\n  }, {\n    key: \"move\",\n    value: function move(sourceRange, targetPosition) {\n      var nodes;\n      if (targetPosition.isAfter(sourceRange.end)) {\n        targetPosition = this._breakAttributes(targetPosition, true);\n        var parent = targetPosition.parent;\n        var countBefore = parent.childCount;\n        sourceRange = this._breakAttributesRange(sourceRange, true);\n        nodes = this.remove(sourceRange);\n        targetPosition.offset += parent.childCount - countBefore;\n      } else {\n        nodes = this.remove(sourceRange);\n      }\n      return this.insert(targetPosition, nodes);\n    }\n\n    /**\n     * Wraps elements within range with provided {@link module:engine/view/attributeelement~AttributeElement AttributeElement}.\n     * If a collapsed range is provided, it will be wrapped only if it is equal to view selection.\n     *\n     * If a collapsed range was passed and is same as selection, the selection\n     * will be moved to the inside of the wrapped attribute element.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-invalid-range-container`\n     * when {@link module:engine/view/range~Range#start}\n     * and {@link module:engine/view/range~Range#end} positions are not placed inside same parent container.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-invalid-attribute` when passed attribute element is not\n     * an instance of {@link module:engine/view/attributeelement~AttributeElement AttributeElement}.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-nonselection-collapsed-range` when passed range\n     * is collapsed and different than view selection.\n     *\n     * @param {module:engine/view/range~Range} range Range to wrap.\n     * @param {module:engine/view/attributeelement~AttributeElement} attribute Attribute element to use as wrapper.\n     * @returns {module:engine/view/range~Range} range Range after wrapping, spanning over wrapping attribute element.\n    */\n  }, {\n    key: \"wrap\",\n    value: function wrap(range, attribute) {\n      if (!(attribute instanceof AttributeElement)) {\n        throw new CKEditorError('view-writer-wrap-invalid-attribute', this.document);\n      }\n      validateRangeContainer(range, this.document);\n      if (!range.isCollapsed) {\n        // Non-collapsed range. Wrap it with the attribute element.\n        return this._wrapRange(range, attribute);\n      } else {\n        // Collapsed range. Wrap position.\n        var position = range.start;\n        if (position.parent.is('element') && !_hasNonUiChildren(position.parent)) {\n          position = position.getLastMatchingPosition(function (value) {\n            return value.item.is('uiElement');\n          });\n        }\n        position = this._wrapPosition(position, attribute);\n        var viewSelection = this.document.selection;\n\n        // If wrapping position is equal to view selection, move view selection inside wrapping attribute element.\n        if (viewSelection.isCollapsed && viewSelection.getFirstPosition().isEqual(range.start)) {\n          this.setSelection(position);\n        }\n        return new Range(position);\n      }\n    }\n\n    /**\n     * Unwraps nodes within provided range from attribute element.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container` when\n     * {@link module:engine/view/range~Range#start start} and {@link module:engine/view/range~Range#end end} positions are not placed inside\n     * same parent container.\n     *\n     * @param {module:engine/view/range~Range} range\n     * @param {module:engine/view/attributeelement~AttributeElement} attribute\n     */\n  }, {\n    key: \"unwrap\",\n    value: function unwrap(range, attribute) {\n      if (!(attribute instanceof AttributeElement)) {\n        /**\n         * Attribute element need to be instance of attribute element.\n         *\n         * @error view-writer-unwrap-invalid-attribute\n         */\n        throw new CKEditorError('view-writer-unwrap-invalid-attribute', this.document);\n      }\n      validateRangeContainer(range, this.document);\n\n      // If range is collapsed - nothing to unwrap.\n      if (range.isCollapsed) {\n        return range;\n      }\n\n      // Break attributes at range start and end.\n      var _this$_breakAttribute2 = this._breakAttributesRange(range, true),\n        breakStart = _this$_breakAttribute2.start,\n        breakEnd = _this$_breakAttribute2.end;\n      var parentContainer = breakStart.parent;\n\n      // Unwrap children located between break points.\n      var newRange = this._unwrapChildren(parentContainer, breakStart.offset, breakEnd.offset, attribute);\n\n      // Merge attributes at the both ends and return a new range.\n      var start = this.mergeAttributes(newRange.start);\n\n      // If start position was merged - move end position back.\n      if (!start.isEqual(newRange.start)) {\n        newRange.end.offset--;\n      }\n      var end = this.mergeAttributes(newRange.end);\n      return new Range(start, end);\n    }\n\n    /**\n     * Renames element by creating a copy of renamed element but with changed name and then moving contents of the\n     * old element to the new one. Keep in mind that this will invalidate all {@link module:engine/view/position~Position positions} which\n     * has renamed element as {@link module:engine/view/position~Position#parent a parent}.\n     *\n     * New element has to be created because `Element#tagName` property in DOM is readonly.\n     *\n     * Since this function creates a new element and removes the given one, the new element is returned to keep reference.\n     *\n     * @param {String} newName New name for element.\n     * @param {module:engine/view/containerelement~ContainerElement} viewElement Element to be renamed.\n     */\n  }, {\n    key: \"rename\",\n    value: function rename(newName, viewElement) {\n      var newElement = new ContainerElement(newName, viewElement.getAttributes());\n      this.insert(Position._createAfter(viewElement), newElement);\n      this.move(Range._createIn(viewElement), Position._createAt(newElement, 0));\n      this.remove(Range._createOn(viewElement));\n      return newElement;\n    }\n\n    /**\n     * Cleans up memory by removing obsolete cloned elements group from the writer.\n     *\n     * Should be used whenever all {@link module:engine/view/attributeelement~AttributeElement attribute elements}\n     * with the same {@link module:engine/view/attributeelement~AttributeElement#id id} are going to be removed from the view and\n     * the group will no longer be needed.\n     *\n     * Cloned elements group are not removed automatically in case if the group is still needed after all its elements\n     * were removed from the view.\n     *\n     * Keep in mind that group names are equal to the `id` property of the attribute element.\n     *\n     * @param {String} groupName Name of the group to clear.\n     */\n  }, {\n    key: \"clearClonedElementsGroup\",\n    value: function clearClonedElementsGroup(groupName) {\n      this._cloneGroups.delete(groupName);\n    }\n\n    /**\n     * Creates position at the given location. The location can be specified as:\n     *\n     * * a {@link module:engine/view/position~Position position},\n     * * parent element and offset (offset defaults to `0`),\n     * * parent element and `'end'` (sets position at the end of that element),\n     * * {@link module:engine/view/item~Item view item} and `'before'` or `'after'` (sets position before or after given view item).\n     *\n     * This method is a shortcut to other constructors such as:\n     *\n     * * {@link #createPositionBefore},\n     * * {@link #createPositionAfter},\n     *\n     * @param {module:engine/view/item~Item|module:engine/model/position~Position} itemOrPosition\n     * @param {Number|'end'|'before'|'after'} [offset] Offset or one of the flags. Used only when\n     * first parameter is a {@link module:engine/view/item~Item view item}.\n     */\n  }, {\n    key: \"createPositionAt\",\n    value: function createPositionAt(itemOrPosition, offset) {\n      return Position._createAt(itemOrPosition, offset);\n    }\n\n    /**\n     * Creates a new position after given view item.\n     *\n     * @param {module:engine/view/item~Item} item View item after which the position should be located.\n     * @returns {module:engine/view/position~Position}\n     */\n  }, {\n    key: \"createPositionAfter\",\n    value: function createPositionAfter(item) {\n      return Position._createAfter(item);\n    }\n\n    /**\n     * Creates a new position before given view item.\n     *\n     * @param {module:engine/view/item~Item} item View item before which the position should be located.\n     * @returns {module:engine/view/position~Position}\n     */\n  }, {\n    key: \"createPositionBefore\",\n    value: function createPositionBefore(item) {\n      return Position._createBefore(item);\n    }\n\n    /**\n     * Creates a range spanning from `start` position to `end` position.\n     *\n     * **Note:** This factory method creates it's own {@link module:engine/view/position~Position} instances basing on passed values.\n     *\n     * @param {module:engine/view/position~Position} start Start position.\n     * @param {module:engine/view/position~Position} [end] End position. If not set, range will be collapsed at `start` position.\n     * @returns {module:engine/view/range~Range}\n     */\n  }, {\n    key: \"createRange\",\n    value: function createRange(start, end) {\n      return new Range(start, end);\n    }\n\n    /**\n     * Creates a range that starts before given {@link module:engine/view/item~Item view item} and ends after it.\n     *\n     * @param {module:engine/view/item~Item} item\n     * @returns {module:engine/view/range~Range}\n     */\n  }, {\n    key: \"createRangeOn\",\n    value: function createRangeOn(item) {\n      return Range._createOn(item);\n    }\n\n    /**\n     * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n     * that element and ends after the last child of that element.\n     *\n     * @param {module:engine/view/element~Element} element Element which is a parent for the range.\n     * @returns {module:engine/view/range~Range}\n     */\n  }, {\n    key: \"createRangeIn\",\n    value: function createRangeIn(element) {\n      return Range._createIn(element);\n    }\n\n    /**\n     Creates new {@link module:engine/view/selection~Selection} instance.\n     *\n     * \t\t// Creates empty selection without ranges.\n     *\t\tconst selection = writer.createSelection();\n     *\n     *\t\t// Creates selection at the given range.\n     *\t\tconst range = writer.createRange( start, end );\n     *\t\tconst selection = writer.createSelection( range );\n     *\n     *\t\t// Creates selection at the given ranges\n     * \t\tconst ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ];\n     *\t\tconst selection = writer.createSelection( ranges );\n     *\n     *\t\t// Creates selection from the other selection.\n     *\t\tconst otherSelection = writer.createSelection();\n     *\t\tconst selection = writer.createSelection( otherSelection );\n     *\n     *\t\t// Creates selection from the document selection.\n     *\t\tconst selection = writer.createSelection( editor.editing.view.document.selection );\n     *\n     * \t\t// Creates selection at the given position.\n     *\t\tconst position = writer.createPositionFromPath( root, path );\n     *\t\tconst selection = writer.createSelection( position );\n     *\n     *\t\t// Creates collapsed selection at the position of given item and offset.\n     *\t\tconst paragraph = writer.createContainerElement( 'p' );\n     *\t\tconst selection = writer.createSelection( paragraph, offset );\n     *\n     *\t\t// Creates a range inside an {@link module:engine/view/element~Element element} which starts before the\n     *\t\t// first child of that element and ends after the last child of that element.\n     *\t\tconst selection = writer.createSelection( paragraph, 'in' );\n     *\n     *\t\t// Creates a range on an {@link module:engine/view/item~Item item} which starts before the item and ends\n     *\t\t// just after the item.\n     *\t\tconst selection = writer.createSelection( paragraph, 'on' );\n     *\n     * `Selection`'s constructor allow passing additional options (`backward`, `fake` and `label`) as the last argument.\n     *\n     *\t\t// Creates backward selection.\n     *\t\tconst selection = writer.createSelection( range, { backward: true } );\n     *\n     * Fake selection does not render as browser native selection over selected elements and is hidden to the user.\n     * This way, no native selection UI artifacts are displayed to the user and selection over elements can be\n     * represented in other way, for example by applying proper CSS class.\n     *\n     * Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM\n     * (and be  properly handled by screen readers).\n     *\n     *\t\t// Creates fake selection with label.\n     *\t\tconst selection = writer.createSelection( range, { fake: true, label: 'foo' } );\n     *\n     * @param {module:engine/view/selection~Selectable} [selectable=null]\n     * @param {Number|'before'|'end'|'after'|'on'|'in'} [placeOrOffset] Offset or place when selectable is an `Item`.\n     * @param {Object} [options]\n     * @param {Boolean} [options.backward] Sets this selection instance to be backward.\n     * @param {Boolean} [options.fake] Sets this selection instance to be marked as `fake`.\n     * @param {String} [options.label] Label for the fake selection.\n     * @returns {module:engine/view/selection~Selection}\n     */\n  }, {\n    key: \"createSelection\",\n    value: function createSelection(selectable, placeOrOffset, options) {\n      return new Selection(selectable, placeOrOffset, options);\n    }\n\n    /**\n     * Wraps children with provided `wrapElement`. Only children contained in `parent` element between\n     * `startOffset` and `endOffset` will be wrapped.\n     *\n     * @private\n     * @param {module:engine/view/element~Element} parent\n     * @param {Number} startOffset\n     * @param {Number} endOffset\n     * @param {module:engine/view/element~Element} wrapElement\n     */\n  }, {\n    key: \"_wrapChildren\",\n    value: function _wrapChildren(parent, startOffset, endOffset, wrapElement) {\n      var i = startOffset;\n      var wrapPositions = [];\n      while (i < endOffset) {\n        var child = parent.getChild(i);\n        var isText = child.is('text');\n        var isAttribute = child.is('attributeElement');\n        var isEmpty = child.is('emptyElement');\n        var isUI = child.is('uiElement');\n\n        //\n        // (In all examples, assume that `wrapElement` is `<span class=\"foo\">` element.)\n        //\n        // Check if `wrapElement` can be joined with the wrapped element. One of requirements is having same name.\n        // If possible, join elements.\n        //\n        // <p><span class=\"bar\">abc</span></p>  -->  <p><span class=\"foo bar\">abc</span></p>\n        //\n        if (isAttribute && this._wrapAttributeElement(wrapElement, child)) {\n          wrapPositions.push(new Position(parent, i));\n        }\n        //\n        // Wrap the child if it is not an attribute element or if it is an attribute element that should be inside\n        // `wrapElement` (due to priority).\n        //\n        // <p>abc</p>                   -->  <p><span class=\"foo\">abc</span></p>\n        // <p><strong>abc</strong></p>  -->  <p><span class=\"foo\"><strong>abc</strong></span></p>\n        //\n        else if (isText || isEmpty || isUI || isAttribute && shouldABeOutsideB(wrapElement, child)) {\n          // Clone attribute.\n          var newAttribute = wrapElement._clone();\n\n          // Wrap current node with new attribute.\n          child._remove();\n          newAttribute._appendChild(child);\n          parent._insertChild(i, newAttribute);\n          this._addToClonedElementsGroup(newAttribute);\n          wrapPositions.push(new Position(parent, i));\n        }\n        //\n        // If other nested attribute is found and it wasn't wrapped (see above), continue wrapping inside it.\n        //\n        // <p><a href=\"foo.html\">abc</a></p>  -->  <p><a href=\"foo.html\"><span class=\"foo\">abc</span></a></p>\n        //\n        else if (isAttribute) {\n          this._wrapChildren(child, 0, child.childCount, wrapElement);\n        }\n        i++;\n      }\n\n      // Merge at each wrap.\n      var offsetChange = 0;\n      for (var _i = 0, _wrapPositions = wrapPositions; _i < _wrapPositions.length; _i++) {\n        var position = _wrapPositions[_i];\n        position.offset -= offsetChange;\n\n        // Do not merge with elements outside selected children.\n        if (position.offset == startOffset) {\n          continue;\n        }\n        var newPosition = this.mergeAttributes(position);\n\n        // If nodes were merged - other merge offsets will change.\n        if (!newPosition.isEqual(position)) {\n          offsetChange++;\n          endOffset--;\n        }\n      }\n      return Range._createFromParentsAndOffsets(parent, startOffset, parent, endOffset);\n    }\n\n    /**\n     * Unwraps children from provided `unwrapElement`. Only children contained in `parent` element between\n     * `startOffset` and `endOffset` will be unwrapped.\n     *\n     * @private\n     * @param {module:engine/view/element~Element} parent\n     * @param {Number} startOffset\n     * @param {Number} endOffset\n     * @param {module:engine/view/element~Element} unwrapElement\n     */\n  }, {\n    key: \"_unwrapChildren\",\n    value: function _unwrapChildren(parent, startOffset, endOffset, unwrapElement) {\n      var i = startOffset;\n      var unwrapPositions = [];\n\n      // Iterate over each element between provided offsets inside parent.\n      // We don't use tree walker or range iterator because we will be removing and merging potentially multiple nodes,\n      // so it could get messy. It is safer to it manually in this case.\n      while (i < endOffset) {\n        var child = parent.getChild(i);\n\n        // Skip all text nodes. There should be no container element's here either.\n        if (!child.is('attributeElement')) {\n          i++;\n          continue;\n        }\n\n        //\n        // (In all examples, assume that `unwrapElement` is `<span class=\"foo\">` element.)\n        //\n        // If the child is similar to the given attribute element, unwrap it - it will be completely removed.\n        //\n        // <p><span class=\"foo\">abc</span>xyz</p>  -->  <p>abcxyz</p>\n        //\n        if (child.isSimilar(unwrapElement)) {\n          var unwrapped = child.getChildren();\n          var count = child.childCount;\n\n          // Replace wrapper element with its children\n          child._remove();\n          parent._insertChild(i, unwrapped);\n          this._removeFromClonedElementsGroup(child);\n\n          // Save start and end position of moved items.\n          unwrapPositions.push(new Position(parent, i), new Position(parent, i + count));\n\n          // Skip elements that were unwrapped. Assuming there won't be another element to unwrap in child elements.\n          i += count;\n          endOffset += count - 1;\n          continue;\n        }\n\n        //\n        // If the child is not similar but is an attribute element, try partial unwrapping - remove the same attributes/styles/classes.\n        // Partial unwrapping will happen only if the elements have the same name.\n        //\n        // <p><span class=\"foo bar\">abc</span>xyz</p>  -->  <p><span class=\"bar\">abc</span>xyz</p>\n        // <p><i class=\"foo\">abc</i>xyz</p>            -->  <p><i class=\"foo\">abc</i>xyz</p>\n        //\n        if (this._unwrapAttributeElement(unwrapElement, child)) {\n          unwrapPositions.push(new Position(parent, i), new Position(parent, i + 1));\n          i++;\n          continue;\n        }\n\n        //\n        // If other nested attribute is found, look through it's children for elements to unwrap.\n        //\n        // <p><i><span class=\"foo\">abc</span></i><p>  -->  <p><i>abc</i><p>\n        //\n        this._unwrapChildren(child, 0, child.childCount, unwrapElement);\n        i++;\n      }\n\n      // Merge at each unwrap.\n      var offsetChange = 0;\n      for (var _i2 = 0, _unwrapPositions = unwrapPositions; _i2 < _unwrapPositions.length; _i2++) {\n        var position = _unwrapPositions[_i2];\n        position.offset -= offsetChange;\n\n        // Do not merge with elements outside selected children.\n        if (position.offset == startOffset || position.offset == endOffset) {\n          continue;\n        }\n        var newPosition = this.mergeAttributes(position);\n\n        // If nodes were merged - other merge offsets will change.\n        if (!newPosition.isEqual(position)) {\n          offsetChange++;\n          endOffset--;\n        }\n      }\n      return Range._createFromParentsAndOffsets(parent, startOffset, parent, endOffset);\n    }\n\n    /**\n     * Helper function for `view.writer.wrap`. Wraps range with provided attribute element.\n     * This method will also merge newly added attribute element with its siblings whenever possible.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-invalid-attribute` when passed attribute element is not\n     * an instance of {@link module:engine/view/attributeelement~AttributeElement AttributeElement}.\n     *\n     * @private\n     * @param {module:engine/view/range~Range} range\n     * @param {module:engine/view/attributeelement~AttributeElement} attribute\n     * @returns {module:engine/view/range~Range} New range after wrapping, spanning over wrapping attribute element.\n     */\n  }, {\n    key: \"_wrapRange\",\n    value: function _wrapRange(range, attribute) {\n      // Break attributes at range start and end.\n      var _this$_breakAttribute3 = this._breakAttributesRange(range, true),\n        breakStart = _this$_breakAttribute3.start,\n        breakEnd = _this$_breakAttribute3.end;\n      var parentContainer = breakStart.parent;\n\n      // Wrap all children with attribute.\n      var newRange = this._wrapChildren(parentContainer, breakStart.offset, breakEnd.offset, attribute);\n\n      // Merge attributes at the both ends and return a new range.\n      var start = this.mergeAttributes(newRange.start);\n\n      // If start position was merged - move end position back.\n      if (!start.isEqual(newRange.start)) {\n        newRange.end.offset--;\n      }\n      var end = this.mergeAttributes(newRange.end);\n      return new Range(start, end);\n    }\n\n    /**\n     * Helper function for {@link #wrap}. Wraps position with provided attribute element.\n     * This method will also merge newly added attribute element with its siblings whenever possible.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-invalid-attribute` when passed attribute element is not\n     * an instance of {@link module:engine/view/attributeelement~AttributeElement AttributeElement}.\n     *\n     * @private\n     * @param {module:engine/view/position~Position} position\n     * @param {module:engine/view/attributeelement~AttributeElement} attribute\n     * @returns {module:engine/view/position~Position} New position after wrapping.\n     */\n  }, {\n    key: \"_wrapPosition\",\n    value: function _wrapPosition(position, attribute) {\n      // Return same position when trying to wrap with attribute similar to position parent.\n      if (attribute.isSimilar(position.parent)) {\n        return movePositionToTextNode(position.clone());\n      }\n\n      // When position is inside text node - break it and place new position between two text nodes.\n      if (position.parent.is('text')) {\n        position = breakTextNode(position);\n      }\n\n      // Create fake element that will represent position, and will not be merged with other attributes.\n      var fakePosition = this.createAttributeElement();\n      fakePosition._priority = Number.POSITIVE_INFINITY;\n      fakePosition.isSimilar = function () {\n        return false;\n      };\n\n      // Insert fake element in position location.\n      position.parent._insertChild(position.offset, fakePosition);\n\n      // Range around inserted fake attribute element.\n      var wrapRange = new Range(position, position.getShiftedBy(1));\n\n      // Wrap fake element with attribute (it will also merge if possible).\n      this.wrap(wrapRange, attribute);\n\n      // Remove fake element and place new position there.\n      var newPosition = new Position(fakePosition.parent, fakePosition.index);\n      fakePosition._remove();\n\n      // If position is placed between text nodes - merge them and return position inside.\n      var nodeBefore = newPosition.nodeBefore;\n      var nodeAfter = newPosition.nodeAfter;\n      if (nodeBefore instanceof Text && nodeAfter instanceof Text) {\n        return mergeTextNodes(nodeBefore, nodeAfter);\n      }\n\n      // If position is next to text node - move position inside.\n      return movePositionToTextNode(newPosition);\n    }\n\n    /**\n     * \tWraps one {@link module:engine/view/attributeelement~AttributeElement AttributeElement} into another by\n     * \tmerging them if possible. When merging is possible - all attributes, styles and classes are moved from wrapper\n     * \telement to element being wrapped.\n     *\n     * \t@private\n     * \t@param {module:engine/view/attributeelement~AttributeElement} wrapper Wrapper AttributeElement.\n     * \t@param {module:engine/view/attributeelement~AttributeElement} toWrap AttributeElement to wrap using wrapper element.\n     * \t@returns {Boolean} Returns `true` if elements are merged.\n     */\n  }, {\n    key: \"_wrapAttributeElement\",\n    value: function _wrapAttributeElement(wrapper, toWrap) {\n      if (!canBeJoined(wrapper, toWrap)) {\n        return false;\n      }\n\n      // Can't merge if name or priority differs.\n      if (wrapper.name !== toWrap.name || wrapper.priority !== toWrap.priority) {\n        return false;\n      }\n\n      // Check if attributes can be merged.\n      var _iterator4 = _createForOfIteratorHelper(wrapper.getAttributeKeys()),\n        _step4;\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var key = _step4.value;\n          // Classes and styles should be checked separately.\n          if (key === 'class' || key === 'style') {\n            continue;\n          }\n\n          // If some attributes are different we cannot wrap.\n          if (toWrap.hasAttribute(key) && toWrap.getAttribute(key) !== wrapper.getAttribute(key)) {\n            return false;\n          }\n        }\n\n        // Check if styles can be merged.\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n      var _iterator5 = _createForOfIteratorHelper(wrapper.getStyleNames()),\n        _step5;\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var _key = _step5.value;\n          if (toWrap.hasStyle(_key) && toWrap.getStyle(_key) !== wrapper.getStyle(_key)) {\n            return false;\n          }\n        }\n\n        // Move all attributes/classes/styles from wrapper to wrapped AttributeElement.\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n      var _iterator6 = _createForOfIteratorHelper(wrapper.getAttributeKeys()),\n        _step6;\n      try {\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n          var _key2 = _step6.value;\n          // Classes and styles should be checked separately.\n          if (_key2 === 'class' || _key2 === 'style') {\n            continue;\n          }\n\n          // Move only these attributes that are not present - other are similar.\n          if (!toWrap.hasAttribute(_key2)) {\n            this.setAttribute(_key2, wrapper.getAttribute(_key2), toWrap);\n          }\n        }\n      } catch (err) {\n        _iterator6.e(err);\n      } finally {\n        _iterator6.f();\n      }\n      var _iterator7 = _createForOfIteratorHelper(wrapper.getStyleNames()),\n        _step7;\n      try {\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n          var _key3 = _step7.value;\n          if (!toWrap.hasStyle(_key3)) {\n            this.setStyle(_key3, wrapper.getStyle(_key3), toWrap);\n          }\n        }\n      } catch (err) {\n        _iterator7.e(err);\n      } finally {\n        _iterator7.f();\n      }\n      var _iterator8 = _createForOfIteratorHelper(wrapper.getClassNames()),\n        _step8;\n      try {\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n          var _key4 = _step8.value;\n          if (!toWrap.hasClass(_key4)) {\n            this.addClass(_key4, toWrap);\n          }\n        }\n      } catch (err) {\n        _iterator8.e(err);\n      } finally {\n        _iterator8.f();\n      }\n      return true;\n    }\n\n    /**\n     * Unwraps {@link module:engine/view/attributeelement~AttributeElement AttributeElement} from another by removing\n     * corresponding attributes, classes and styles. All attributes, classes and styles from wrapper should be present\n     * inside element being unwrapped.\n     *\n     * @private\n     * @param {module:engine/view/attributeelement~AttributeElement} wrapper Wrapper AttributeElement.\n     * @param {module:engine/view/attributeelement~AttributeElement} toUnwrap AttributeElement to unwrap using wrapper element.\n     * @returns {Boolean} Returns `true` if elements are unwrapped.\n     **/\n  }, {\n    key: \"_unwrapAttributeElement\",\n    value: function _unwrapAttributeElement(wrapper, toUnwrap) {\n      if (!canBeJoined(wrapper, toUnwrap)) {\n        return false;\n      }\n\n      // Can't unwrap if name or priority differs.\n      if (wrapper.name !== toUnwrap.name || wrapper.priority !== toUnwrap.priority) {\n        return false;\n      }\n\n      // Check if AttributeElement has all wrapper attributes.\n      var _iterator9 = _createForOfIteratorHelper(wrapper.getAttributeKeys()),\n        _step9;\n      try {\n        for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n          var key = _step9.value;\n          // Classes and styles should be checked separately.\n          if (key === 'class' || key === 'style') {\n            continue;\n          }\n\n          // If some attributes are missing or different we cannot unwrap.\n          if (!toUnwrap.hasAttribute(key) || toUnwrap.getAttribute(key) !== wrapper.getAttribute(key)) {\n            return false;\n          }\n        }\n\n        // Check if AttributeElement has all wrapper classes.\n      } catch (err) {\n        _iterator9.e(err);\n      } finally {\n        _iterator9.f();\n      }\n      if (!toUnwrap.hasClass.apply(toUnwrap, _toConsumableArray(wrapper.getClassNames()))) {\n        return false;\n      }\n\n      // Check if AttributeElement has all wrapper styles.\n      var _iterator0 = _createForOfIteratorHelper(wrapper.getStyleNames()),\n        _step0;\n      try {\n        for (_iterator0.s(); !(_step0 = _iterator0.n()).done;) {\n          var _key5 = _step0.value;\n          // If some styles are missing or different we cannot unwrap.\n          if (!toUnwrap.hasStyle(_key5) || toUnwrap.getStyle(_key5) !== wrapper.getStyle(_key5)) {\n            return false;\n          }\n        }\n\n        // Remove all wrapper's attributes from unwrapped element.\n      } catch (err) {\n        _iterator0.e(err);\n      } finally {\n        _iterator0.f();\n      }\n      var _iterator1 = _createForOfIteratorHelper(wrapper.getAttributeKeys()),\n        _step1;\n      try {\n        for (_iterator1.s(); !(_step1 = _iterator1.n()).done;) {\n          var _key6 = _step1.value;\n          // Classes and styles should be checked separately.\n          if (_key6 === 'class' || _key6 === 'style') {\n            continue;\n          }\n          this.removeAttribute(_key6, toUnwrap);\n        }\n\n        // Remove all wrapper's classes from unwrapped element.\n      } catch (err) {\n        _iterator1.e(err);\n      } finally {\n        _iterator1.f();\n      }\n      this.removeClass(Array.from(wrapper.getClassNames()), toUnwrap);\n\n      // Remove all wrapper's styles from unwrapped element.\n      this.removeStyle(Array.from(wrapper.getStyleNames()), toUnwrap);\n      return true;\n    }\n\n    /**\n     * Helper function used by other `DowncastWriter` methods. Breaks attribute elements at the boundaries of given range.\n     *\n     * @private\n     * @param {module:engine/view/range~Range} range Range which `start` and `end` positions will be used to break attributes.\n     * @param {Boolean} [forceSplitText=false] If set to `true`, will break text nodes even if they are directly in container element.\n     * This behavior will result in incorrect view state, but is needed by other view writing methods which then fixes view state.\n     * @returns {module:engine/view/range~Range} New range with located at break positions.\n     */\n  }, {\n    key: \"_breakAttributesRange\",\n    value: function _breakAttributesRange(range) {\n      var forceSplitText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var rangeStart = range.start;\n      var rangeEnd = range.end;\n      validateRangeContainer(range, this.document);\n\n      // Break at the collapsed position. Return new collapsed range.\n      if (range.isCollapsed) {\n        var position = this._breakAttributes(range.start, forceSplitText);\n        return new Range(position, position);\n      }\n      var breakEnd = this._breakAttributes(rangeEnd, forceSplitText);\n      var count = breakEnd.parent.childCount;\n      var breakStart = this._breakAttributes(rangeStart, forceSplitText);\n\n      // Calculate new break end offset.\n      breakEnd.offset += breakEnd.parent.childCount - count;\n      return new Range(breakStart, breakEnd);\n    }\n\n    /**\n     * Helper function used by other `DowncastWriter` methods. Breaks attribute elements at given position.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-cannot-break-empty-element` when break position\n     * is placed inside {@link module:engine/view/emptyelement~EmptyElement EmptyElement}.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-cannot-break-ui-element` when break position\n     * is placed inside {@link module:engine/view/uielement~UIElement UIElement}.\n     *\n     * @private\n     * @param {module:engine/view/position~Position} position Position where to break attributes.\n     * @param {Boolean} [forceSplitText=false] If set to `true`, will break text nodes even if they are directly in container element.\n     * This behavior will result in incorrect view state, but is needed by other view writing methods which then fixes view state.\n     * @returns {module:engine/view/position~Position} New position after breaking the attributes.\n     */\n  }, {\n    key: \"_breakAttributes\",\n    value: function _breakAttributes(position) {\n      var forceSplitText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var positionOffset = position.offset;\n      var positionParent = position.parent;\n\n      // If position is placed inside EmptyElement - throw an exception as we cannot break inside.\n      if (position.parent.is('emptyElement')) {\n        /**\n         * Cannot break inside EmptyElement instance.\n         *\n         * @error view-writer-cannot-break-empty-element\n         */\n        throw new CKEditorError('view-writer-cannot-break-empty-element', this.document);\n      }\n\n      // If position is placed inside UIElement - throw an exception as we cannot break inside.\n      if (position.parent.is('uiElement')) {\n        /**\n         * Cannot break inside UIElement instance.\n         *\n         * @error view-writer-cannot-break-ui-element\n         */\n        throw new CKEditorError('view-writer-cannot-break-ui-element', this.document);\n      }\n\n      // There are no attributes to break and text nodes breaking is not forced.\n      if (!forceSplitText && positionParent.is('text') && isContainerOrFragment(positionParent.parent)) {\n        return position.clone();\n      }\n\n      // Position's parent is container, so no attributes to break.\n      if (isContainerOrFragment(positionParent)) {\n        return position.clone();\n      }\n\n      // Break text and start again in new position.\n      if (positionParent.is('text')) {\n        return this._breakAttributes(breakTextNode(position), forceSplitText);\n      }\n      var length = positionParent.childCount;\n\n      // <p>foo<b><u>bar{}</u></b></p>\n      // <p>foo<b><u>bar</u>[]</b></p>\n      // <p>foo<b><u>bar</u></b>[]</p>\n      if (positionOffset == length) {\n        var newPosition = new Position(positionParent.parent, positionParent.index + 1);\n        return this._breakAttributes(newPosition, forceSplitText);\n      } else {\n        // <p>foo<b><u>{}bar</u></b></p>\n        // <p>foo<b>[]<u>bar</u></b></p>\n        // <p>foo{}<b><u>bar</u></b></p>\n        if (positionOffset === 0) {\n          var _newPosition = new Position(positionParent.parent, positionParent.index);\n          return this._breakAttributes(_newPosition, forceSplitText);\n        }\n        // <p>foo<b><u>b{}ar</u></b></p>\n        // <p>foo<b><u>b[]ar</u></b></p>\n        // <p>foo<b><u>b</u>[]<u>ar</u></b></p>\n        // <p>foo<b><u>b</u></b>[]<b><u>ar</u></b></p>\n        else {\n          var offsetAfter = positionParent.index + 1;\n\n          // Break element.\n          var clonedNode = positionParent._clone();\n\n          // Insert cloned node to position's parent node.\n          positionParent.parent._insertChild(offsetAfter, clonedNode);\n          this._addToClonedElementsGroup(clonedNode);\n\n          // Get nodes to move.\n          var count = positionParent.childCount - positionOffset;\n          var nodesToMove = positionParent._removeChildren(positionOffset, count);\n\n          // Move nodes to cloned node.\n          clonedNode._appendChild(nodesToMove);\n\n          // Create new position to work on.\n          var _newPosition2 = new Position(positionParent.parent, offsetAfter);\n          return this._breakAttributes(_newPosition2, forceSplitText);\n        }\n      }\n    }\n\n    /**\n     * Stores the information that an {@link module:engine/view/attributeelement~AttributeElement attribute element} was\n     * added to the tree. Saves the reference to the group in the given element and updates the group, so other elements\n     * from the group now keep a reference to the given attribute element.\n     *\n     * The clones group can be obtained using {@link module:engine/view/attributeelement~AttributeElement#getElementsWithSameId}.\n     *\n     * Does nothing if added element has no {@link module:engine/view/attributeelement~AttributeElement#id id}.\n     *\n     * @private\n     * @param {module:engine/view/attributeelement~AttributeElement} element Attribute element to save.\n     */\n  }, {\n    key: \"_addToClonedElementsGroup\",\n    value: function _addToClonedElementsGroup(element) {\n      // Add only if the element is in document tree.\n      if (!element.root.is('rootElement')) {\n        return;\n      }\n\n      // Traverse the element's children recursively to find other attribute elements that also might got inserted.\n      // The loop is at the beginning so we can make fast returns later in the code.\n      if (element.is('element')) {\n        var _iterator10 = _createForOfIteratorHelper(element.getChildren()),\n          _step10;\n        try {\n          for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n            var child = _step10.value;\n            this._addToClonedElementsGroup(child);\n          }\n        } catch (err) {\n          _iterator10.e(err);\n        } finally {\n          _iterator10.f();\n        }\n      }\n      var id = element.id;\n      if (!id) {\n        return;\n      }\n      var group = this._cloneGroups.get(id);\n      if (!group) {\n        group = new Set();\n        this._cloneGroups.set(id, group);\n      }\n      group.add(element);\n      element._clonesGroup = group;\n    }\n\n    /**\n     * Removes all the information about the given {@link module:engine/view/attributeelement~AttributeElement attribute element}\n     * from its clones group.\n     *\n     * Keep in mind, that the element will still keep a reference to the group (but the group will not keep a reference to it).\n     * This allows to reference the whole group even if the element was already removed from the tree.\n     *\n     * Does nothing if the element has no {@link module:engine/view/attributeelement~AttributeElement#id id}.\n     *\n     * @private\n     * @param {module:engine/view/attributeelement~AttributeElement} element Attribute element to remove.\n     */\n  }, {\n    key: \"_removeFromClonedElementsGroup\",\n    value: function _removeFromClonedElementsGroup(element) {\n      // Traverse the element's children recursively to find other attribute elements that also got removed.\n      // The loop is at the beginning so we can make fast returns later in the code.\n      if (element.is('element')) {\n        var _iterator11 = _createForOfIteratorHelper(element.getChildren()),\n          _step11;\n        try {\n          for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n            var child = _step11.value;\n            this._removeFromClonedElementsGroup(child);\n          }\n        } catch (err) {\n          _iterator11.e(err);\n        } finally {\n          _iterator11.f();\n        }\n      }\n      var id = element.id;\n      if (!id) {\n        return;\n      }\n      var group = this._cloneGroups.get(id);\n      if (!group) {\n        return;\n      }\n      group.delete(element);\n      // Not removing group from element on purpose!\n      // If other parts of code have reference to this element, they will be able to get references to other elements from the group.\n    }\n  }]);\n}(); // Helper function for `view.writer.wrap`. Checks if given element has any children that are not ui elements.\nexport { DowncastWriter as default };\nfunction _hasNonUiChildren(parent) {\n  return Array.from(parent.getChildren()).some(function (child) {\n    return !child.is('uiElement');\n  });\n}\n\n/**\n * Attribute element need to be instance of attribute element.\n *\n * @error view-writer-wrap-invalid-attribute\n */\n\n// Returns first parent container of specified {@link module:engine/view/position~Position Position}.\n// Position's parent node is checked as first, then next parents are checked.\n// Note that {@link module:engine/view/documentfragment~DocumentFragment DocumentFragment} is treated like a container.\n//\n// @param {module:engine/view/position~Position} position Position used as a start point to locate parent container.\n// @returns {module:engine/view/containerelement~ContainerElement|module:engine/view/documentfragment~DocumentFragment|undefined}\n// Parent container element or `undefined` if container is not found.\nfunction getParentContainer(position) {\n  var parent = position.parent;\n  while (!isContainerOrFragment(parent)) {\n    if (!parent) {\n      return undefined;\n    }\n    parent = parent.parent;\n  }\n  return parent;\n}\n\n// Checks if first {@link module:engine/view/attributeelement~AttributeElement AttributeElement} provided to the function\n// can be wrapped otuside second element. It is done by comparing elements'\n// {@link module:engine/view/attributeelement~AttributeElement#priority priorities}, if both have same priority\n// {@link module:engine/view/element~Element#getIdentity identities} are compared.\n//\n// @param {module:engine/view/attributeelement~AttributeElement} a\n// @param {module:engine/view/attributeelement~AttributeElement} b\n// @returns {Boolean}\nfunction shouldABeOutsideB(a, b) {\n  if (a.priority < b.priority) {\n    return true;\n  } else if (a.priority > b.priority) {\n    return false;\n  }\n\n  // When priorities are equal and names are different - use identities.\n  return a.getIdentity() < b.getIdentity();\n}\n\n// Returns new position that is moved to near text node. Returns same position if there is no text node before of after\n// specified position.\n//\n//\t\t<p>foo[]</p>  ->  <p>foo{}</p>\n//\t\t<p>[]foo</p>  ->  <p>{}foo</p>\n//\n// @param {module:engine/view/position~Position} position\n// @returns {module:engine/view/position~Position} Position located inside text node or same position if there is no text nodes\n// before or after position location.\nfunction movePositionToTextNode(position) {\n  var nodeBefore = position.nodeBefore;\n  if (nodeBefore && nodeBefore.is('text')) {\n    return new Position(nodeBefore, nodeBefore.data.length);\n  }\n  var nodeAfter = position.nodeAfter;\n  if (nodeAfter && nodeAfter.is('text')) {\n    return new Position(nodeAfter, 0);\n  }\n  return position;\n}\n\n// Breaks text node into two text nodes when possible.\n//\n//\t\t<p>foo{}bar</p> -> <p>foo[]bar</p>\n//\t\t<p>{}foobar</p> -> <p>[]foobar</p>\n//\t\t<p>foobar{}</p> -> <p>foobar[]</p>\n//\n// @param {module:engine/view/position~Position} position Position that need to be placed inside text node.\n// @returns {module:engine/view/position~Position} New position after breaking text node.\nfunction breakTextNode(position) {\n  if (position.offset == position.parent.data.length) {\n    return new Position(position.parent.parent, position.parent.index + 1);\n  }\n  if (position.offset === 0) {\n    return new Position(position.parent.parent, position.parent.index);\n  }\n\n  // Get part of the text that need to be moved.\n  var textToMove = position.parent.data.slice(position.offset);\n\n  // Leave rest of the text in position's parent.\n  position.parent._data = position.parent.data.slice(0, position.offset);\n\n  // Insert new text node after position's parent text node.\n  position.parent.parent._insertChild(position.parent.index + 1, new Text(textToMove));\n\n  // Return new position between two newly created text nodes.\n  return new Position(position.parent.parent, position.parent.index + 1);\n}\n\n// Merges two text nodes into first node. Removes second node and returns merge position.\n//\n// @param {module:engine/view/text~Text} t1 First text node to merge. Data from second text node will be moved at the end of\n// this text node.\n// @param {module:engine/view/text~Text} t2 Second text node to merge. This node will be removed after merging.\n// @returns {module:engine/view/position~Position} Position after merging text nodes.\nfunction mergeTextNodes(t1, t2) {\n  // Merge text data into first text node and remove second one.\n  var nodeBeforeLength = t1.data.length;\n  t1._data += t2.data;\n  t2._remove();\n  return new Position(t1, nodeBeforeLength);\n}\n\n// Checks if provided nodes are valid to insert. Checks if each node is an instance of\n// {@link module:engine/view/text~Text Text} or {@link module:engine/view/attributeelement~AttributeElement AttributeElement},\n// {@link module:engine/view/containerelement~ContainerElement ContainerElement},\n// {@link module:engine/view/emptyelement~EmptyElement EmptyElement} or\n// {@link module:engine/view/uielement~UIElement UIElement}.\n//\n// Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-insert-invalid-node` when nodes to insert\n// contains instances that are not {@link module:engine/view/text~Text Texts},\n// {@link module:engine/view/emptyelement~EmptyElement EmptyElements},\n// {@link module:engine/view/uielement~UIElement UIElements},\n// {@link module:engine/view/attributeelement~AttributeElement AttributeElements} or\n// {@link module:engine/view/containerelement~ContainerElement ContainerElements}.\n//\n// @param Iterable.<module:engine/view/text~Text|module:engine/view/attributeelement~AttributeElement\n// |module:engine/view/containerelement~ContainerElement> nodes\n// @param {Object} errorContext\nfunction validateNodesToInsert(nodes, errorContext) {\n  var _iterator12 = _createForOfIteratorHelper(nodes),\n    _step12;\n  try {\n    var _loop = function _loop() {\n      var node = _step12.value;\n      if (!validNodesToInsert.some(function (validNode) {\n        return node instanceof validNode;\n      })) {\n        // eslint-disable-line no-use-before-define\n        /**\n         * Inserted nodes should be valid to insert. of {@link module:engine/view/attributeelement~AttributeElement AttributeElement},\n         * {@link module:engine/view/containerelement~ContainerElement ContainerElement},\n         * {@link module:engine/view/emptyelement~EmptyElement EmptyElement},\n         * {@link module:engine/view/uielement~UIElement UIElement}, {@link module:engine/view/text~Text Text}.\n         *\n         * @error view-writer-insert-invalid-node\n         */\n        throw new CKEditorError('view-writer-insert-invalid-node', errorContext);\n      }\n      if (!node.is('text')) {\n        validateNodesToInsert(node.getChildren(), errorContext);\n      }\n    };\n    for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n      _loop();\n    }\n  } catch (err) {\n    _iterator12.e(err);\n  } finally {\n    _iterator12.f();\n  }\n}\nvar validNodesToInsert = [Text, AttributeElement, ContainerElement, EmptyElement, UIElement];\n\n// Checks if node is ContainerElement or DocumentFragment, because in most cases they should be treated the same way.\n//\n// @param {module:engine/view/node~Node} node\n// @returns {Boolean} Returns `true` if node is instance of ContainerElement or DocumentFragment.\nfunction isContainerOrFragment(node) {\n  return node && (node.is('containerElement') || node.is('documentFragment'));\n}\n\n// Checks if {@link module:engine/view/range~Range#start range start} and {@link module:engine/view/range~Range#end range end} are placed\n// inside same {@link module:engine/view/containerelement~ContainerElement container element}.\n// Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container` when validation fails.\n//\n// @param {module:engine/view/range~Range} range\n// @param {Object} errorContext\nfunction validateRangeContainer(range, errorContext) {\n  var startContainer = getParentContainer(range.start);\n  var endContainer = getParentContainer(range.end);\n  if (!startContainer || !endContainer || startContainer !== endContainer) {\n    /**\n     * Range container is invalid. This can happen if {@link module:engine/view/range~Range#start range start} and\n     * {@link module:engine/view/range~Range#end range end} positions are not placed inside same container or\n     * parent container for these positions cannot be found.\n     *\n     * @error view-writer-invalid-range-container\n     */\n\n    throw new CKEditorError('view-writer-invalid-range-container', errorContext);\n  }\n}\n\n// Checks if two attribute elements can be joined together. Elements can be joined together if, and only if\n// they do not have ids specified.\n//\n// @private\n// @param {module:engine/view/element~Element} a\n// @param {module:engine/view/element~Element} b\n// @returns {Boolean}\nfunction canBeJoined(a, b) {\n  return a.id === null && b.id === null;\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/editableelement\n */\n\nimport ContainerElement from './containerelement';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';\nvar documentSymbol = Symbol('document');\n\n/**\n * Editable element which can be a {@link module:engine/view/rooteditableelement~RootEditableElement root}\n * or nested editable area in the editor.\n *\n * Editable is automatically read-only when its {@link module:engine/view/document~Document Document} is read-only.\n *\n * The constructor of this class shouldn't be used directly. To create new `EditableElement` use the\n * {@link module:engine/view/downcastwriter~DowncastWriter#createEditableElement `downcastWriter#createEditableElement()`} method.\n *\n * @extends module:engine/view/containerelement~ContainerElement\n * @mixes module:utils/observablemixin~ObservableMixin\n */\nvar EditableElement = /*#__PURE__*/function (_ContainerElement) {\n  /**\n   * Creates an editable element.\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#createEditableElement\n   * @protected\n   */\n  function EditableElement(name, attrs, children) {\n    var _this;\n    _classCallCheck(this, EditableElement);\n    _this = _callSuper(this, EditableElement, [name, attrs, children]);\n\n    /**\n     * Whether the editable is in read-write or read-only mode.\n     *\n     * @observable\n     * @member {Boolean} module:engine/view/editableelement~EditableElement#isReadOnly\n     */\n    _this.set('isReadOnly', false);\n\n    /**\n     * Whether the editable is focused.\n     *\n     * This property updates when {@link module:engine/view/document~Document#isFocused document.isFocused} or view\n     * selection is changed.\n     *\n     * @readonly\n     * @observable\n     * @member {Boolean} module:engine/view/editableelement~EditableElement#isFocused\n     */\n    _this.set('isFocused', false);\n\n    /**\n     * The {@link module:engine/view/document~Document} which is an owner of this root.\n     * Can only by set once.\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-editableelement-document-already-set`\n     * when document is already set.\n     *\n     * @member {module:engine/view/document~Document} #document\n     */\n    return _this;\n  }\n\n  /**\n   * Checks whether this object is of the given.\n   *\n   *\t\teditableElement.is( 'editableElement' ); // -> true\n   *\t\teditableElement.is( 'element' ); // -> true\n   *\t\teditableElement.is( 'node' ); // -> true\n   *\t\teditableElement.is( 'view:editableElement' ); // -> true\n   *\t\teditableElement.is( 'view:element' ); // -> true\n   *\t\teditableElement.is( 'view:node' ); // -> true\n   *\n   *\t\teditableElement.is( 'model:element' ); // -> false\n   *\t\teditableElement.is( 'documentFragment' ); // -> false\n   *\n   * Assuming that the object being checked is an editbale element, you can also check its\n   * {@link module:engine/view/editableelement~EditableElement#name name}:\n   *\n   *\t\teditableElement.is( 'div' ); // -> true if this is a div element\n   *\t\teditableElement.is( 'editableElement', 'div' ); // -> same as above\n   *\t\ttext.is( 'div' ); -> false\n   *\n   * {@link module:engine/view/node~Node#is Check the entire list of view objects} which implement the `is()` method.\n   *\n   * @param {String} type Type to check when `name` parameter is present.\n   * Otherwise, it acts like the `name` parameter.\n   * @param {String} [name] Element name.\n   * @returns {Boolean}\n   */\n  _inherits(EditableElement, _ContainerElement);\n  return _createClass(EditableElement, [{\n    key: \"is\",\n    value: function is(type) {\n      var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var cutType = type && type.replace(/^view:/, '');\n      if (!name) {\n        return cutType == 'editableElement' || _superPropGet(EditableElement, \"is\", this, 3)([type]);\n      } else {\n        return cutType == 'editableElement' && name == this.name || _superPropGet(EditableElement, \"is\", this, 3)([type, name]);\n      }\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.stopListening();\n    }\n\n    /**\n     * Returns document associated with the editable.\n     *\n     * @readonly\n     * @returns {module:engine/view/document~Document}\n     */\n  }, {\n    key: \"document\",\n    get: function get() {\n      return this.getCustomProperty(documentSymbol);\n    }\n\n    /**\n     * Sets document of this editable element.\n     *\n     * @protected\n     * @param {module:engine/view/document~Document} document\n     */\n  }, {\n    key: \"_document\",\n    set: function set(document) {\n      var _this2 = this;\n      if (this.getCustomProperty(documentSymbol)) {\n        /**\n         * View document is already set. It can only be set once.\n         *\n         * @error view-editableelement-document-already-set\n         */\n        throw new CKEditorError('view-editableelement-document-already-set: View document is already set.', this);\n      }\n      this._setCustomProperty(documentSymbol, document);\n      this.bind('isReadOnly').to(document);\n      this.bind('isFocused').to(document, 'isFocused', function (isFocused) {\n        return isFocused && document.selection.editableElement == _this2;\n      });\n\n      // Update focus state based on selection changes.\n      this.listenTo(document.selection, 'change', function () {\n        _this2.isFocused = document.isFocused && document.selection.editableElement == _this2;\n      });\n    }\n  }]);\n}(ContainerElement);\nexport { EditableElement as default };\nmix(EditableElement, ObservableMixin);","import _construct from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/construct.js\";\nimport _slicedToArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _toConsumableArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\";\nimport _regeneratorValues from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regeneratorValues.js\";\nimport _regenerator from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regenerator.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.match.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport \"core-js/modules/es.string.trim.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/element\n */\n\nimport Node from './node';\nimport Text from './text';\nimport TextProxy from './textproxy';\nimport objectToMap from '@ckeditor/ckeditor5-utils/src/objecttomap';\nimport isIterable from '@ckeditor/ckeditor5-utils/src/isiterable';\nimport Matcher from './matcher';\nimport { isPlainObject } from 'lodash-es';\n\n/**\n * View element.\n *\n * The editing engine does not define a fixed semantics of its elements (it is \"DTD-free\").\n * This is why the type of the {@link module:engine/view/element~Element} need to\n * be defined by the feature developer. When creating an element you should use one of the following methods:\n *\n * * {@link module:engine/view/downcastwriter~DowncastWriter#createContainerElement `downcastWriter#createContainerElement()`}\n * in order to create a {@link module:engine/view/containerelement~ContainerElement},\n * * {@link module:engine/view/downcastwriter~DowncastWriter#createAttributeElement `downcastWriter#createAttributeElement()`}\n * in order to create a {@link module:engine/view/attributeelement~AttributeElement},\n * * {@link module:engine/view/downcastwriter~DowncastWriter#createEmptyElement `downcastWriter#createEmptyElement()`}\n * in order to create a {@link module:engine/view/emptyelement~EmptyElement}.\n * * {@link module:engine/view/downcastwriter~DowncastWriter#createUIElement `downcastWriter#createUIElement()`}\n * in order to create a {@link module:engine/view/uielement~UIElement}.\n * * {@link module:engine/view/downcastwriter~DowncastWriter#createEditableElement `downcastWriter#createEditableElement()`}\n * in order to create a {@link module:engine/view/editableelement~EditableElement}.\n *\n * Note that for view elements which are not created from the model, like elements from mutations, paste or\n * {@link module:engine/controller/datacontroller~DataController#set data.set} it is not possible to define the type of the element.\n * In such cases the {@link module:engine/view/upcastwriter~UpcastWriter#createElement `UpcastWriter#createElement()`} method\n * should be used to create generic view elements.\n *\n * @extends module:engine/view/node~Node\n */\nvar Element = /*#__PURE__*/function (_Node) {\n  /**\n   * Creates a view element.\n   *\n   * Attributes can be passed in various formats:\n   *\n   *\t\tnew Element( 'div', { class: 'editor', contentEditable: 'true' } ); // object\n   *\t\tnew Element( 'div', [ [ 'class', 'editor' ], [ 'contentEditable', 'true' ] ] ); // map-like iterator\n   *\t\tnew Element( 'div', mapOfAttributes ); // map\n   *\n   * @protected\n   * @param {String} name Node name.\n   * @param {Object|Iterable} [attrs] Collection of attributes.\n   * @param {module:engine/view/node~Node|Iterable.<module:engine/view/node~Node>} [children]\n   * A list of nodes to be inserted into created element.\n   */\n  function Element(name, attrs, children) {\n    var _this;\n    _classCallCheck(this, Element);\n    _this = _callSuper(this, Element);\n\n    /**\n     * Name of the element.\n     *\n     * @readonly\n     * @member {String}\n     */\n    _this.name = name;\n\n    /**\n     * Map of attributes, where attributes names are keys and attributes values are values.\n     *\n     * @protected\n     * @member {Map} #_attrs\n     */\n    _this._attrs = parseAttributes(attrs);\n\n    /**\n     * Array of child nodes.\n     *\n     * @protected\n     * @member {Array.<module:engine/view/node~Node>}\n     */\n    _this._children = [];\n    if (children) {\n      _this._insertChild(0, children);\n    }\n\n    /**\n     * Set of classes associated with element instance.\n     *\n     * @protected\n     * @member {Set}\n     */\n    _this._classes = new Set();\n    if (_this._attrs.has('class')) {\n      // Remove class attribute and handle it by class set.\n      var classString = _this._attrs.get('class');\n      parseClasses(_this._classes, classString);\n      _this._attrs.delete('class');\n    }\n\n    /**\n     * Map of styles.\n     *\n     * @protected\n     * @member {Map} module:engine/view/element~Element#_styles\n     */\n    _this._styles = new Map();\n    if (_this._attrs.has('style')) {\n      // Remove style attribute and handle it by styles map.\n      parseInlineStyles(_this._styles, _this._attrs.get('style'));\n      _this._attrs.delete('style');\n    }\n\n    /**\n     * Map of custom properties.\n     * Custom properties can be added to element instance, will be cloned but not rendered into DOM.\n     *\n     * @protected\n     * @member {Map}\n     */\n    _this._customProperties = new Map();\n    return _this;\n  }\n\n  /**\n   * Number of element's children.\n   *\n   * @readonly\n   * @type {Number}\n   */\n  _inherits(Element, _Node);\n  return _createClass(Element, [{\n    key: \"childCount\",\n    get: function get() {\n      return this._children.length;\n    }\n\n    /**\n     * Is `true` if there are no nodes inside this element, `false` otherwise.\n     *\n     * @readonly\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isEmpty\",\n    get: function get() {\n      return this._children.length === 0;\n    }\n\n    /**\n     * Checks whether this object is of the given.\n     *\n     *\t\telement.is( 'element' ); // -> true\n     *\t\telement.is( 'node' ); // -> true\n     *\t\telement.is( 'view:element' ); // -> true\n     *\t\telement.is( 'view:node' ); // -> true\n     *\n     *\t\telement.is( 'model:element' ); // -> false\n     *\t\telement.is( 'documentSelection' ); // -> false\n     *\n     * Assuming that the object being checked is an element, you can also check its\n     * {@link module:engine/view/element~Element#name name}:\n     *\n     *\t\telement.is( 'img' ); // -> true if this is an <img> element\n     *\t\telement.is( 'element', 'img' ); // -> same as above\n     *\t\ttext.is( 'img' ); -> false\n     *\n     * {@link module:engine/view/node~Node#is Check the entire list of view objects} which implement the `is()` method.\n     *\n     * @param {String} type Type to check when `name` parameter is present.\n     * Otherwise, it acts like the `name` parameter.\n     * @param {String} [name] Element name.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var cutType = type.replace(/^view:/, '');\n      if (!name) {\n        return cutType == 'element' || cutType == this.name || _superPropGet(Element, \"is\", this, 3)([type]);\n      } else {\n        return cutType == 'element' && name == this.name;\n      }\n    }\n\n    /**\n     * Gets child at the given index.\n     *\n     * @param {Number} index Index of child.\n     * @returns {module:engine/view/node~Node} Child node.\n     */\n  }, {\n    key: \"getChild\",\n    value: function getChild(index) {\n      return this._children[index];\n    }\n\n    /**\n     * Gets index of the given child node. Returns `-1` if child node is not found.\n     *\n     * @param {module:engine/view/node~Node} node Child node.\n     * @returns {Number} Index of the child node.\n     */\n  }, {\n    key: \"getChildIndex\",\n    value: function getChildIndex(node) {\n      return this._children.indexOf(node);\n    }\n\n    /**\n     * Gets child nodes iterator.\n     *\n     * @returns {Iterable.<module:engine/view/node~Node>} Child nodes iterator.\n     */\n  }, {\n    key: \"getChildren\",\n    value: function getChildren() {\n      return this._children[Symbol.iterator]();\n    }\n\n    /**\n     * Returns an iterator that contains the keys for attributes. Order of inserting attributes is not preserved.\n     *\n     * @returns {Iterable.<String>} Keys for attributes.\n     */\n  }, {\n    key: \"getAttributeKeys\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function getAttributeKeys() {\n      return _regenerator().w(function (_context) {\n        while (1) switch (_context.n) {\n          case 0:\n            if (!(this._classes.size > 0)) {\n              _context.n = 1;\n              break;\n            }\n            _context.n = 1;\n            return 'class';\n          case 1:\n            if (!(this._styles.size > 0)) {\n              _context.n = 2;\n              break;\n            }\n            _context.n = 2;\n            return 'style';\n          case 2:\n            return _context.d(_regeneratorValues(this._attrs.keys()), 3);\n          case 3:\n            return _context.a(2);\n        }\n      }, getAttributeKeys, this);\n    })\n    /**\n     * Returns iterator that iterates over this element's attributes.\n     *\n     * Attributes are returned as arrays containing two items. First one is attribute key and second is attribute value.\n     * This format is accepted by native `Map` object and also can be passed in `Node` constructor.\n     *\n     * @returns {Iterable.<*>}\n     */\n  }, {\n    key: \"getAttributes\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function getAttributes() {\n      return _regenerator().w(function (_context2) {\n        while (1) switch (_context2.n) {\n          case 0:\n            return _context2.d(_regeneratorValues(this._attrs.entries()), 1);\n          case 1:\n            if (!(this._classes.size > 0)) {\n              _context2.n = 2;\n              break;\n            }\n            _context2.n = 2;\n            return ['class', this.getAttribute('class')];\n          case 2:\n            if (!(this._styles.size > 0)) {\n              _context2.n = 3;\n              break;\n            }\n            _context2.n = 3;\n            return ['style', this.getAttribute('style')];\n          case 3:\n            return _context2.a(2);\n        }\n      }, getAttributes, this);\n    })\n    /**\n     * Gets attribute by key. If attribute is not present - returns undefined.\n     *\n     * @param {String} key Attribute key.\n     * @returns {String|undefined} Attribute value.\n     */\n  }, {\n    key: \"getAttribute\",\n    value: function getAttribute(key) {\n      if (key == 'class') {\n        if (this._classes.size > 0) {\n          return _toConsumableArray(this._classes).join(' ');\n        }\n        return undefined;\n      }\n      if (key == 'style') {\n        if (this._styles.size > 0) {\n          var styleString = '';\n          var _iterator = _createForOfIteratorHelper(this._styles),\n            _step;\n          try {\n            for (_iterator.s(); !(_step = _iterator.n()).done;) {\n              var _step$value = _slicedToArray(_step.value, 2),\n                property = _step$value[0],\n                value = _step$value[1];\n              styleString += \"\".concat(property, \":\").concat(value, \";\");\n            }\n          } catch (err) {\n            _iterator.e(err);\n          } finally {\n            _iterator.f();\n          }\n          return styleString;\n        }\n        return undefined;\n      }\n      return this._attrs.get(key);\n    }\n\n    /**\n     * Returns a boolean indicating whether an attribute with the specified key exists in the element.\n     *\n     * @param {String} key Attribute key.\n     * @returns {Boolean} `true` if attribute with the specified key exists in the element, false otherwise.\n     */\n  }, {\n    key: \"hasAttribute\",\n    value: function hasAttribute(key) {\n      if (key == 'class') {\n        return this._classes.size > 0;\n      }\n      if (key == 'style') {\n        return this._styles.size > 0;\n      }\n      return this._attrs.has(key);\n    }\n\n    /**\n     * Checks if this element is similar to other element.\n     * Both elements should have the same name and attributes to be considered as similar. Two similar elements\n     * can contain different set of children nodes.\n     *\n     * @param {module:engine/view/element~Element} otherElement\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"isSimilar\",\n    value: function isSimilar(otherElement) {\n      if (!(otherElement instanceof Element)) {\n        return false;\n      }\n\n      // If exactly the same Element is provided - return true immediately.\n      if (this === otherElement) {\n        return true;\n      }\n\n      // Check element name.\n      if (this.name != otherElement.name) {\n        return false;\n      }\n\n      // Check number of attributes, classes and styles.\n      if (this._attrs.size !== otherElement._attrs.size || this._classes.size !== otherElement._classes.size || this._styles.size !== otherElement._styles.size) {\n        return false;\n      }\n\n      // Check if attributes are the same.\n      var _iterator2 = _createForOfIteratorHelper(this._attrs),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var _step2$value = _slicedToArray(_step2.value, 2),\n            key = _step2$value[0],\n            value = _step2$value[1];\n          if (!otherElement._attrs.has(key) || otherElement._attrs.get(key) !== value) {\n            return false;\n          }\n        }\n\n        // Check if classes are the same.\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      var _iterator3 = _createForOfIteratorHelper(this._classes),\n        _step3;\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var className = _step3.value;\n          if (!otherElement._classes.has(className)) {\n            return false;\n          }\n        }\n\n        // Check if styles are the same.\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n      var _iterator4 = _createForOfIteratorHelper(this._styles),\n        _step4;\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var _step4$value = _slicedToArray(_step4.value, 2),\n            property = _step4$value[0],\n            _value = _step4$value[1];\n          if (!otherElement._styles.has(property) || otherElement._styles.get(property) !== _value) {\n            return false;\n          }\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n      return true;\n    }\n\n    /**\n     * Returns true if class is present.\n     * If more then one class is provided - returns true only when all classes are present.\n     *\n     *\t\telement.hasClass( 'foo' ); // Returns true if 'foo' class is present.\n     *\t\telement.hasClass( 'foo', 'bar' ); // Returns true if 'foo' and 'bar' classes are both present.\n     *\n     * @param {...String} className\n     */\n  }, {\n    key: \"hasClass\",\n    value: function hasClass() {\n      for (var _len = arguments.length, className = new Array(_len), _key = 0; _key < _len; _key++) {\n        className[_key] = arguments[_key];\n      }\n      for (var _i = 0, _className = className; _i < _className.length; _i++) {\n        var name = _className[_i];\n        if (!this._classes.has(name)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Returns iterator that contains all class names.\n     *\n     * @returns {Iterable.<String>}\n     */\n  }, {\n    key: \"getClassNames\",\n    value: function getClassNames() {\n      return this._classes.keys();\n    }\n\n    /**\n     * Returns style value for given property.\n     * Undefined is returned if style does not exist.\n     *\n     * @param {String} property\n     * @returns {String|undefined}\n     */\n  }, {\n    key: \"getStyle\",\n    value: function getStyle(property) {\n      return this._styles.get(property);\n    }\n\n    /**\n     * Returns iterator that contains all style names.\n     *\n     * @returns {Iterable.<String>}\n     */\n  }, {\n    key: \"getStyleNames\",\n    value: function getStyleNames() {\n      return this._styles.keys();\n    }\n\n    /**\n     * Returns true if style keys are present.\n     * If more then one style property is provided - returns true only when all properties are present.\n     *\n     *\t\telement.hasStyle( 'color' ); // Returns true if 'border-top' style is present.\n     *\t\telement.hasStyle( 'color', 'border-top' ); // Returns true if 'color' and 'border-top' styles are both present.\n     *\n     * @param {...String} property\n     */\n  }, {\n    key: \"hasStyle\",\n    value: function hasStyle() {\n      for (var _len2 = arguments.length, property = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        property[_key2] = arguments[_key2];\n      }\n      for (var _i2 = 0, _property = property; _i2 < _property.length; _i2++) {\n        var name = _property[_i2];\n        if (!this._styles.has(name)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Returns ancestor element that match specified pattern.\n     * Provided patterns should be compatible with {@link module:engine/view/matcher~Matcher Matcher} as it is used internally.\n     *\n     * @see module:engine/view/matcher~Matcher\n     * @param {Object|String|RegExp|Function} patterns Patterns used to match correct ancestor.\n     * See {@link module:engine/view/matcher~Matcher}.\n     * @returns {module:engine/view/element~Element|null} Found element or `null` if no matching ancestor was found.\n     */\n  }, {\n    key: \"findAncestor\",\n    value: function findAncestor() {\n      for (var _len3 = arguments.length, patterns = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        patterns[_key3] = arguments[_key3];\n      }\n      var matcher = _construct(Matcher, patterns);\n      var parent = this.parent;\n      while (parent) {\n        if (matcher.match(parent)) {\n          return parent;\n        }\n        parent = parent.parent;\n      }\n      return null;\n    }\n\n    /**\n     * Returns the custom property value for the given key.\n     *\n     * @param {String|Symbol} key\n     * @returns {*}\n     */\n  }, {\n    key: \"getCustomProperty\",\n    value: function getCustomProperty(key) {\n      return this._customProperties.get(key);\n    }\n\n    /**\n     * Returns an iterator which iterates over this element's custom properties.\n     * Iterator provides `[ key, value ]` pairs for each stored property.\n     *\n     * @returns {Iterable.<*>}\n     */\n  }, {\n    key: \"getCustomProperties\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function getCustomProperties() {\n      return _regenerator().w(function (_context3) {\n        while (1) switch (_context3.n) {\n          case 0:\n            return _context3.d(_regeneratorValues(this._customProperties.entries()), 1);\n          case 1:\n            return _context3.a(2);\n        }\n      }, getCustomProperties, this);\n    })\n    /**\n     * Returns identity string based on element's name, styles, classes and other attributes.\n     * Two elements that {@link #isSimilar are similar} will have same identity string.\n     * It has the following format:\n     *\n     *\t\t'name class=\"class1,class2\" style=\"style1:value1;style2:value2\" attr1=\"val1\" attr2=\"val2\"'\n    \t *\n     * For example:\n     *\n     *\t\tconst element = writer.createContainerElement( 'foo', {\n     *\t\t\tbanana: '10',\n     *\t\t\tapple: '20',\n     *\t\t\tstyle: 'color: red; border-color: white;',\n     *\t\t\tclass: 'baz'\n     *\t\t} );\n     *\n     *\t\t// returns 'foo class=\"baz\" style=\"border-color:white;color:red\" apple=\"20\" banana=\"10\"'\n     *\t\telement.getIdentity();\n     *\n     * NOTE: Classes, styles and other attributes are sorted alphabetically.\n     *\n     * @returns {String}\n     */\n  }, {\n    key: \"getIdentity\",\n    value: function getIdentity() {\n      var classes = Array.from(this._classes).sort().join(',');\n      var styles = Array.from(this._styles).map(function (i) {\n        return \"\".concat(i[0], \":\").concat(i[1]);\n      }).sort().join(';');\n      var attributes = Array.from(this._attrs).map(function (i) {\n        return \"\".concat(i[0], \"=\\\"\").concat(i[1], \"\\\"\");\n      }).sort().join(' ');\n      return this.name + (classes == '' ? '' : \" class=\\\"\".concat(classes, \"\\\"\")) + (styles == '' ? '' : \" style=\\\"\".concat(styles, \"\\\"\")) + (attributes == '' ? '' : \" \".concat(attributes));\n    }\n\n    /**\n     * Clones provided element.\n     *\n     * @protected\n     * @param {Boolean} [deep=false] If set to `true` clones element and all its children recursively. When set to `false`,\n     * element will be cloned without any children.\n     * @returns {module:engine/view/element~Element} Clone of this element.\n     */\n  }, {\n    key: \"_clone\",\n    value: function _clone() {\n      var deep = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var childrenClone = [];\n      if (deep) {\n        var _iterator5 = _createForOfIteratorHelper(this.getChildren()),\n          _step5;\n        try {\n          for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n            var child = _step5.value;\n            childrenClone.push(child._clone(deep));\n          }\n        } catch (err) {\n          _iterator5.e(err);\n        } finally {\n          _iterator5.f();\n        }\n      }\n\n      // ContainerElement and AttributeElement should be also cloned properly.\n      var cloned = new this.constructor(this.name, this._attrs, childrenClone);\n\n      // Classes and styles are cloned separately - this solution is faster than adding them back to attributes and\n      // parse once again in constructor.\n      cloned._classes = new Set(this._classes);\n      cloned._styles = new Map(this._styles);\n\n      // Clone custom properties.\n      cloned._customProperties = new Map(this._customProperties);\n\n      // Clone filler offset method.\n      // We can't define this method in a prototype because it's behavior which\n      // is changed by e.g. toWidget() function from ckeditor5-widget. Perhaps this should be one of custom props.\n      cloned.getFillerOffset = this.getFillerOffset;\n      return cloned;\n    }\n\n    /**\n     * {@link module:engine/view/element~Element#_insertChild Insert} a child node or a list of child nodes at the end of this node\n     * and sets the parent of these nodes to this element.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#insert\n     * @protected\n     * @param {module:engine/view/item~Item|Iterable.<module:engine/view/item~Item>} items Items to be inserted.\n     * @fires module:engine/view/node~Node#change\n     * @returns {Number} Number of appended nodes.\n     */\n  }, {\n    key: \"_appendChild\",\n    value: function _appendChild(items) {\n      return this._insertChild(this.childCount, items);\n    }\n\n    /**\n     * Inserts a child node or a list of child nodes on the given index and sets the parent of these nodes to\n     * this element.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#insert\n     * @protected\n     * @param {Number} index Position where nodes should be inserted.\n     * @param {module:engine/view/item~Item|Iterable.<module:engine/view/item~Item>} items Items to be inserted.\n     * @fires module:engine/view/node~Node#change\n     * @returns {Number} Number of inserted nodes.\n     */\n  }, {\n    key: \"_insertChild\",\n    value: function _insertChild(index, items) {\n      this._fireChange('children', this);\n      var count = 0;\n      var nodes = normalize(items);\n      var _iterator6 = _createForOfIteratorHelper(nodes),\n        _step6;\n      try {\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n          var node = _step6.value;\n          // If node that is being added to this element is already inside another element, first remove it from the old parent.\n          if (node.parent !== null) {\n            node._remove();\n          }\n          node.parent = this;\n          this._children.splice(index, 0, node);\n          index++;\n          count++;\n        }\n      } catch (err) {\n        _iterator6.e(err);\n      } finally {\n        _iterator6.f();\n      }\n      return count;\n    }\n\n    /**\n     * Removes number of child nodes starting at the given index and set the parent of these nodes to `null`.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#remove\n     * @protected\n     * @param {Number} index Number of the first node to remove.\n     * @param {Number} [howMany=1] Number of nodes to remove.\n     * @fires module:engine/view/node~Node#change\n     * @returns {Array.<module:engine/view/node~Node>} The array of removed nodes.\n     */\n  }, {\n    key: \"_removeChildren\",\n    value: function _removeChildren(index) {\n      var howMany = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      this._fireChange('children', this);\n      for (var i = index; i < index + howMany; i++) {\n        this._children[i].parent = null;\n      }\n      return this._children.splice(index, howMany);\n    }\n\n    /**\n     * Adds or overwrite attribute with a specified key and value.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#setAttribute\n     * @protected\n     * @param {String} key Attribute key.\n     * @param {String} value Attribute value.\n     * @fires module:engine/view/node~Node#change\n     */\n  }, {\n    key: \"_setAttribute\",\n    value: function _setAttribute(key, value) {\n      value = String(value);\n      this._fireChange('attributes', this);\n      if (key == 'class') {\n        parseClasses(this._classes, value);\n      } else if (key == 'style') {\n        parseInlineStyles(this._styles, value);\n      } else {\n        this._attrs.set(key, value);\n      }\n    }\n\n    /**\n     * Removes attribute from the element.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#removeAttribute\n     * @protected\n     * @param {String} key Attribute key.\n     * @returns {Boolean} Returns true if an attribute existed and has been removed.\n     * @fires module:engine/view/node~Node#change\n     */\n  }, {\n    key: \"_removeAttribute\",\n    value: function _removeAttribute(key) {\n      this._fireChange('attributes', this);\n\n      // Remove class attribute.\n      if (key == 'class') {\n        if (this._classes.size > 0) {\n          this._classes.clear();\n          return true;\n        }\n        return false;\n      }\n\n      // Remove style attribute.\n      if (key == 'style') {\n        if (this._styles.size > 0) {\n          this._styles.clear();\n          return true;\n        }\n        return false;\n      }\n\n      // Remove other attributes.\n      return this._attrs.delete(key);\n    }\n\n    /**\n     * Adds specified class.\n     *\n     *\t\telement._addClass( 'foo' ); // Adds 'foo' class.\n     *\t\telement._addClass( [ 'foo', 'bar' ] ); // Adds 'foo' and 'bar' classes.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#addClass\n     * @protected\n     * @param {Array.<String>|String} className\n     * @fires module:engine/view/node~Node#change\n     */\n  }, {\n    key: \"_addClass\",\n    value: function _addClass(className) {\n      var _this2 = this;\n      this._fireChange('attributes', this);\n      className = Array.isArray(className) ? className : [className];\n      className.forEach(function (name) {\n        return _this2._classes.add(name);\n      });\n    }\n\n    /**\n     * Removes specified class.\n     *\n     *\t\telement._removeClass( 'foo' );  // Removes 'foo' class.\n     *\t\telement._removeClass( [ 'foo', 'bar' ] ); // Removes both 'foo' and 'bar' classes.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#removeClass\n     * @protected\n     * @param {Array.<String>|String} className\n     * @fires module:engine/view/node~Node#change\n     */\n  }, {\n    key: \"_removeClass\",\n    value: function _removeClass(className) {\n      var _this3 = this;\n      this._fireChange('attributes', this);\n      className = Array.isArray(className) ? className : [className];\n      className.forEach(function (name) {\n        return _this3._classes.delete(name);\n      });\n    }\n\n    /**\n     * Adds style to the element.\n     *\n     *\t\telement._setStyle( 'color', 'red' );\n     *\t\telement._setStyle( {\n     *\t\t\tcolor: 'red',\n     *\t\t\tposition: 'fixed'\n     *\t\t} );\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#setStyle\n     * @protected\n     * @param {String|Object} property Property name or object with key - value pairs.\n     * @param {String} [value] Value to set. This parameter is ignored if object is provided as the first parameter.\n     * @fires module:engine/view/node~Node#change\n     */\n  }, {\n    key: \"_setStyle\",\n    value: function _setStyle(property, value) {\n      this._fireChange('attributes', this);\n      if (isPlainObject(property)) {\n        var keys = Object.keys(property);\n        for (var _i3 = 0, _keys = keys; _i3 < _keys.length; _i3++) {\n          var key = _keys[_i3];\n          this._styles.set(key, property[key]);\n        }\n      } else {\n        this._styles.set(property, value);\n      }\n    }\n\n    /**\n     * Removes specified style.\n     *\n     *\t\telement._removeStyle( 'color' );  // Removes 'color' style.\n     *\t\telement._removeStyle( [ 'color', 'border-top' ] ); // Removes both 'color' and 'border-top' styles.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#removeStyle\n     * @protected\n     * @param {Array.<String>|String} property\n     * @fires module:engine/view/node~Node#change\n     */\n  }, {\n    key: \"_removeStyle\",\n    value: function _removeStyle(property) {\n      var _this4 = this;\n      this._fireChange('attributes', this);\n      property = Array.isArray(property) ? property : [property];\n      property.forEach(function (name) {\n        return _this4._styles.delete(name);\n      });\n    }\n\n    /**\n     * Sets a custom property. Unlike attributes, custom properties are not rendered to the DOM,\n     * so they can be used to add special data to elements.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#setCustomProperty\n     * @protected\n     * @param {String|Symbol} key\n     * @param {*} value\n     */\n  }, {\n    key: \"_setCustomProperty\",\n    value: function _setCustomProperty(key, value) {\n      this._customProperties.set(key, value);\n    }\n\n    /**\n     * Removes the custom property stored under the given key.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#removeCustomProperty\n     * @protected\n     * @param {String|Symbol} key\n     * @returns {Boolean} Returns true if property was removed.\n     */\n  }, {\n    key: \"_removeCustomProperty\",\n    value: function _removeCustomProperty(key) {\n      return this._customProperties.delete(key);\n    }\n\n    /**\n     * Returns block {@link module:engine/view/filler filler} offset or `null` if block filler is not needed.\n     *\n     * @abstract\n     * @method module:engine/view/element~Element#getFillerOffset\n     */\n  }]);\n}(Node); // Parses attributes provided to the element constructor before they are applied to an element. If attributes are passed\n// as an object (instead of `Map`), the object is transformed to the map. Attributes with `null` value are removed.\n// Attributes with non-`String` value are converted to `String`.\n//\n// @param {Object|Map} attrs Attributes to parse.\n// @returns {Map} Parsed attributes.\nexport { Element as default };\nfunction parseAttributes(attrs) {\n  if (isPlainObject(attrs)) {\n    attrs = objectToMap(attrs);\n  } else {\n    attrs = new Map(attrs);\n  }\n  var _iterator7 = _createForOfIteratorHelper(attrs),\n    _step7;\n  try {\n    for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n      var _step7$value = _slicedToArray(_step7.value, 2),\n        key = _step7$value[0],\n        value = _step7$value[1];\n      if (value === null) {\n        attrs.delete(key);\n      } else if (typeof value != 'string') {\n        attrs.set(key, String(value));\n      }\n    }\n  } catch (err) {\n    _iterator7.e(err);\n  } finally {\n    _iterator7.f();\n  }\n  return attrs;\n}\n\n// Parses inline styles and puts property - value pairs into styles map.\n// Styles map is cleared before insertion.\n//\n// @param {Map.<String, String>} stylesMap Map to insert parsed properties and values.\n// @param {String} stylesString Styles to parse.\nfunction parseInlineStyles(stylesMap, stylesString) {\n  // `null` if no quote was found in input string or last found quote was a closing quote. See below.\n  var quoteType = null;\n  var propertyNameStart = 0;\n  var propertyValueStart = 0;\n  var propertyName = null;\n  stylesMap.clear();\n\n  // Do not set anything if input string is empty.\n  if (stylesString === '') {\n    return;\n  }\n\n  // Fix inline styles that do not end with `;` so they are compatible with algorithm below.\n  if (stylesString.charAt(stylesString.length - 1) != ';') {\n    stylesString = stylesString + ';';\n  }\n\n  // Seek the whole string for \"special characters\".\n  for (var i = 0; i < stylesString.length; i++) {\n    var char = stylesString.charAt(i);\n    if (quoteType === null) {\n      // No quote found yet or last found quote was a closing quote.\n      switch (char) {\n        case ':':\n          // Most of time colon means that property name just ended.\n          // Sometimes however `:` is found inside property value (for example in background image url).\n          if (!propertyName) {\n            // Treat this as end of property only if property name is not already saved.\n            // Save property name.\n            propertyName = stylesString.substr(propertyNameStart, i - propertyNameStart);\n            // Save this point as the start of property value.\n            propertyValueStart = i + 1;\n          }\n          break;\n        case '\"':\n        case '\\'':\n          // Opening quote found (this is an opening quote, because `quoteType` is `null`).\n          quoteType = char;\n          break;\n        case ';':\n          {\n            // Property value just ended.\n            // Use previously stored property value start to obtain property value.\n            var propertyValue = stylesString.substr(propertyValueStart, i - propertyValueStart);\n            if (propertyName) {\n              // Save parsed part.\n              stylesMap.set(propertyName.trim(), propertyValue.trim());\n            }\n            propertyName = null;\n\n            // Save this point as property name start. Property name starts immediately after previous property value ends.\n            propertyNameStart = i + 1;\n            break;\n          }\n      }\n    } else if (char === quoteType) {\n      // If a quote char is found and it is a closing quote, mark this fact by `null`-ing `quoteType`.\n      quoteType = null;\n    }\n  }\n}\n\n// Parses class attribute and puts all classes into classes set.\n// Classes set s cleared before insertion.\n//\n// @param {Set.<String>} classesSet Set to insert parsed classes.\n// @param {String} classesString String with classes to parse.\nfunction parseClasses(classesSet, classesString) {\n  var classArray = classesString.split(/\\s+/);\n  classesSet.clear();\n  classArray.forEach(function (name) {\n    return classesSet.add(name);\n  });\n}\n\n// Converts strings to Text and non-iterables to arrays.\n//\n// @param {String|module:engine/view/item~Item|Iterable.<String|module:engine/view/item~Item>}\n// @returns {Iterable.<module:engine/view/node~Node>}\nfunction normalize(nodes) {\n  // Separate condition because string is iterable.\n  if (typeof nodes == 'string') {\n    return [new Text(nodes)];\n  }\n  if (!isIterable(nodes)) {\n    nodes = [nodes];\n  }\n\n  // Array.from to enable .map() on non-arrays.\n  return Array.from(nodes).map(function (node) {\n    if (typeof node == 'string') {\n      return new Text(node);\n    }\n    if (node instanceof TextProxy) {\n      return new Text(node.data);\n    }\n    return node;\n  });\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.replace.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/emptyelement\n */\n\nimport Element from './element';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport Node from './node';\n\n/**\n * Empty element class. It is used to represent elements that cannot contain any child nodes (for example `<img>` elements).\n *\n * To create a new empty element use the\n * {@link module:engine/view/downcastwriter~DowncastWriter#createEmptyElement `downcastWriter#createEmptyElement()`} method.\n *\n * @extends module:engine/view/element~Element\n */\nvar EmptyElement = /*#__PURE__*/function (_Element) {\n  /**\n   * Creates new instance of EmptyElement.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-emptyelement-cannot-add` when third parameter is passed,\n   * to inform that usage of EmptyElement is incorrect (adding child nodes to EmptyElement is forbidden).\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#createEmptyElement\n   * @protected\n   * @param {String} name Node name.\n   * @param {Object|Iterable} [attributes] Collection of attributes.\n   */\n  function EmptyElement(name, attributes, children) {\n    var _this;\n    _classCallCheck(this, EmptyElement);\n    _this = _callSuper(this, EmptyElement, [name, attributes, children]);\n\n    /**\n     * Returns `null` because filler is not needed for EmptyElements.\n     *\n     * @method #getFillerOffset\n     * @returns {null} Always returns null.\n     */\n    _this.getFillerOffset = getFillerOffset;\n    return _this;\n  }\n\n  /**\n   * Checks whether this object is of the given.\n   *\n   *\t\temptyElement.is( 'emptyElement' ); // -> true\n   *\t\temptyElement.is( 'element' ); // -> true\n   *\t\temptyElement.is( 'node' ); // -> true\n   *\t\temptyElement.is( 'view:emptyElement' ); // -> true\n   *\t\temptyElement.is( 'view:element' ); // -> true\n   *\t\temptyElement.is( 'view:node' ); // -> true\n   *\n   *\t\temptyElement.is( 'model:element' ); // -> false\n   *\t\temptyElement.is( 'documentFragment' ); // -> false\n   *\n   * Assuming that the object being checked is an empty element, you can also check its\n   * {@link module:engine/view/emptyelement~EmptyElement#name name}:\n   *\n   *\t\temptyElement.is( 'img' ); // -> true if this is a img element\n   *\t\temptyElement.is( 'emptyElement', 'img' ); // -> same as above\n   *\t\ttext.is( 'img' ); -> false\n   *\n   * {@link module:engine/view/node~Node#is Check the entire list of view objects} which implement the `is()` method.\n   *\n   * @param {String} type Type to check when `name` parameter is present.\n   * Otherwise, it acts like the `name` parameter.\n   * @param {String} [name] Element name.\n   * @returns {Boolean}\n   */\n  _inherits(EmptyElement, _Element);\n  return _createClass(EmptyElement, [{\n    key: \"is\",\n    value: function is(type) {\n      var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var cutType = type.replace(/^view:/, '');\n      if (!name) {\n        return cutType == 'emptyElement' || _superPropGet(EmptyElement, \"is\", this, 3)([type]);\n      } else {\n        return cutType == 'emptyElement' && name == this.name || _superPropGet(EmptyElement, \"is\", this, 3)([type, name]);\n      }\n    }\n\n    /**\n     * Overrides {@link module:engine/view/element~Element#_insertChild} method.\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-emptyelement-cannot-add` to prevent\n     * adding any child nodes to EmptyElement.\n     *\n     * @protected\n     */\n  }, {\n    key: \"_insertChild\",\n    value: function _insertChild(index, nodes) {\n      if (nodes && (nodes instanceof Node || Array.from(nodes).length > 0)) {\n        /**\n         * Cannot add children to {@link module:engine/view/emptyelement~EmptyElement}.\n         *\n         * @error view-emptyelement-cannot-add\n         */\n        throw new CKEditorError('view-emptyelement-cannot-add: Cannot add child nodes to EmptyElement instance.', [this, nodes]);\n      }\n    }\n  }]);\n}(Element); // Returns `null` because block filler is not needed for EmptyElements.\n//\n// @returns {null}\nexport { EmptyElement as default };\nfunction getFillerOffset() {\n  return null;\n}","import \"core-js/modules/es.array.slice.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\nimport { keyCodes } from '@ckeditor/ckeditor5-utils/src/keyboard';\nimport isText from '@ckeditor/ckeditor5-utils/src/dom/istext';\n\n/**\n * Set of utils related to block and inline fillers handling.\n *\n * Browsers do not allow to put caret in elements which does not have height. Because of it, we need to fill all\n * empty elements which should be selectable with elements or characters called \"fillers\". Unfortunately there is no one\n * universal filler, this is why two types are uses:\n *\n * * Block filler is an element which fill block elements, like `<p>`. CKEditor uses `<br>` as a block filler during the editing,\n * as browsers do natively. So instead of an empty `<p>` there will be `<p><br></p>`. The advantage of block filler is that\n * it is transparent for the selection, so when the caret is before the `<br>` and user presses right arrow he will be\n * moved to the next paragraph, not after the `<br>`. The disadvantage is that it breaks a block, so it can not be used\n * in the middle of a line of text. The {@link module:engine/view/filler~BR_FILLER `<br>` filler} can be replaced with any other\n * character in the data output, for instance {@link module:engine/view/filler~NBSP_FILLER non-breaking space}.\n *\n * * Inline filler is a filler which does not break a line of text, so it can be used inside the text, for instance in the empty\n * `<b>` surrendered by text: `foo<b></b>bar`, if we want to put the caret there. CKEditor uses a sequence of the zero-width\n * spaces as an {@link module:engine/view/filler~INLINE_FILLER inline filler} having the predetermined\n * {@link module:engine/view/filler~INLINE_FILLER_LENGTH length}. A sequence is used, instead of a single character to\n * avoid treating random zero-width spaces as the inline filler. Disadvantage of the inline filler is that it is not\n * transparent for the selection. The arrow key moves the caret between zero-width spaces characters, so the additional\n * code is needed to handle the caret.\n *\n * Both inline and block fillers are handled by the {@link module:engine/view/renderer~Renderer renderer} and are not present in the\n * view.\n *\n * @module engine/view/filler\n */\n\n/**\n * Non-breaking space filler creator. This is a function which creates `&nbsp;` text node.\n * It defines how the filler is created.\n *\n * @see module:engine/view/filler~BR_FILLER\n * @function\n */\nexport var NBSP_FILLER = function NBSP_FILLER(domDocument) {\n  return domDocument.createTextNode(\"\\xA0\");\n};\n\n/**\n * `<br>` filler creator. This is a function which creates `<br data-cke-filler=\"true\">` element.\n * It defines how the filler is created.\n *\n * @see module:engine/view/filler~NBSP_FILLER\n * @function\n */\nexport var BR_FILLER = function BR_FILLER(domDocument) {\n  var fillerBr = domDocument.createElement('br');\n  fillerBr.dataset.ckeFiller = true;\n  return fillerBr;\n};\n\n/**\n * Length of the {@link module:engine/view/filler~INLINE_FILLER INLINE_FILLER}.\n */\nexport var INLINE_FILLER_LENGTH = 7;\n\n/**\n * Inline filler which is a sequence of the zero width spaces.\n */\nexport var INLINE_FILLER = function () {\n  var inlineFiller = '';\n  for (var i = 0; i < INLINE_FILLER_LENGTH; i++) {\n    inlineFiller += \"\\u200B\";\n  }\n  return inlineFiller;\n}(); // Usu IIF so the INLINE_FILLER appears as a constant in the docs.\n\n/**\n * Checks if the node is a text node which starts with the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n *\n *\t\tstartsWithFiller( document.createTextNode( INLINE_FILLER ) ); // true\n *\t\tstartsWithFiller( document.createTextNode( INLINE_FILLER + 'foo' ) ); // true\n *\t\tstartsWithFiller( document.createTextNode( 'foo' ) ); // false\n *\t\tstartsWithFiller( document.createElement( 'p' ) ); // false\n *\n * @param {Node} domNode DOM node.\n * @returns {Boolean} True if the text node starts with the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n */\nexport function startsWithFiller(domNode) {\n  return isText(domNode) && domNode.data.substr(0, INLINE_FILLER_LENGTH) === INLINE_FILLER;\n}\n\n/**\n * Checks if the text node contains only the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n *\n *\t\tisInlineFiller( document.createTextNode( INLINE_FILLER ) ); // true\n *\t\tisInlineFiller( document.createTextNode( INLINE_FILLER + 'foo' ) ); // false\n *\n * @param {Text} domText DOM text node.\n * @returns {Boolean} True if the text node contains only the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n */\nexport function isInlineFiller(domText) {\n  return domText.data.length == INLINE_FILLER_LENGTH && startsWithFiller(domText);\n}\n\n/**\n * Get string data from the text node, removing an {@link module:engine/view/filler~INLINE_FILLER inline filler} from it,\n * if text node contains it.\n *\n *\t\tgetDataWithoutFiller( document.createTextNode( INLINE_FILLER + 'foo' ) ) == 'foo' // true\n *\t\tgetDataWithoutFiller( document.createTextNode( 'foo' ) ) == 'foo' // true\n *\n * @param {Text} domText DOM text node, possible with inline filler.\n * @returns {String} Data without filler.\n */\nexport function getDataWithoutFiller(domText) {\n  if (startsWithFiller(domText)) {\n    return domText.data.slice(INLINE_FILLER_LENGTH);\n  } else {\n    return domText.data;\n  }\n}\n\n/**\n * Assign key observer which move cursor from the end of the inline filler to the beginning of it when\n * the left arrow is pressed, so the filler does not break navigation.\n *\n * @param {module:engine/view/view~View} view View controller instance we should inject quirks handling on.\n */\nexport function injectQuirksHandling(view) {\n  view.document.on('keydown', jumpOverInlineFiller);\n}\n\n// Move cursor from the end of the inline filler to the beginning of it when, so the filler does not break navigation.\nfunction jumpOverInlineFiller(evt, data) {\n  if (data.keyCode == keyCodes.arrowleft) {\n    var domSelection = data.domTarget.ownerDocument.defaultView.getSelection();\n    if (domSelection.rangeCount == 1 && domSelection.getRangeAt(0).collapsed) {\n      var domParent = domSelection.getRangeAt(0).startContainer;\n      var domOffset = domSelection.getRangeAt(0).startOffset;\n      if (startsWithFiller(domParent) && domOffset <= INLINE_FILLER_LENGTH) {\n        domSelection.collapse(domParent, 0);\n      }\n    }\n  }\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.constructor.js\";\nimport \"core-js/modules/es.regexp.dot-all.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.regexp.sticky.js\";\nimport \"core-js/modules/es.regexp.test.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/matcher\n */\n/**\n * View matcher class.\n * Instance of this class can be used to find {@link module:engine/view/element~Element elements} that match given pattern.\n */\nvar Matcher = /*#__PURE__*/function () {\n  /**\n   * Creates new instance of Matcher.\n   *\n   * @param {String|RegExp|Object} [pattern] Match patterns. See {@link module:engine/view/matcher~Matcher#add add method} for\n   * more information.\n   */\n  function Matcher() {\n    _classCallCheck(this, Matcher);\n    /**\n     * @private\n     * @type {Array<String|RegExp|Object>}\n     */\n    this._patterns = [];\n    this.add.apply(this, arguments);\n  }\n\n  /**\n   * Adds pattern or patterns to matcher instance.\n   *\n   *\t\t// String.\n   *\t\tmatcher.add( 'div' );\n   *\n   *\t\t// Regular expression.\n   *\t\tmatcher.add( /^\\w/ );\n   *\n   *\t\t// Single class.\n   *\t\tmatcher.add( {\n   *\t\t\tclasses: 'foobar'\n   *\t\t} );\n   *\n   * See {@link module:engine/view/matcher~MatcherPattern} for more examples.\n   *\n   * Multiple patterns can be added in one call:\n   *\n   * \t\tmatcher.add( 'div', { classes: 'foobar' } );\n   *\n   * @param {Object|String|RegExp|Function} pattern Object describing pattern details. If string or regular expression\n   * is provided it will be used to match element's name. Pattern can be also provided in a form\n   * of a function - then this function will be called with each {@link module:engine/view/element~Element element} as a parameter.\n   * Function's return value will be stored under `match` key of the object returned from\n   * {@link module:engine/view/matcher~Matcher#match match} or {@link module:engine/view/matcher~Matcher#matchAll matchAll} methods.\n   * @param {String|RegExp} [pattern.name] Name or regular expression to match element's name.\n   * @param {Object} [pattern.attributes] Object with key-value pairs representing attributes to match. Each object key\n   * represents attribute name. Value under that key can be either:\n   * * `true` - then attribute is just required (can be empty),\n   * * a string - then attribute has to be equal, or\n   * * a regular expression - then attribute has to match the expression.\n   * @param {String|RegExp|Array} [pattern.classes] Class name or array of class names to match. Each name can be\n   * provided in a form of string or regular expression.\n   * @param {Object} [pattern.styles] Object with key-value pairs representing styles to match. Each object key\n   * represents style name. Value under that key can be either a string or a regular expression and it will be used\n   * to match style value.\n   */\n  return _createClass(Matcher, [{\n    key: \"add\",\n    value: function add() {\n      for (var _len = arguments.length, pattern = new Array(_len), _key = 0; _key < _len; _key++) {\n        pattern[_key] = arguments[_key];\n      }\n      for (var _i = 0, _pattern = pattern; _i < _pattern.length; _i++) {\n        var item = _pattern[_i];\n        // String or RegExp pattern is used as element's name.\n        if (typeof item == 'string' || item instanceof RegExp) {\n          item = {\n            name: item\n          };\n        }\n\n        // Single class name/RegExp can be provided.\n        if (item.classes && (typeof item.classes == 'string' || item.classes instanceof RegExp)) {\n          item.classes = [item.classes];\n        }\n        this._patterns.push(item);\n      }\n    }\n\n    /**\n     * Matches elements for currently stored patterns. Returns match information about first found\n     * {@link module:engine/view/element~Element element}, otherwise returns `null`.\n     *\n     * Example of returned object:\n     *\n     *\t\t{\n     *\t\t\telement: <instance of found element>,\n     *\t\t\tpattern: <pattern used to match found element>,\n     *\t\t\tmatch: {\n     *\t\t\t\tname: true,\n     *\t\t\t\tattributes: [ 'title', 'href' ],\n     *\t\t\t\tclasses: [ 'foo' ],\n     *\t\t\t\tstyles: [ 'color', 'position' ]\n     *\t\t\t}\n     *\t\t}\n     *\n     * @see module:engine/view/matcher~Matcher#add\n     * @see module:engine/view/matcher~Matcher#matchAll\n     * @param {...module:engine/view/element~Element} element View element to match against stored patterns.\n     * @returns {Object|null} result\n     * @returns {module:engine/view/element~Element} result.element Matched view element.\n     * @returns {Object|String|RegExp|Function} result.pattern Pattern that was used to find matched element.\n     * @returns {Object} result.match Object representing matched element parts.\n     * @returns {Boolean} [result.match.name] True if name of the element was matched.\n     * @returns {Array} [result.match.attributes] Array with matched attribute names.\n     * @returns {Array} [result.match.classes] Array with matched class names.\n     * @returns {Array} [result.match.styles] Array with matched style names.\n     */\n  }, {\n    key: \"match\",\n    value: function match() {\n      for (var _len2 = arguments.length, element = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        element[_key2] = arguments[_key2];\n      }\n      for (var _i2 = 0, _element = element; _i2 < _element.length; _i2++) {\n        var singleElement = _element[_i2];\n        var _iterator = _createForOfIteratorHelper(this._patterns),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var pattern = _step.value;\n            var _match = isElementMatching(singleElement, pattern);\n            if (_match) {\n              return {\n                element: singleElement,\n                pattern: pattern,\n                match: _match\n              };\n            }\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      }\n      return null;\n    }\n\n    /**\n     * Matches elements for currently stored patterns. Returns array of match information with all found\n     * {@link module:engine/view/element~Element elements}. If no element is found - returns `null`.\n     *\n     * @see module:engine/view/matcher~Matcher#add\n     * @see module:engine/view/matcher~Matcher#match\n     * @param {...module:engine/view/element~Element} element View element to match against stored patterns.\n     * @returns {Array.<Object>|null} Array with match information about found elements or `null`. For more information\n     * see {@link module:engine/view/matcher~Matcher#match match method} description.\n     */\n  }, {\n    key: \"matchAll\",\n    value: function matchAll() {\n      var results = [];\n      for (var _len3 = arguments.length, element = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        element[_key3] = arguments[_key3];\n      }\n      for (var _i3 = 0, _element2 = element; _i3 < _element2.length; _i3++) {\n        var singleElement = _element2[_i3];\n        var _iterator2 = _createForOfIteratorHelper(this._patterns),\n          _step2;\n        try {\n          for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n            var pattern = _step2.value;\n            var match = isElementMatching(singleElement, pattern);\n            if (match) {\n              results.push({\n                element: singleElement,\n                pattern: pattern,\n                match: match\n              });\n            }\n          }\n        } catch (err) {\n          _iterator2.e(err);\n        } finally {\n          _iterator2.f();\n        }\n      }\n      return results.length > 0 ? results : null;\n    }\n\n    /**\n     * Returns the name of the element to match if there is exactly one pattern added to the matcher instance\n     * and it matches element name defined by `string` (not `RegExp`). Otherwise, returns `null`.\n     *\n     * @returns {String|null} Element name trying to match.\n     */\n  }, {\n    key: \"getElementName\",\n    value: function getElementName() {\n      if (this._patterns.length !== 1) {\n        return null;\n      }\n      var pattern = this._patterns[0];\n      var name = pattern.name;\n      return typeof pattern != 'function' && name && !(name instanceof RegExp) ? name : null;\n    }\n  }]);\n}(); // Returns match information if {@link module:engine/view/element~Element element} is matching provided pattern.\n// If element cannot be matched to provided pattern - returns `null`.\n//\n// @param {module:engine/view/element~Element} element\n// @param {Object|String|RegExp|Function} pattern\n// @returns {Object|null} Returns object with match information or null if element is not matching.\nexport { Matcher as default };\nfunction isElementMatching(element, pattern) {\n  // If pattern is provided as function - return result of that function;\n  if (typeof pattern == 'function') {\n    return pattern(element);\n  }\n  var match = {};\n  // Check element's name.\n  if (pattern.name) {\n    match.name = matchName(pattern.name, element.name);\n    if (!match.name) {\n      return null;\n    }\n  }\n\n  // Check element's attributes.\n  if (pattern.attributes) {\n    match.attributes = matchAttributes(pattern.attributes, element);\n    if (!match.attributes) {\n      return null;\n    }\n  }\n\n  // Check element's classes.\n  if (pattern.classes) {\n    match.classes = matchClasses(pattern.classes, element);\n    if (!match.classes) {\n      return false;\n    }\n  }\n\n  // Check element's styles.\n  if (pattern.styles) {\n    match.styles = matchStyles(pattern.styles, element);\n    if (!match.styles) {\n      return false;\n    }\n  }\n  return match;\n}\n\n// Checks if name can be matched by provided pattern.\n//\n// @param {String|RegExp} pattern\n// @param {String} name\n// @returns {Boolean} Returns `true` if name can be matched, `false` otherwise.\nfunction matchName(pattern, name) {\n  // If pattern is provided as RegExp - test against this regexp.\n  if (pattern instanceof RegExp) {\n    return pattern.test(name);\n  }\n  return pattern === name;\n}\n\n// Checks if attributes of provided element can be matched against provided patterns.\n//\n// @param {Object} patterns Object with information about attributes to match. Each key of the object will be\n// used as attribute name. Value of each key can be a string or regular expression to match against attribute value.\n// @param {module:engine/view/element~Element} element Element which attributes will be tested.\n// @returns {Array|null} Returns array with matched attribute names or `null` if no attributes were matched.\nfunction matchAttributes(patterns, element) {\n  var match = [];\n  for (var name in patterns) {\n    var pattern = patterns[name];\n    if (element.hasAttribute(name)) {\n      var attribute = element.getAttribute(name);\n      if (pattern === true) {\n        match.push(name);\n      } else if (pattern instanceof RegExp) {\n        if (pattern.test(attribute)) {\n          match.push(name);\n        } else {\n          return null;\n        }\n      } else if (attribute === pattern) {\n        match.push(name);\n      } else {\n        return null;\n      }\n    } else {\n      return null;\n    }\n  }\n  return match;\n}\n\n// Checks if classes of provided element can be matched against provided patterns.\n//\n// @param {Array.<String|RegExp>} patterns Array of strings or regular expressions to match against element's classes.\n// @param {module:engine/view/element~Element} element Element which classes will be tested.\n// @returns {Array|null} Returns array with matched class names or `null` if no classes were matched.\nfunction matchClasses(patterns, element) {\n  var match = [];\n  var _iterator3 = _createForOfIteratorHelper(patterns),\n    _step3;\n  try {\n    for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n      var pattern = _step3.value;\n      if (pattern instanceof RegExp) {\n        var classes = element.getClassNames();\n        var _iterator4 = _createForOfIteratorHelper(classes),\n          _step4;\n        try {\n          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n            var name = _step4.value;\n            if (pattern.test(name)) {\n              match.push(name);\n            }\n          }\n        } catch (err) {\n          _iterator4.e(err);\n        } finally {\n          _iterator4.f();\n        }\n        if (match.length === 0) {\n          return null;\n        }\n      } else if (element.hasClass(pattern)) {\n        match.push(pattern);\n      } else {\n        return null;\n      }\n    }\n  } catch (err) {\n    _iterator3.e(err);\n  } finally {\n    _iterator3.f();\n  }\n  return match;\n}\n\n// Checks if styles of provided element can be matched against provided patterns.\n//\n// @param {Object} patterns Object with information about styles to match. Each key of the object will be\n// used as style name. Value of each key can be a string or regular expression to match against style value.\n// @param {module:engine/view/element~Element} element Element which styles will be tested.\n// @returns {Array|null} Returns array with matched style names or `null` if no styles were matched.\nfunction matchStyles(patterns, element) {\n  var match = [];\n  for (var name in patterns) {\n    var pattern = patterns[name];\n    if (element.hasStyle(name)) {\n      var style = element.getStyle(name);\n      if (pattern instanceof RegExp) {\n        if (pattern.test(style)) {\n          match.push(name);\n        } else {\n          return null;\n        }\n      } else if (style === pattern) {\n        match.push(name);\n      } else {\n        return null;\n      }\n    } else {\n      return null;\n    }\n  }\n  return match;\n}\n\n/**\n * An entity that is a valid pattern recognized by a matcher. `MatcherPattern` is used by {@link ~Matcher} to recognize\n * if a view element fits in a group of view elements described by the pattern.\n *\n * `MatcherPattern` can be given as a `String`, a `RegExp`, an `Object` or a `Function`.\n *\n * If `MatcherPattern` is given as a `String` or `RegExp`, it will match any view element that has a matching name:\n *\n *\t\t// Match any element with name equal to 'div'.\n *\t\tconst pattern = 'div';\n *\n *\t\t// Match any element which name starts on 'p'.\n *\t\tconst pattern = /^p/;\n *\n * If `MatcherPattern` is given as an `Object`, all the object's properties will be matched with view element properties.\n *\n *\t\t// Match view element's name.\n *\t\tconst pattern = { name: /^p/ };\n *\n *\t\t// Match view element which has matching attributes.\n *\t\tconst pattern = {\n *\t\t\tattributes: {\n *\t\t\t\ttitle: 'foobar',\t// Attribute title should equal 'foobar'.\n *\t\t\t\tfoo: /^\\w+/,\t\t// Attribute foo should match /^\\w+/ regexp.\n *\t\t\t\tbar: true\t\t\t// Attribute bar should be set (can be empty).\n *\t\t\t}\n *\t\t};\n *\n *\t\t// Match view element which has given class.\n *\t\tconst pattern = {\n *\t\t\tclasses: 'foobar'\n *\t\t};\n *\n *\t\t// Match view element class using regular expression.\n *\t\tconst pattern = {\n *\t\t\tclasses: /foo.../\n *\t\t};\n *\n *\t\t// Multiple classes to match.\n *\t\tconst pattern = {\n *\t\t\tclasses: [ 'baz', 'bar', /foo.../ ]\n *\t\t};\n *\n *\t\t// Match view element which has given styles.\n *\t\tconst pattern = {\n *\t\t\tstyles: {\n *\t\t\t\tposition: 'absolute',\n *\t\t\t\tcolor: /^\\w*blue$/\n *\t\t\t}\n *\t\t};\n *\n *\t\t// Pattern with multiple properties.\n *\t\tconst pattern = {\n *\t\t\tname: 'span',\n *\t\t\tstyles: {\n *\t\t\t\t'font-weight': 'bold'\n *\t\t\t},\n *\t\t\tclasses: 'highlighted'\n *\t\t};\n *\n * If `MatcherPattern` is given as a `Function`, the function takes a view element as a first and only parameter and\n * the function should decide whether that element matches. If so, it should return what part of the view element has been matched.\n * Otherwise, the function should return `null`. The returned result will be included in `match` property of the object\n * returned by {@link ~Matcher#match} call.\n *\n *\t\t// Match an empty <div> element.\n *\t\tconst pattern = element => {\n *\t\t\tif ( element.name == 'div' && element.childCount > 0 ) {\n *\t\t\t\t// Return which part of the element was matched.\n *\t\t\t\treturn { name: true };\n *\t\t\t}\n *\n *\t\t\treturn null;\n *\t\t};\n *\n *\t\t// Match a <p> element with big font (\"heading-like\" element).\n *\t\tconst pattern = element => {\n *\t\t\tif ( element.name == 'p' ) {\n *\t\t\t\tconst fontSize = element.getStyle( 'font-size' );\n *\t\t\t\tconst size = fontSize.match( /(\\d+)/px );\n *\n *\t\t\t\tif ( size && Number( size[ 1 ] ) > 26 ) {\n *\t\t\t\t\treturn { name: true, attribute: [ 'font-size' ] };\n *\t\t\t\t}\n *\t\t\t}\n *\n *\t\t\treturn null;\n *\t\t};\n *\n * `MatcherPattern` is defined in a way that it is a superset of {@link module:engine/view/elementdefinition~ElementDefinition},\n * that is, every `ElementDefinition` also can be used as a `MatcherPattern`.\n *\n * @typedef {String|RegExp|Object|Function} module:engine/view/matcher~MatcherPattern\n *\n * @property {String|RegExp} [name] View element name to match.\n * @property {String|RegExp|Array.<String|RegExp>} [classes] View element's class name(s) to match.\n * @property {Object} [styles] Object with key-value pairs representing styles to match.\n * Each object key represents style name. Value can be given as `String` or `RegExp`.\n * @property {Object} [attributes] Object with key-value pairs representing attributes to match.\n * Each object key represents attribute name. Value can be given as `String` or `RegExp`.\n */","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/node\n */\n\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport EmitterMixin from '@ckeditor/ckeditor5-utils/src/emittermixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport compareArrays from '@ckeditor/ckeditor5-utils/src/comparearrays';\nimport { clone } from 'lodash-es';\n\n// To check if component is loaded more than once.\nimport '@ckeditor/ckeditor5-utils/src/version';\n\n/**\n * Abstract tree view node class.\n *\n * This is an abstract class. Its constructor should not be used directly.\n * Use the {@link module:engine/view/element~Element} class to create view elements\n * or {@link module:engine/view/text~Text} class to create view text nodes.\n *\n * @abstract\n */\nvar Node = /*#__PURE__*/function () {\n  /**\n   * Creates a tree view node.\n   */\n  function Node() {\n    _classCallCheck(this, Node);\n    /**\n     * Parent element. Null by default. Set by {@link module:engine/view/element~Element#_insertChild}.\n     *\n     * @readonly\n     * @member {module:engine/view/element~Element|module:engine/view/documentfragment~DocumentFragment|null}\n     */\n    this.parent = null;\n  }\n\n  /**\n   * Index of the node in the parent element or null if the node has no parent.\n   *\n   * Accessing this property throws an error if this node's parent element does not contain it.\n   * This means that view tree got broken.\n   *\n   * @readonly\n   * @type {Number|null}\n   */\n  return _createClass(Node, [{\n    key: \"index\",\n    get: function get() {\n      var pos;\n      if (!this.parent) {\n        return null;\n      }\n\n      // No parent or child doesn't exist in parent's children.\n      if ((pos = this.parent.getChildIndex(this)) == -1) {\n        /**\n         * The node's parent does not contain this node. It means that the document tree is corrupted.\n         *\n         * @error view-node-not-found-in-parent\n         */\n        throw new CKEditorError('view-node-not-found-in-parent: The node\\'s parent does not contain this node.', this);\n      }\n      return pos;\n    }\n\n    /**\n     * Node's next sibling, or `null` if it is the last child.\n     *\n     * @readonly\n     * @type {module:engine/view/node~Node|null}\n     */\n  }, {\n    key: \"nextSibling\",\n    get: function get() {\n      var index = this.index;\n      return index !== null && this.parent.getChild(index + 1) || null;\n    }\n\n    /**\n     * Node's previous sibling, or `null` if it is the first child.\n     *\n     * @readonly\n     * @type {module:engine/view/node~Node|null}\n     */\n  }, {\n    key: \"previousSibling\",\n    get: function get() {\n      var index = this.index;\n      return index !== null && this.parent.getChild(index - 1) || null;\n    }\n\n    /**\n     * Top-most ancestor of the node. If the node has no parent it is the root itself.\n     *\n     * @readonly\n     * @type {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment}\n     */\n  }, {\n    key: \"root\",\n    get: function get() {\n      var root = this; // eslint-disable-line consistent-this\n\n      while (root.parent) {\n        root = root.parent;\n      }\n      return root;\n    }\n\n    /**\n     * {@link module:engine/view/document~Document View document} that owns this node, or `null` if the node is inside\n     * {@link module:engine/view/documentfragment~DocumentFragment document fragment}.\n     *\n     * @readonly\n     * @type {module:engine/view/document~Document|null}\n     */\n  }, {\n    key: \"document\",\n    get: function get() {\n      // Parent might be Node, null or DocumentFragment.\n      if (this.parent instanceof Node) {\n        return this.parent.document;\n      } else {\n        return null;\n      }\n    }\n\n    /**\n     * Gets a path to the node. The path is an array containing indices of consecutive ancestors of this node,\n     * beginning from {@link module:engine/view/node~Node#root root}, down to this node's index.\n     *\n     *\t\tconst abc = downcastWriter.createText( 'abc' );\n     *\t\tconst foo = downcastWriter.createText( 'foo' );\n     *\t\tconst h1 = downcastWriter.createElement( 'h1', null, downcastWriter.createText( 'header' ) );\n     *\t\tconst p = downcastWriter.createElement( 'p', null, [ abc, foo ] );\n     *\t\tconst div = downcastWriter.createElement( 'div', null, [ h1, p ] );\n     *\t\tfoo.getPath(); // Returns [ 1, 3 ]. `foo` is in `p` which is in `div`. `p` starts at offset 1, while `foo` at 3.\n     *\t\th1.getPath(); // Returns [ 0 ].\n     *\t\tdiv.getPath(); // Returns [].\n     *\n     * @returns {Array.<Number>} The path.\n     */\n  }, {\n    key: \"getPath\",\n    value: function getPath() {\n      var path = [];\n      var node = this; // eslint-disable-line consistent-this\n\n      while (node.parent) {\n        path.unshift(node.index);\n        node = node.parent;\n      }\n      return path;\n    }\n\n    /**\n     * Returns ancestors array of this node.\n     *\n     * @param {Object} options Options object.\n     * @param {Boolean} [options.includeSelf=false] When set to `true` this node will be also included in parent's array.\n     * @param {Boolean} [options.parentFirst=false] When set to `true`, array will be sorted from node's parent to root element,\n     * otherwise root element will be the first item in the array.\n     * @returns {Array} Array with ancestors.\n     */\n  }, {\n    key: \"getAncestors\",\n    value: function getAncestors() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n        includeSelf: false,\n        parentFirst: false\n      };\n      var ancestors = [];\n      var parent = options.includeSelf ? this : this.parent;\n      while (parent) {\n        ancestors[options.parentFirst ? 'push' : 'unshift'](parent);\n        parent = parent.parent;\n      }\n      return ancestors;\n    }\n\n    /**\n     * Returns a {@link module:engine/view/element~Element} or {@link module:engine/view/documentfragment~DocumentFragment}\n     * which is a common ancestor of both nodes.\n     *\n     * @param {module:engine/view/node~Node} node The second node.\n     * @param {Object} options Options object.\n     * @param {Boolean} [options.includeSelf=false] When set to `true` both nodes will be considered \"ancestors\" too.\n     * Which means that if e.g. node A is inside B, then their common ancestor will be B.\n     * @returns {module:engine/view/element~Element|module:engine/view/documentfragment~DocumentFragment|null}\n     */\n  }, {\n    key: \"getCommonAncestor\",\n    value: function getCommonAncestor(node) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var ancestorsA = this.getAncestors(options);\n      var ancestorsB = node.getAncestors(options);\n      var i = 0;\n      while (ancestorsA[i] == ancestorsB[i] && ancestorsA[i]) {\n        i++;\n      }\n      return i === 0 ? null : ancestorsA[i - 1];\n    }\n\n    /**\n     * Returns whether this node is before given node. `false` is returned if nodes are in different trees (for example,\n     * in different {@link module:engine/view/documentfragment~DocumentFragment}s).\n     *\n     * @param {module:engine/view/node~Node} node Node to compare with.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"isBefore\",\n    value: function isBefore(node) {\n      // Given node is not before this node if they are same.\n      if (this == node) {\n        return false;\n      }\n\n      // Return `false` if it is impossible to compare nodes.\n      if (this.root !== node.root) {\n        return false;\n      }\n      var thisPath = this.getPath();\n      var nodePath = node.getPath();\n      var result = compareArrays(thisPath, nodePath);\n      switch (result) {\n        case 'prefix':\n          return true;\n        case 'extension':\n          return false;\n        default:\n          return thisPath[result] < nodePath[result];\n      }\n    }\n\n    /**\n     * Returns whether this node is after given node. `false` is returned if nodes are in different trees (for example,\n     * in different {@link module:engine/view/documentfragment~DocumentFragment}s).\n     *\n     * @param {module:engine/view/node~Node} node Node to compare with.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"isAfter\",\n    value: function isAfter(node) {\n      // Given node is not before this node if they are same.\n      if (this == node) {\n        return false;\n      }\n\n      // Return `false` if it is impossible to compare nodes.\n      if (this.root !== node.root) {\n        return false;\n      }\n\n      // In other cases, just check if the `node` is before, and return the opposite.\n      return !this.isBefore(node);\n    }\n\n    /**\n     * Removes node from parent.\n     *\n     * @protected\n     */\n  }, {\n    key: \"_remove\",\n    value: function _remove() {\n      this.parent._removeChildren(this.index);\n    }\n\n    /**\n     * @protected\n     * @param {module:engine/view/document~ChangeType} type Type of the change.\n     * @param {module:engine/view/node~Node} node Changed node.\n     * @fires change\n     */\n  }, {\n    key: \"_fireChange\",\n    value: function _fireChange(type, node) {\n      this.fire('change:' + type, node);\n      if (this.parent) {\n        this.parent._fireChange(type, node);\n      }\n    }\n\n    /**\n     * Custom toJSON method to solve child-parent circular dependencies.\n     *\n     * @returns {Object} Clone of this object with the parent property removed.\n     */\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var json = clone(this);\n\n      // Due to circular references we need to remove parent reference.\n      delete json.parent;\n      return json;\n    }\n\n    /**\n     * Checks whether this object is of the given type.\n     *\n     * This method is useful when processing view objects that are of unknown type. For example, a function\n     * may return a {@link module:engine/view/documentfragment~DocumentFragment} or a {@link module:engine/view/node~Node}\n     * that can be either a text node or an element. This method can be used to check what kind of object is returned.\n     *\n     *\t\tsomeObject.is( 'element' ); // -> true if this is an element\n     *\t\tsomeObject.is( 'node' ); // -> true if this is a node (a text node or an element)\n     *\t\tsomeObject.is( 'documentFragment' ); // -> true if this is a document fragment\n     *\n     * Since this method is also available on a range of model objects, you can prefix the type of the object with\n     * `model:` or `view:` to check, for example, if this is the model's or view's element:\n     *\n     *\t\tviewElement.is( 'view:element' ); // -> true\n     *\t\tviewElement.is( 'model:element' ); // -> false\n     *\n     * By using this method it is also possible to check a name of an element:\n     *\n     *\t\timgElement.is( 'img' ); // -> true\n     *\t\timgElement.is( 'element', 'img' ); // -> same as above\n     *\t\timgElement.is( 'view:element', 'img' ); // -> same as above, but more precise\n     *\n     * The list of view objects which implement the `is()` method:\n     *\n     * * {@link module:engine/view/attributeelement~AttributeElement#is `AttributeElement#is()`}\n     * * {@link module:engine/view/containerelement~ContainerElement#is `ContainerElement#is()`}\n     * * {@link module:engine/view/documentfragment~DocumentFragment#is `DocumentFragment#is()`}\n     * * {@link module:engine/view/documentselection~DocumentSelection#is `DocumentSelection#is()`}\n     * * {@link module:engine/view/editableelement~EditableElement#is `EditableElement#is()`}\n     * * {@link module:engine/view/element~Element#is `Element#is()`}\n     * * {@link module:engine/view/emptyelement~EmptyElement#is `EmptyElement#is()`}\n     * * {@link module:engine/view/node~Node#is `Node#is()`}\n     * * {@link module:engine/view/position~Position#is `Position#is()`}\n     * * {@link module:engine/view/range~Range#is `Range#is()`}\n     * * {@link module:engine/view/rooteditableelement~RootEditableElement#is `RootEditableElement#is()`}\n     * * {@link module:engine/view/selection~Selection#is `Selection#is()`}\n     * * {@link module:engine/view/text~Text#is `Text#is()`}\n     * * {@link module:engine/view/textproxy~TextProxy#is `TextProxy#is()`}\n     * * {@link module:engine/view/uielement~UIElement#is `UIElement#is()`}\n     *\n     * @method #is\n     * @param {String} type\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'node' || type == 'view:node';\n    }\n\n    /**\n     * Clones this node.\n     *\n     * @protected\n     * @method #_clone\n     * @returns {module:engine/view/node~Node} Clone of this node.\n     */\n\n    /**\n     * Checks if provided node is similar to this node.\n     *\n     * @method #isSimilar\n     * @returns {Boolean} True if nodes are similar.\n     */\n  }]);\n}();\n/**\n * Fired when list of {@link module:engine/view/element~Element elements} children changes.\n *\n * Change event is bubbled – it is fired on all ancestors.\n *\n * @event change:children\n * @param {module:engine/view/node~Node} changedNode\n */\n/**\n * Fired when list of {@link module:engine/view/element~Element elements} attributes changes.\n *\n * Change event is bubbled – it is fired on all ancestors.\n *\n * @event change:attributes\n * @param {module:engine/view/node~Node} changedNode\n */\n/**\n * Fired when {@link module:engine/view/text~Text text nodes} data changes.\n *\n * Change event is bubbled – it is fired on all ancestors.\n *\n * @event change:text\n * @param {module:engine/view/node~Node} changedNode\n */\n/**\n * @event change\n */\nexport { Node as default };\nmix(Node, EmitterMixin);","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/clickobserver\n */\n\nimport DomEventObserver from './domeventobserver';\n\n/**\n * {@link module:engine/view/document~Document#event:click Click} event observer.\n *\n * Note that this observer is not available by default. To make it available it needs to be added to\n * {@link module:engine/view/view~View view controller}\n * by a {@link module:engine/view/view~View#addObserver} method.\n *\n * @extends module:engine/view/observer/domeventobserver~DomEventObserver\n */\nvar ClickObserver = /*#__PURE__*/function (_DomEventObserver) {\n  function ClickObserver(view) {\n    var _this;\n    _classCallCheck(this, ClickObserver);\n    _this = _callSuper(this, ClickObserver, [view]);\n    _this.domEventType = 'click';\n    return _this;\n  }\n  _inherits(ClickObserver, _DomEventObserver);\n  return _createClass(ClickObserver, [{\n    key: \"onDomEvent\",\n    value: function onDomEvent(domEvent) {\n      this.fire(domEvent.type, domEvent);\n    }\n  }]);\n}(DomEventObserver);\n/**\n * Fired when one of the editables has been clicked.\n *\n * Introduced by {@link module:engine/view/observer/clickobserver~ClickObserver}.\n *\n * Note that this event is not available by default. To make it available\n * {@link module:engine/view/observer/clickobserver~ClickObserver} needs to be added\n * to {@link module:engine/view/view~View} by a {@link module:engine/view/view~View#addObserver} method.\n *\n * @see module:engine/view/observer/clickobserver~ClickObserver\n * @event module:engine/view/document~Document#event:click\n * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.\n */\nexport { ClickObserver as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/compositionobserver\n */\n\nimport DomEventObserver from './domeventobserver';\n\n/**\n * {@link module:engine/view/document~Document#event:compositionstart Compositionstart},\n * {@link module:engine/view/document~Document#event:compositionupdate compositionupdate} and\n * {@link module:engine/view/document~Document#event:compositionend compositionend} events observer.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n *\n * @extends module:engine/view/observer/domeventobserver~DomEventObserver\n */\nvar CompositionObserver = /*#__PURE__*/function (_DomEventObserver) {\n  function CompositionObserver(view) {\n    var _this;\n    _classCallCheck(this, CompositionObserver);\n    _this = _callSuper(this, CompositionObserver, [view]);\n    _this.domEventType = ['compositionstart', 'compositionupdate', 'compositionend'];\n    var document = _this.document;\n    document.on('compositionstart', function () {\n      document.isComposing = true;\n    });\n    document.on('compositionend', function () {\n      document.isComposing = false;\n    });\n    return _this;\n  }\n  _inherits(CompositionObserver, _DomEventObserver);\n  return _createClass(CompositionObserver, [{\n    key: \"onDomEvent\",\n    value: function onDomEvent(domEvent) {\n      this.fire(domEvent.type, domEvent);\n    }\n  }]);\n}(DomEventObserver);\n/**\n * Fired when composition starts inside one of the editables.\n *\n * Introduced by {@link module:engine/view/observer/compositionobserver~CompositionObserver}.\n *\n * Note that because {@link module:engine/view/observer/compositionobserver~CompositionObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/compositionobserver~CompositionObserver\n * @event module:engine/view/document~Document#event:compositionstart\n * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.\n */\n/**\n * Fired when composition is updated inside one of the editables.\n *\n * Introduced by {@link module:engine/view/observer/compositionobserver~CompositionObserver}.\n *\n * Note that because {@link module:engine/view/observer/compositionobserver~CompositionObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/compositionobserver~CompositionObserver\n * @event module:engine/view/document~Document#event:compositionupdate\n * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.\n */\n/**\n * Fired when composition ends inside one of the editables.\n *\n * Introduced by {@link module:engine/view/observer/compositionobserver~CompositionObserver}.\n *\n * Note that because {@link module:engine/view/observer/compositionobserver~CompositionObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/compositionobserver~CompositionObserver\n * @event module:engine/view/document~Document#event:compositionend\n * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.\n */\nexport { CompositionObserver as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/domeventdata\n */\n\nimport { extend } from 'lodash-es';\n\n/**\n * Information about a DOM event in context of the {@link module:engine/view/document~Document}.\n * It wraps the native event, which usually should not be used as the wrapper contains\n * additional data (like key code for keyboard events).\n */\nvar DomEventData = /*#__PURE__*/function () {\n  /**\n   * @param {module:engine/view/view~View} view The instance of the view controller.\n   * @param {Event} domEvent The DOM event.\n   * @param {Object} [additionalData] Additional properties that the instance should contain.\n   */\n  function DomEventData(view, domEvent, additionalData) {\n    _classCallCheck(this, DomEventData);\n    /**\n     * Instance of the view controller.\n     *\n     * @readonly\n     * @member {module:engine/view/view~View} module:engine/view/observer/observer~Observer.DomEvent#view\n     */\n    this.view = view;\n\n    /**\n     * The instance of the document.\n     *\n     * @readonly\n     * @member {module:engine/view/document~Document} module:engine/view/observer/observer~Observer.DomEvent#document\n     */\n    this.document = view.document;\n\n    /**\n     * The DOM event.\n     *\n     * @readonly\n     * @member {Event} module:engine/view/observer/observer~Observer.DomEvent#domEvent\n     */\n    this.domEvent = domEvent;\n\n    /**\n     * The DOM target.\n     *\n     * @readonly\n     * @member {HTMLElement} module:engine/view/observer/observer~Observer.DomEvent#target\n     */\n    this.domTarget = domEvent.target;\n    extend(this, additionalData);\n  }\n\n  /**\n   * The tree view element representing the target.\n   *\n   * @readonly\n   * @type module:engine/view/element~Element\n   */\n  return _createClass(DomEventData, [{\n    key: \"target\",\n    get: function get() {\n      return this.view.domConverter.mapDomToView(this.domTarget);\n    }\n\n    /**\n     * Prevents the native's event default action.\n     */\n  }, {\n    key: \"preventDefault\",\n    value: function preventDefault() {\n      this.domEvent.preventDefault();\n    }\n\n    /**\n     * Stops native event propagation.\n     */\n  }, {\n    key: \"stopPropagation\",\n    value: function stopPropagation() {\n      this.domEvent.stopPropagation();\n    }\n  }]);\n}();\nexport { DomEventData as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/domeventobserver\n */\n\nimport Observer from './observer';\nimport DomEventData from './domeventdata';\n\n/**\n * Base class for DOM event observers. This class handles\n * {@link module:engine/view/observer/observer~Observer#observe adding} listeners to DOM elements,\n * {@link module:engine/view/observer/observer~Observer#disable disabling} and\n * {@link module:engine/view/observer/observer~Observer#enable re-enabling} events.\n * Child class needs to define\n * {@link module:engine/view/observer/domeventobserver~DomEventObserver#domEventType DOM event type} and\n * {@link module:engine/view/observer/domeventobserver~DomEventObserver#onDomEvent callback}.\n *\n * For instance:\n *\n *\t\tclass ClickObserver extends DomEventObserver {\n *\t\t\t// It can also be defined as a normal property in the constructor.\n *\t\t\tget domEventType() {\n *\t\t\t\treturn 'click';\n *\t\t\t}\n *\n *\t\t\tonDomEvent( domEvent ) {\n *\t\t\t\tthis.fire( 'click', domEvent );\n *\t\t\t}\n *\t\t}\n *\n * @extends module:engine/view/observer/observer~Observer\n */\nvar DomEventObserver = /*#__PURE__*/function (_Observer) {\n  /**\n   * Type of the DOM event the observer should listen on. Array of types can be defined\n   * if the obsever should listen to multiple DOM events.\n   *\n   * @readonly\n   * @member {String|Array.<String>} #domEventType\n   */\n\n  /**\n   * Callback which should be called when the DOM event occurred. Note that the callback will not be called if\n   * observer {@link #isEnabled is not enabled}.\n   *\n   * @see #domEventType\n   * @abstract\n   * @method #onDomEvent\n   */\n\n  /**\n   * @inheritDoc\n   */\n  function DomEventObserver(view) {\n    var _this;\n    _classCallCheck(this, DomEventObserver);\n    _this = _callSuper(this, DomEventObserver, [view]);\n\n    /**\n     * If set to `true` DOM events will be listened on the capturing phase.\n     * Default value is `false`.\n     *\n     * @member {Boolean}\n     */\n    _this.useCapture = false;\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(DomEventObserver, _Observer);\n  return _createClass(DomEventObserver, [{\n    key: \"observe\",\n    value: function observe(domElement) {\n      var _this2 = this;\n      var types = typeof this.domEventType == 'string' ? [this.domEventType] : this.domEventType;\n      types.forEach(function (type) {\n        _this2.listenTo(domElement, type, function (eventInfo, domEvent) {\n          if (_this2.isEnabled) {\n            _this2.onDomEvent(domEvent);\n          }\n        }, {\n          useCapture: _this2.useCapture\n        });\n      });\n    }\n\n    /**\n     * Calls `Document#fire()` if observer {@link #isEnabled is enabled}.\n     *\n     * @see module:utils/emittermixin~EmitterMixin#fire\n     * @param {String} eventType The event type (name).\n     * @param {Event} domEvent The DOM event.\n     * @param {Object} [additionalData] The additional data which should extend the\n     * {@link module:engine/view/observer/domeventdata~DomEventData event data} object.\n     */\n  }, {\n    key: \"fire\",\n    value: function fire(eventType, domEvent, additionalData) {\n      if (this.isEnabled) {\n        this.document.fire(eventType, new DomEventData(this.view, domEvent, additionalData));\n      }\n    }\n  }]);\n}(Observer);\nexport { DomEventObserver as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/fakeselectionobserver\n */\n\nimport Observer from './observer';\nimport ViewSelection from '../selection';\nimport { keyCodes } from '@ckeditor/ckeditor5-utils/src/keyboard';\nimport { debounce } from 'lodash-es';\n\n/**\n * Fake selection observer class. If view selection is fake it is placed in dummy DOM container. This observer listens\n * on {@link module:engine/view/document~Document#event:keydown keydown} events and handles moving fake view selection to the correct place\n * if arrow keys are pressed.\n * Fires {@link module:engine/view/document~Document#event:selectionChange selectionChange event} simulating natural behaviour of\n * {@link module:engine/view/observer/selectionobserver~SelectionObserver SelectionObserver}.\n *\n * @extends module:engine/view/observer/observer~Observer\n */\nvar FakeSelectionObserver = /*#__PURE__*/function (_Observer) {\n  /**\n   * Creates new FakeSelectionObserver instance.\n   *\n   * @param {module:engine/view/view~View} view\n   */\n  function FakeSelectionObserver(view) {\n    var _this;\n    _classCallCheck(this, FakeSelectionObserver);\n    _this = _callSuper(this, FakeSelectionObserver, [view]);\n\n    /**\n     * Fires debounced event `selectionChangeDone`. It uses `lodash#debounce` method to delay function call.\n     *\n     * @private\n     * @param {Object} data Selection change data.\n     * @method #_fireSelectionChangeDoneDebounced\n     */\n    _this._fireSelectionChangeDoneDebounced = debounce(function (data) {\n      return _this.document.fire('selectionChangeDone', data);\n    }, 200);\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(FakeSelectionObserver, _Observer);\n  return _createClass(FakeSelectionObserver, [{\n    key: \"observe\",\n    value: function observe() {\n      var _this2 = this;\n      var document = this.document;\n      document.on('keydown', function (eventInfo, data) {\n        var selection = document.selection;\n        if (selection.isFake && _isArrowKeyCode(data.keyCode) && _this2.isEnabled) {\n          // Prevents default key down handling - no selection change will occur.\n          data.preventDefault();\n          _this2._handleSelectionMove(data.keyCode);\n        }\n      }, {\n        priority: 'lowest'\n      });\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _superPropGet(FakeSelectionObserver, \"destroy\", this, 3)([]);\n      this._fireSelectionChangeDoneDebounced.cancel();\n    }\n\n    /**\n     * Handles collapsing view selection according to given key code. If left or up key is provided - new selection will be\n     * collapsed to left. If right or down key is pressed - new selection will be collapsed to right.\n     *\n     * This method fires {@link module:engine/view/document~Document#event:selectionChange} and\n     * {@link module:engine/view/document~Document#event:selectionChangeDone} events imitating behaviour of\n     * {@link module:engine/view/observer/selectionobserver~SelectionObserver}.\n     *\n     * @private\n     * @param {Number} keyCode\n     * @fires module:engine/view/document~Document#event:selectionChange\n     * @fires module:engine/view/document~Document#event:selectionChangeDone\n     */\n  }, {\n    key: \"_handleSelectionMove\",\n    value: function _handleSelectionMove(keyCode) {\n      var selection = this.document.selection;\n      var newSelection = new ViewSelection(selection.getRanges(), {\n        backward: selection.isBackward,\n        fake: false\n      });\n\n      // Left or up arrow pressed - move selection to start.\n      if (keyCode == keyCodes.arrowleft || keyCode == keyCodes.arrowup) {\n        newSelection.setTo(newSelection.getFirstPosition());\n      }\n\n      // Right or down arrow pressed - move selection to end.\n      if (keyCode == keyCodes.arrowright || keyCode == keyCodes.arrowdown) {\n        newSelection.setTo(newSelection.getLastPosition());\n      }\n      var data = {\n        oldSelection: selection,\n        newSelection: newSelection,\n        domSelection: null\n      };\n\n      // Fire dummy selection change event.\n      this.document.fire('selectionChange', data);\n\n      // Call` #_fireSelectionChangeDoneDebounced` every time when `selectionChange` event is fired.\n      // This function is debounced what means that `selectionChangeDone` event will be fired only when\n      // defined int the function time will elapse since the last time the function was called.\n      // So `selectionChangeDone` will be fired when selection will stop changing.\n      this._fireSelectionChangeDoneDebounced(data);\n    }\n  }]);\n}(Observer); // Checks if one of the arrow keys is pressed.\n//\n// @private\n// @param {Number} keyCode\n// @returns {Boolean}\nexport { FakeSelectionObserver as default };\nfunction _isArrowKeyCode(keyCode) {\n  return keyCode == keyCodes.arrowright || keyCode == keyCodes.arrowleft || keyCode == keyCodes.arrowup || keyCode == keyCodes.arrowdown;\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/focusobserver\n */\n\n/* globals setTimeout, clearTimeout */\n\nimport DomEventObserver from './domeventobserver';\n\n/**\n * {@link module:engine/view/document~Document#event:focus Focus}\n * and {@link module:engine/view/document~Document#event:blur blur} events observer.\n * Focus observer handle also {@link module:engine/view/rooteditableelement~RootEditableElement#isFocused isFocused} property of the\n * {@link module:engine/view/rooteditableelement~RootEditableElement root elements}.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n *\n * @extends module:engine/view/observer/domeventobserver~DomEventObserver\n */\nvar FocusObserver = /*#__PURE__*/function (_DomEventObserver) {\n  function FocusObserver(view) {\n    var _this;\n    _classCallCheck(this, FocusObserver);\n    _this = _callSuper(this, FocusObserver, [view]);\n    _this.domEventType = ['focus', 'blur'];\n    _this.useCapture = true;\n    var document = _this.document;\n    document.on('focus', function () {\n      document.isFocused = true;\n\n      // Unfortunately native `selectionchange` event is fired asynchronously.\n      // We need to wait until `SelectionObserver` handle the event and then render. Otherwise rendering will\n      // overwrite new DOM selection with selection from the view.\n      // See https://github.com/ckeditor/ckeditor5-engine/issues/795 for more details.\n      // Long timeout is needed to solve #676 and https://github.com/ckeditor/ckeditor5-engine/issues/1157 issues.\n      _this._renderTimeoutId = setTimeout(function () {\n        return view.forceRender();\n      }, 50);\n    });\n    document.on('blur', function (evt, data) {\n      var selectedEditable = document.selection.editableElement;\n      if (selectedEditable === null || selectedEditable === data.target) {\n        document.isFocused = false;\n\n        // Re-render the document to update view elements.\n        view.forceRender();\n      }\n    });\n\n    /**\n     * Identifier of the timeout currently used by focus listener to delay rendering execution.\n     *\n     * @private\n     * @member {Number} #_renderTimeoutId\n     */\n    return _this;\n  }\n  _inherits(FocusObserver, _DomEventObserver);\n  return _createClass(FocusObserver, [{\n    key: \"onDomEvent\",\n    value: function onDomEvent(domEvent) {\n      this.fire(domEvent.type, domEvent);\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this._renderTimeoutId) {\n        clearTimeout(this._renderTimeoutId);\n      }\n      _superPropGet(FocusObserver, \"destroy\", this, 3)([]);\n    }\n  }]);\n}(DomEventObserver);\n/**\n * Fired when one of the editables gets focus.\n *\n * Introduced by {@link module:engine/view/observer/focusobserver~FocusObserver}.\n *\n * Note that because {@link module:engine/view/observer/focusobserver~FocusObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/focusobserver~FocusObserver\n * @event module:engine/view/document~Document#event:focus\n * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.\n */\n/**\n * Fired when one of the editables loses focus.\n *\n * Introduced by {@link module:engine/view/observer/focusobserver~FocusObserver}.\n *\n * Note that because {@link module:engine/view/observer/focusobserver~FocusObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/focusobserver~FocusObserver\n * @event module:engine/view/document~Document#event:blur\n * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.\n */\nexport { FocusObserver as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md.\n */\n\n/**\n * @module engine/view/observer/inputobserver\n */\n\nimport DomEventObserver from './domeventobserver';\n\n/**\n * Observer for events connected with data input.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n *\n * @extends module:engine/view/observer/domeventobserver~DomEventObserver\n */\nvar InputObserver = /*#__PURE__*/function (_DomEventObserver) {\n  function InputObserver(view) {\n    var _this;\n    _classCallCheck(this, InputObserver);\n    _this = _callSuper(this, InputObserver, [view]);\n    _this.domEventType = ['beforeinput'];\n    return _this;\n  }\n  _inherits(InputObserver, _DomEventObserver);\n  return _createClass(InputObserver, [{\n    key: \"onDomEvent\",\n    value: function onDomEvent(domEvent) {\n      this.fire(domEvent.type, domEvent);\n    }\n  }]);\n}(DomEventObserver);\n/**\n * Fired before browser inputs (or deletes) some data.\n *\n * This event is available only on browsers which support DOM `beforeinput` event.\n *\n * Introduced by {@link module:engine/view/observer/inputobserver~InputObserver}.\n *\n * Note that because {@link module:engine/view/observer/inputobserver~InputObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/inputobserver~InputObserver\n * @event module:engine/view/document~Document#event:beforeinput\n * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.\n */\nexport { InputObserver as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/keyobserver\n */\n\nimport DomEventObserver from './domeventobserver';\nimport { getCode } from '@ckeditor/ckeditor5-utils/src/keyboard';\n\n/**\n * Observer for events connected with pressing keyboard keys.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n *\n * @extends module:engine/view/observer/domeventobserver~DomEventObserver\n */\nvar KeyObserver = /*#__PURE__*/function (_DomEventObserver) {\n  function KeyObserver(view) {\n    var _this;\n    _classCallCheck(this, KeyObserver);\n    _this = _callSuper(this, KeyObserver, [view]);\n    _this.domEventType = ['keydown', 'keyup'];\n    return _this;\n  }\n  _inherits(KeyObserver, _DomEventObserver);\n  return _createClass(KeyObserver, [{\n    key: \"onDomEvent\",\n    value: function onDomEvent(domEvt) {\n      this.fire(domEvt.type, domEvt, {\n        keyCode: domEvt.keyCode,\n        altKey: domEvt.altKey,\n        ctrlKey: domEvt.ctrlKey || domEvt.metaKey,\n        shiftKey: domEvt.shiftKey,\n        get keystroke() {\n          return getCode(this);\n        }\n      });\n    }\n  }]);\n}(DomEventObserver);\n/**\n * Fired when a key has been pressed.\n *\n * Introduced by {@link module:engine/view/observer/keyobserver~KeyObserver}.\n *\n * Note that because {@link module:engine/view/observer/keyobserver~KeyObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/keyobserver~KeyObserver\n * @event module:engine/view/document~Document#event:keydown\n * @param {module:engine/view/observer/keyobserver~KeyEventData} keyEventData\n */\n/**\n * Fired when a key has been released.\n *\n * Introduced by {@link module:engine/view/observer/keyobserver~KeyObserver}.\n *\n * Note that because {@link module:engine/view/observer/keyobserver~KeyObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/keyobserver~KeyObserver\n * @event module:engine/view/document~Document#event:keyup\n * @param {module:engine/view/observer/keyobserver~KeyEventData} keyEventData\n */\n/**\n * The value of both events - {@link module:engine/view/document~Document#event:keydown} and\n * {@link module:engine/view/document~Document#event:keyup}.\n *\n * @class module:engine/view/observer/keyobserver~KeyEventData\n * @extends module:engine/view/observer/domeventdata~DomEventData\n * @implements module:utils/keyboard~KeystrokeInfo\n */\n/**\n * Code of the whole keystroke. See {@link module:utils/keyboard~getCode}.\n *\n * @readonly\n * @member {Number} module:engine/view/observer/keyobserver~KeyEventData#keystroke\n */\nexport { KeyObserver as default };","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/mutationobserver\n */\n\n/* globals window */\n\nimport Observer from './observer';\nimport ViewSelection from '../selection';\nimport { startsWithFiller, getDataWithoutFiller } from '../filler';\nimport { isEqualWith } from 'lodash-es';\n\n/**\n * Mutation observer class observes changes in the DOM, fires {@link module:engine/view/document~Document#event:mutations} event, mark view\n * elements as changed and call {@link module:engine/view/renderer~Renderer#render}.\n * Because all mutated nodes are marked as \"to be rendered\" and the\n * {@link module:engine/view/renderer~Renderer#render} is called, all changes will be reverted, unless the mutation will be handled by the\n * {@link module:engine/view/document~Document#event:mutations} event listener. It means user will see only handled changes, and the editor\n * will block all changes which are not handled.\n *\n * Mutation Observer also take care of reducing number of mutations which are fired. It removes duplicates and\n * mutations on elements which do not have corresponding view elements. Also\n * {@link module:engine/view/observer/mutationobserver~MutatedText text mutation} is fired only if parent element do not change child list.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n *\n * @extends module:engine/view/observer/observer~Observer\n */\nvar MutationObserver = /*#__PURE__*/function (_Observer) {\n  function MutationObserver(view) {\n    var _this;\n    _classCallCheck(this, MutationObserver);\n    _this = _callSuper(this, MutationObserver, [view]);\n\n    /**\n     * Native mutation observer config.\n     *\n     * @private\n     * @member {Object}\n     */\n    _this._config = {\n      childList: true,\n      characterData: true,\n      characterDataOldValue: true,\n      subtree: true\n    };\n\n    /**\n     * Reference to the {@link module:engine/view/view~View#domConverter}.\n     *\n     * @member {module:engine/view/domconverter~DomConverter}\n     */\n    _this.domConverter = view.domConverter;\n\n    /**\n     * Reference to the {@link module:engine/view/view~View#_renderer}.\n     *\n     * @member {module:engine/view/renderer~Renderer}\n     */\n    _this.renderer = view._renderer;\n\n    /**\n     * Observed DOM elements.\n     *\n     * @private\n     * @member {Array.<HTMLElement>}\n     */\n    _this._domElements = [];\n\n    /**\n     * Native mutation observer.\n     *\n     * @private\n     * @member {MutationObserver}\n     */\n    _this._mutationObserver = new window.MutationObserver(_this._onMutations.bind(_this));\n    return _this;\n  }\n\n  /**\n   * Synchronously fires {@link module:engine/view/document~Document#event:mutations} event with all mutations in record queue.\n   * At the same time empties the queue so mutations will not be fired twice.\n   */\n  _inherits(MutationObserver, _Observer);\n  return _createClass(MutationObserver, [{\n    key: \"flush\",\n    value: function flush() {\n      this._onMutations(this._mutationObserver.takeRecords());\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"observe\",\n    value: function observe(domElement) {\n      this._domElements.push(domElement);\n      if (this.isEnabled) {\n        this._mutationObserver.observe(domElement, this._config);\n      }\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"enable\",\n    value: function enable() {\n      _superPropGet(MutationObserver, \"enable\", this, 3)([]);\n      var _iterator = _createForOfIteratorHelper(this._domElements),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var domElement = _step.value;\n          this._mutationObserver.observe(domElement, this._config);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"disable\",\n    value: function disable() {\n      _superPropGet(MutationObserver, \"disable\", this, 3)([]);\n      this._mutationObserver.disconnect();\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _superPropGet(MutationObserver, \"destroy\", this, 3)([]);\n      this._mutationObserver.disconnect();\n    }\n\n    /**\n     * Handles mutations. Deduplicates, mark view elements to sync, fire event and call render.\n     *\n     * @private\n     * @param {Array.<Object>} domMutations Array of native mutations.\n     */\n  }, {\n    key: \"_onMutations\",\n    value: function _onMutations(domMutations) {\n      // As a result of this.flush() we can have an empty collection.\n      if (domMutations.length === 0) {\n        return;\n      }\n      var domConverter = this.domConverter;\n\n      // Use map and set for deduplication.\n      var mutatedTexts = new Map();\n      var mutatedElements = new Set();\n\n      // Handle `childList` mutations first, so we will be able to check if the `characterData` mutation is in the\n      // element with changed structure anyway.\n      var _iterator2 = _createForOfIteratorHelper(domMutations),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var mutation = _step2.value;\n          if (mutation.type === 'childList') {\n            var element = domConverter.mapDomToView(mutation.target);\n\n            // Do not collect mutations from UIElements.\n            if (element && element.is('uiElement')) {\n              continue;\n            }\n            if (element && !this._isBogusBrMutation(mutation)) {\n              mutatedElements.add(element);\n            }\n          }\n        }\n\n        // Handle `characterData` mutations later, when we have the full list of nodes which changed structure.\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      var _iterator3 = _createForOfIteratorHelper(domMutations),\n        _step3;\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var _mutation = _step3.value;\n          var _element = domConverter.mapDomToView(_mutation.target);\n\n          // Do not collect mutations from UIElements.\n          if (_element && _element.is('uiElement')) {\n            continue;\n          }\n          if (_mutation.type === 'characterData') {\n            var text = domConverter.findCorrespondingViewText(_mutation.target);\n            if (text && !mutatedElements.has(text.parent)) {\n              // Use text as a key, for deduplication. If there will be another mutation on the same text element\n              // we will have only one in the map.\n              mutatedTexts.set(text, {\n                type: 'text',\n                oldText: text.data,\n                newText: getDataWithoutFiller(_mutation.target),\n                node: text\n              });\n            }\n            // When we added first letter to the text node which had only inline filler, for the DOM it is mutation\n            // on text, but for the view, where filler text node did not existed, new text node was created, so we\n            // need to fire 'children' mutation instead of 'text'.\n            else if (!text && startsWithFiller(_mutation.target)) {\n              mutatedElements.add(domConverter.mapDomToView(_mutation.target.parentNode));\n            }\n          }\n        }\n\n        // Now we build the list of mutations to fire and mark elements. We did not do it earlier to avoid marking the\n        // same node multiple times in case of duplication.\n\n        // List of mutations we will fire.\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n      var viewMutations = [];\n      var _iterator4 = _createForOfIteratorHelper(mutatedTexts.values()),\n        _step4;\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var mutatedText = _step4.value;\n          this.renderer.markToSync('text', mutatedText.node);\n          viewMutations.push(mutatedText);\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n      var _iterator5 = _createForOfIteratorHelper(mutatedElements),\n        _step5;\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var viewElement = _step5.value;\n          var domElement = domConverter.mapViewToDom(viewElement);\n          var viewChildren = Array.from(viewElement.getChildren());\n          var newViewChildren = Array.from(domConverter.domChildrenToView(domElement, {\n            withChildren: false\n          }));\n\n          // It may happen that as a result of many changes (sth was inserted and then removed),\n          // both elements haven't really changed. #1031\n          if (!isEqualWith(viewChildren, newViewChildren, sameNodes)) {\n            this.renderer.markToSync('children', viewElement);\n            viewMutations.push({\n              type: 'children',\n              oldChildren: viewChildren,\n              newChildren: newViewChildren,\n              node: viewElement\n            });\n          }\n        }\n\n        // Retrieve `domSelection` using `ownerDocument` of one of mutated nodes.\n        // There should not be simultaneous mutation in multiple documents, so it's fine.\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n      var domSelection = domMutations[0].target.ownerDocument.getSelection();\n      var viewSelection = null;\n      if (domSelection && domSelection.anchorNode) {\n        // If `domSelection` is inside a dom node that is already bound to a view node from view tree, get\n        // corresponding selection in the view and pass it together with `viewMutations`. The `viewSelection` may\n        // be used by features handling mutations.\n        // Only one range is supported.\n\n        var viewSelectionAnchor = domConverter.domPositionToView(domSelection.anchorNode, domSelection.anchorOffset);\n        var viewSelectionFocus = domConverter.domPositionToView(domSelection.focusNode, domSelection.focusOffset);\n\n        // Anchor and focus has to be properly mapped to view.\n        if (viewSelectionAnchor && viewSelectionFocus) {\n          viewSelection = new ViewSelection(viewSelectionAnchor);\n          viewSelection.setFocus(viewSelectionFocus);\n        }\n      }\n      this.document.fire('mutations', viewMutations, viewSelection);\n\n      // If nothing changes on `mutations` event, at this point we have \"dirty DOM\" (changed) and de-synched\n      // view (which has not been changed). In order to \"reset DOM\" we render the view again.\n      this.view.forceRender();\n      function sameNodes(child1, child2) {\n        // First level of comparison (array of children vs array of children) – use the Lodash's default behavior.\n        if (Array.isArray(child1)) {\n          return;\n        }\n\n        // Elements.\n        if (child1 === child2) {\n          return true;\n        }\n        // Texts.\n        else if (child1.is('text') && child2.is('text')) {\n          return child1.data === child2.data;\n        }\n\n        // Not matching types.\n        return false;\n      }\n    }\n\n    /**\n     * Checks if mutation was generated by the browser inserting bogus br on the end of the block element.\n     * Such mutations are generated while pressing space or performing native spellchecker correction\n     * on the end of the block element in Firefox browser.\n     *\n     * @private\n     * @param {Object} mutation Native mutation object.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"_isBogusBrMutation\",\n    value: function _isBogusBrMutation(mutation) {\n      var addedNode = null;\n\n      // Check if mutation added only one node on the end of its parent.\n      if (mutation.nextSibling === null && mutation.removedNodes.length === 0 && mutation.addedNodes.length == 1) {\n        addedNode = this.domConverter.domToView(mutation.addedNodes[0], {\n          withChildren: false\n        });\n      }\n      return addedNode && addedNode.is('element', 'br');\n    }\n  }]);\n}(Observer);\n/**\n * Fired when mutation occurred. If tree view is not changed on this event, DOM will be reverted to the state before\n * mutation, so all changes which should be applied, should be handled on this event.\n *\n * Introduced by {@link module:engine/view/observer/mutationobserver~MutationObserver}.\n *\n * Note that because {@link module:engine/view/observer/mutationobserver~MutationObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/mutationobserver~MutationObserver\n * @event module:engine/view/document~Document#event:mutations\n * @param {Array.<module:engine/view/observer/mutationobserver~MutatedText|module:engine/view/observer/mutationobserver~MutatedChildren>}\n * viewMutations Array of mutations.\n * For mutated texts it will be {@link module:engine/view/observer/mutationobserver~MutatedText} and for mutated elements it will be\n * {@link module:engine/view/observer/mutationobserver~MutatedChildren}. You can recognize the type based on the `type` property.\n * @param {module:engine/view/selection~Selection|null} viewSelection View selection that is a result of converting DOM selection to view.\n * Keep in\n * mind that the DOM selection is already \"updated\", meaning that it already acknowledges changes done in mutation.\n */\n/**\n * Mutation item for text.\n *\n * @see module:engine/view/document~Document#event:mutations\n * @see module:engine/view/observer/mutationobserver~MutatedChildren\n *\n * @typedef {Object} module:engine/view/observer/mutationobserver~MutatedText\n *\n * @property {String} type For text mutations it is always 'text'.\n * @property {module:engine/view/text~Text} node Mutated text node.\n * @property {String} oldText Old text.\n * @property {String} newText New text.\n */\n/**\n * Mutation item for child nodes.\n *\n * @see module:engine/view/document~Document#event:mutations\n * @see module:engine/view/observer/mutationobserver~MutatedText\n *\n * @typedef {Object} module:engine/view/observer/mutationobserver~MutatedChildren\n *\n * @property {String} type For child nodes mutations it is always 'children'.\n * @property {module:engine/view/element~Element} node Parent of the mutated children.\n * @property {Array.<module:engine/view/node~Node>} oldChildren Old child nodes.\n * @property {Array.<module:engine/view/node~Node>} newChildren New child nodes.\n */\nexport { MutationObserver as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/observer\n */\n\nimport DomEmitterMixin from '@ckeditor/ckeditor5-utils/src/dom/emittermixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\n\n/**\n * Abstract base observer class. Observers are classes which listen to DOM events, do the preliminary\n * processing and fire events on the {@link module:engine/view/document~Document} objects.\n * Observers can also add features to the view, for instance by updating its status or marking elements\n * which need refresh on DOM events.\n *\n * @abstract\n */\nvar Observer = /*#__PURE__*/function () {\n  /**\n   * Creates an instance of the observer.\n   *\n   * @param {module:engine/view/view~View} view\n   */\n  function Observer(view) {\n    _classCallCheck(this, Observer);\n    /**\n     * Instance of the view controller.\n     *\n     * @readonly\n     * @member {module:engine/view/view~View}\n     */\n    this.view = view;\n\n    /**\n     * Reference to the {@link module:engine/view/document~Document} object.\n     *\n     * @readonly\n     * @member {module:engine/view/document~Document}\n     */\n    this.document = view.document;\n\n    /**\n     * State of the observer. If it is disabled events will not be fired.\n     *\n     * @readonly\n     * @member {Boolean}\n     */\n    this.isEnabled = false;\n  }\n\n  /**\n   * Enables the observer. This method is called when the observer is registered to the\n   * {@link module:engine/view/view~View} and after {@link module:engine/view/view~View#forceRender rendering}\n   * (all observers are {@link #disable disabled} before rendering).\n   *\n   * A typical use case for disabling observers is that mutation observers need to be disabled for the rendering.\n   * However, a child class may not need to be disabled, so it can implement an empty method.\n   *\n   * @see module:engine/view/observer/observer~Observer#disable\n   */\n  return _createClass(Observer, [{\n    key: \"enable\",\n    value: function enable() {\n      this.isEnabled = true;\n    }\n\n    /**\n     * Disables the observer. This method is called before\n     * {@link module:engine/view/view~View#forceRender rendering} to prevent firing events during rendering.\n     *\n     * @see module:engine/view/observer/observer~Observer#enable\n     */\n  }, {\n    key: \"disable\",\n    value: function disable() {\n      this.isEnabled = false;\n    }\n\n    /**\n     * Disables and destroys the observer, among others removes event listeners created by the observer.\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.disable();\n      this.stopListening();\n    }\n\n    /**\n     * Starts observing the given root element.\n     *\n     * @method #observe\n     * @param {HTMLElement} domElement\n     * @param {String} name The name of the root element.\n     */\n  }]);\n}();\nexport { Observer as default };\nmix(Observer, DomEmitterMixin);","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-set.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/selectionobserver\n */\n\n/* global setInterval, clearInterval */\n\nimport Observer from './observer';\nimport MutationObserver from './mutationobserver';\nimport { debounce } from 'lodash-es';\n\n/**\n * Selection observer class observes selection changes in the document. If selection changes on the document this\n * observer checks if there are any mutations and if DOM selection is different than the\n * {@link module:engine/view/document~Document#selection view selection}. Selection observer fires\n * {@link module:engine/view/document~Document#event:selectionChange} event only if selection change was the only change in the document\n * and DOM selection is different then the view selection.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n *\n * @see module:engine/view/observer/mutationobserver~MutationObserver\n * @extends module:engine/view/observer/observer~Observer\n */\nvar SelectionObserver = /*#__PURE__*/function (_Observer) {\n  function SelectionObserver(view) {\n    var _this;\n    _classCallCheck(this, SelectionObserver);\n    _this = _callSuper(this, SelectionObserver, [view]);\n\n    /**\n     * Instance of the mutation observer. Selection observer calls\n     * {@link module:engine/view/observer/mutationobserver~MutationObserver#flush} to ensure that the mutations will be handled\n     * before the {@link module:engine/view/document~Document#event:selectionChange} event is fired.\n     *\n     * @readonly\n     * @member {module:engine/view/observer/mutationobserver~MutationObserver}\n     * module:engine/view/observer/selectionobserver~SelectionObserver#mutationObserver\n     */\n    _this.mutationObserver = view.getObserver(MutationObserver);\n\n    /**\n     * Reference to the view {@link module:engine/view/documentselection~DocumentSelection} object used to compare\n     * new selection with it.\n     *\n     * @readonly\n     * @member {module:engine/view/documentselection~DocumentSelection}\n     * module:engine/view/observer/selectionobserver~SelectionObserver#selection\n     */\n    _this.selection = _this.document.selection;\n\n    /* eslint-disable max-len */\n    /**\n     * Reference to the {@link module:engine/view/view~View#domConverter}.\n     *\n     * @readonly\n     * @member {module:engine/view/domconverter~DomConverter} module:engine/view/observer/selectionobserver~SelectionObserver#domConverter\n     */\n    /* eslint-enable max-len */\n    _this.domConverter = view.domConverter;\n\n    /**\n     * Set of documents which have added \"selectionchange\" listener to avoid adding listener twice to the same\n     * document.\n     *\n     * @private\n     * @member {WeakSet.<Document>} module:engine/view/observer/selectionobserver~SelectionObserver#_documents\n     */\n    _this._documents = new WeakSet();\n\n    /**\n     * Fires debounced event `selectionChangeDone`. It uses `lodash#debounce` method to delay function call.\n     *\n     * @private\n     * @param {Object} data Selection change data.\n     * @method #_fireSelectionChangeDoneDebounced\n     */\n    _this._fireSelectionChangeDoneDebounced = debounce(function (data) {\n      return _this.document.fire('selectionChangeDone', data);\n    }, 200);\n    _this._clearInfiniteLoopInterval = setInterval(function () {\n      return _this._clearInfiniteLoop();\n    }, 1000);\n\n    /**\n     * Private property to check if the code does not enter infinite loop.\n     *\n     * @private\n     * @member {Number} module:engine/view/observer/selectionobserver~SelectionObserver#_loopbackCounter\n     */\n    _this._loopbackCounter = 0;\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(SelectionObserver, _Observer);\n  return _createClass(SelectionObserver, [{\n    key: \"observe\",\n    value: function observe(domElement) {\n      var _this2 = this;\n      var domDocument = domElement.ownerDocument;\n\n      // Add listener once per each document.\n      if (this._documents.has(domDocument)) {\n        return;\n      }\n      this.listenTo(domDocument, 'selectionchange', function () {\n        _this2._handleSelectionChange(domDocument);\n      });\n      this._documents.add(domDocument);\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _superPropGet(SelectionObserver, \"destroy\", this, 3)([]);\n      clearInterval(this._clearInfiniteLoopInterval);\n      this._fireSelectionChangeDoneDebounced.cancel();\n    }\n\n    /**\n     * Selection change listener. {@link module:engine/view/observer/mutationobserver~MutationObserver#flush Flush} mutations, check if\n     * selection changes and fires {@link module:engine/view/document~Document#event:selectionChange} event on every change\n     * and {@link module:engine/view/document~Document#event:selectionChangeDone} when selection stop changing.\n     *\n     * @private\n     * @param {Document} domDocument DOM document.\n     */\n  }, {\n    key: \"_handleSelectionChange\",\n    value: function _handleSelectionChange(domDocument) {\n      // Selection is handled when document is not focused but is read-only. This is because in read-only\n      // mode contenteditable is set as false and editor won't receive focus but we still need to know\n      // selection position.\n      if (!this.isEnabled || !this.document.isFocused && !this.document.isReadOnly) {\n        return;\n      }\n\n      // Ensure the mutation event will be before selection event on all browsers.\n      this.mutationObserver.flush();\n\n      // If there were mutations then the view will be re-rendered by the mutation observer and selection\n      // will be updated, so selections will equal and event will not be fired, as expected.\n      var domSelection = domDocument.defaultView.getSelection();\n      var newViewSelection = this.domConverter.domSelectionToView(domSelection);\n      if (this.selection.isEqual(newViewSelection) && this.domConverter.isDomSelectionCorrect(domSelection)) {\n        return;\n      }\n\n      // Ensure we are not in the infinite loop (#400).\n      // This counter is reset each second. 60 selection changes in 1 second is enough high number\n      // to be very difficult (impossible) to achieve using just keyboard keys (during normal editor use).\n      if (++this._loopbackCounter > 60) {\n        // Selection change observer detected an infinite rendering loop.\n        // Most probably you try to put the selection in the position which is not allowed\n        // by the browser and browser fixes it automatically what causes `selectionchange` event on\n        // which a loopback through a model tries to re-render the wrong selection and again.\n        //\n        // @if CK_DEBUG // console.warn( 'Selection change observer detected an infinite rendering loop.' );\n\n        return;\n      }\n      if (this.selection.isSimilar(newViewSelection)) {\n        // If selection was equal and we are at this point of algorithm, it means that it was incorrect.\n        // Just re-render it, no need to fire any events, etc.\n        this.view.forceRender();\n      } else {\n        var data = {\n          oldSelection: this.selection,\n          newSelection: newViewSelection,\n          domSelection: domSelection\n        };\n\n        // Prepare data for new selection and fire appropriate events.\n        this.document.fire('selectionChange', data);\n\n        // Call` #_fireSelectionChangeDoneDebounced` every time when `selectionChange` event is fired.\n        // This function is debounced what means that `selectionChangeDone` event will be fired only when\n        // defined int the function time will elapse since the last time the function was called.\n        // So `selectionChangeDone` will be fired when selection will stop changing.\n        this._fireSelectionChangeDoneDebounced(data);\n      }\n    }\n\n    /**\n     * Clears `SelectionObserver` internal properties connected with preventing infinite loop.\n     *\n     * @protected\n     */\n  }, {\n    key: \"_clearInfiniteLoop\",\n    value: function _clearInfiniteLoop() {\n      this._loopbackCounter = 0;\n    }\n  }]);\n}(Observer);\n/**\n * Fired when selection has changed. This event is fired only when the selection change was the only change that happened\n * in the document, and old selection is different then the new selection.\n *\n * Introduced by {@link module:engine/view/observer/selectionobserver~SelectionObserver}.\n *\n * Note that because {@link module:engine/view/observer/selectionobserver~SelectionObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/selectionobserver~SelectionObserver\n * @event module:engine/view/document~Document#event:selectionChange\n * @param {Object} data\n * @param {module:engine/view/documentselection~DocumentSelection} data.oldSelection Old View selection which is\n * {@link module:engine/view/document~Document#selection}.\n * @param {module:engine/view/selection~Selection} data.newSelection New View selection which is converted DOM selection.\n * @param {Selection} data.domSelection Native DOM selection.\n */\n/**\n * Fired when selection stops changing.\n *\n * Introduced by {@link module:engine/view/observer/selectionobserver~SelectionObserver}.\n *\n * Note that because {@link module:engine/view/observer/selectionobserver~SelectionObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/selectionobserver~SelectionObserver\n * @event module:engine/view/document~Document#event:selectionChangeDone\n * @param {Object} data\n * @param {module:engine/view/documentselection~DocumentSelection} data.oldSelection Old View selection which is\n * {@link module:engine/view/document~Document#selection}.\n * @param {module:engine/view/selection~Selection} data.newSelection New View selection which is converted DOM selection.\n * @param {Selection} data.domSelection Native DOM selection.\n */\nexport { SelectionObserver as default };","import _slicedToArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.anchor.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/placeholder\n */\n\nimport '../../theme/placeholder.css';\n\n// Each document stores information about its placeholder elements and check functions.\nvar documentPlaceholders = new WeakMap();\n\n/**\n * A helper that enables a placeholder on the provided view element (also updates its visibility).\n * The placeholder is a CSS pseudo–element (with a text content) attached to the element.\n *\n * To change the placeholder text, simply call this method again with new options.\n *\n * To disable the placeholder, use {@link module:engine/view/placeholder~disablePlaceholder `disablePlaceholder()`} helper.\n *\n * @param {Object} [options] Configuration options of the placeholder.\n * @param {module:engine/view/view~View} options.view Editing view instance.\n * @param {module:engine/view/element~Element} options.element Element that will gain a placeholder.\n * See `options.isDirectHost` to learn more.\n * @param {String} options.text Placeholder text.\n * @param {Boolean} [options.isDirectHost=true] If set `false`, the placeholder will not be enabled directly\n * in the passed `element` but in one of its children (selected automatically, i.e. a first empty child element).\n * Useful when attaching placeholders to elements that can host other elements (not just text), for instance,\n * editable root elements.\n */\nexport function enablePlaceholder(options) {\n  var view = options.view,\n    element = options.element,\n    text = options.text,\n    _options$isDirectHost = options.isDirectHost,\n    isDirectHost = _options$isDirectHost === void 0 ? true : _options$isDirectHost;\n  var doc = view.document;\n\n  // Use a single a single post fixer per—document to update all placeholders.\n  if (!documentPlaceholders.has(doc)) {\n    documentPlaceholders.set(doc, new Map());\n\n    // If a post-fixer callback makes a change, it should return `true` so other post–fixers\n    // can re–evaluate the document again.\n    doc.registerPostFixer(function (writer) {\n      return updateDocumentPlaceholders(doc, writer);\n    });\n  }\n\n  // Store information about the element placeholder under its document.\n  documentPlaceholders.get(doc).set(element, {\n    text: text,\n    isDirectHost: isDirectHost\n  });\n\n  // Update the placeholders right away.\n  view.change(function (writer) {\n    return updateDocumentPlaceholders(doc, writer);\n  });\n}\n\n/**\n * Disables the placeholder functionality from a given element.\n *\n * See {@link module:engine/view/placeholder~enablePlaceholder `enablePlaceholder()`} to learn more.\n *\n * @param {module:engine/view/view~View} view\n * @param {module:engine/view/element~Element} element\n */\nexport function disablePlaceholder(view, element) {\n  var doc = element.document;\n  view.change(function (writer) {\n    if (!documentPlaceholders.has(doc)) {\n      return;\n    }\n    var placeholders = documentPlaceholders.get(doc);\n    var config = placeholders.get(element);\n    writer.removeAttribute('data-placeholder', config.hostElement);\n    hidePlaceholder(writer, config.hostElement);\n    placeholders.delete(element);\n  });\n}\n\n/**\n * Shows a placeholder in the provided element by changing related attributes and CSS classes.\n *\n * **Note**: This helper will not update the placeholder visibility nor manage the\n * it in any way in the future. What it does is a one–time state change of an element. Use\n * {@link module:engine/view/placeholder~enablePlaceholder `enablePlaceholder()`} and\n * {@link module:engine/view/placeholder~disablePlaceholder `disablePlaceholder()`} for full\n * placeholder functionality.\n *\n * **Note**: This helper will blindly show the placeholder directly in the root editable element if\n * one is passed, which could result in a visual clash if the editable element has some children\n * (for instance, an empty paragraph). Use {@link module:engine/view/placeholder~enablePlaceholder `enablePlaceholder()`}\n * in that case or make sure the correct element is passed to the helper.\n *\n * @param {module:engine/view/downcastwriter~DowncastWriter} writer\n * @param {module:engine/view/element~Element} element\n * @returns {Boolean} `true`, if any changes were made to the `element`.\n */\nexport function showPlaceholder(writer, element) {\n  if (!element.hasClass('ck-placeholder')) {\n    writer.addClass('ck-placeholder', element);\n    return true;\n  }\n  return false;\n}\n\n/**\n * Hides a placeholder in the element by changing related attributes and CSS classes.\n *\n * **Note**: This helper will not update the placeholder visibility nor manage the\n * it in any way in the future. What it does is a one–time state change of an element. Use\n * {@link module:engine/view/placeholder~enablePlaceholder `enablePlaceholder()`} and\n * {@link module:engine/view/placeholder~disablePlaceholder `disablePlaceholder()`} for full\n * placeholder functionality.\n *\n * @param {module:engine/view/downcastwriter~DowncastWriter} writer\n * @param {module:engine/view/element~Element} element\n * @returns {Boolean} `true`, if any changes were made to the `element`.\n */\nexport function hidePlaceholder(writer, element) {\n  if (element.hasClass('ck-placeholder')) {\n    writer.removeClass('ck-placeholder', element);\n    return true;\n  }\n  return false;\n}\n\n/**\n * Checks if a placeholder should be displayed in the element.\n *\n * **Note**: This helper will blindly check the possibility of showing a placeholder directly in the\n * root editable element if one is passed, which may not be the expected result. If an element can\n * host other elements (not just text), most likely one of its children should be checked instead\n * because it will be the final host for the placeholder. Use\n * {@link module:engine/view/placeholder~enablePlaceholder `enablePlaceholder()`} in that case or make\n * sure the correct element is passed to the helper.\n *\n * @param {module:engine/view/element~Element} element\n * @returns {Boolean}\n */\nexport function needsPlaceholder(element) {\n  var doc = element.document;\n\n  // The element was removed from document.\n  if (!doc) {\n    return false;\n  }\n\n  // The element is empty only as long as it contains nothing but uiElements.\n  var isEmptyish = !Array.from(element.getChildren()).some(function (element) {\n    return !element.is('uiElement');\n  });\n\n  // If the element is empty and the document is blurred.\n  if (!doc.isFocused && isEmptyish) {\n    return true;\n  }\n  var viewSelection = doc.selection;\n  var selectionAnchor = viewSelection.anchor;\n\n  // If document is focused and the element is empty but the selection is not anchored inside it.\n  if (isEmptyish && selectionAnchor && selectionAnchor.parent !== element) {\n    return true;\n  }\n  return false;\n}\n\n// Updates all placeholders associated with a document in a post–fixer callback.\n//\n// @private\n// @param { module:engine/view/document~Document} doc\n// @param {module:engine/view/downcastwriter~DowncastWriter} writer\n// @returns {Boolean} True if any changes were made to the view document.\nfunction updateDocumentPlaceholders(doc, writer) {\n  var placeholders = documentPlaceholders.get(doc);\n  var wasViewModified = false;\n  var _iterator = _createForOfIteratorHelper(placeholders),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var _step$value = _slicedToArray(_step.value, 2),\n        element = _step$value[0],\n        config = _step$value[1];\n      if (updatePlaceholder(writer, element, config)) {\n        wasViewModified = true;\n      }\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  return wasViewModified;\n}\n\n// Updates a single placeholder in a post–fixer callback.\n//\n// @private\n// @param {module:engine/view/downcastwriter~DowncastWriter} writer\n// @param {module:engine/view/element~Element} element\n// @param {Object} config Configuration of the placeholder\n// @param {String} config.text\n// @param {Boolean} config.isDirectHost\n// @returns {Boolean} True if any changes were made to the view document.\nfunction updatePlaceholder(writer, element, config) {\n  var text = config.text,\n    isDirectHost = config.isDirectHost;\n  var hostElement = isDirectHost ? element : getChildPlaceholderHostSubstitute(element);\n  var wasViewModified = false;\n\n  // When not a direct host, it could happen that there is no child element\n  // capable of displaying a placeholder.\n  if (!hostElement) {\n    return false;\n  }\n\n  // Cache the host element. It will be necessary for disablePlaceholder() to know\n  // which element should have class and attribute removed because, depending on\n  // the config.isDirectHost value, it could be the element or one of its descendants.\n  config.hostElement = hostElement;\n\n  // This may be necessary when updating the placeholder text to something else.\n  if (hostElement.getAttribute('data-placeholder') !== text) {\n    writer.setAttribute('data-placeholder', text, hostElement);\n    wasViewModified = true;\n  }\n  if (needsPlaceholder(hostElement)) {\n    if (showPlaceholder(writer, hostElement)) {\n      wasViewModified = true;\n    }\n  } else if (hidePlaceholder(writer, hostElement)) {\n    wasViewModified = true;\n  }\n  return wasViewModified;\n}\n\n// Gets a child element capable of displaying a placeholder if a parent element can host more\n// than just text (for instance, when it is a root editable element). The child element\n// can then be used in other placeholder helpers as a substitute of its parent.\n//\n// @private\n// @param {module:engine/view/element~Element} parent\n// @returns {module:engine/view/element~Element|null}\nfunction getChildPlaceholderHostSubstitute(parent) {\n  if (parent.childCount === 1) {\n    var firstChild = parent.getChild(0);\n    if (firstChild.is('element') && !firstChild.is('uiElement')) {\n      return firstChild;\n    }\n  }\n  return null;\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.push.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/position\n */\n\nimport TreeWalker from './treewalker';\nimport compareArrays from '@ckeditor/ckeditor5-utils/src/comparearrays';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport EditableElement from './editableelement';\n\n// To check if component is loaded more than once.\nimport '@ckeditor/ckeditor5-utils/src/version';\n\n/**\n * Position in the view tree. Position is represented by its parent node and an offset in this parent.\n *\n * In order to create a new position instance use the `createPosition*()` factory methods available in:\n *\n * * {@link module:engine/view/view~View}\n * * {@link module:engine/view/downcastwriter~DowncastWriter}\n * * {@link module:engine/view/upcastwriter~UpcastWriter}\n */\nvar Position = /*#__PURE__*/function () {\n  /**\n   * Creates a position.\n   *\n   * @param {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment} parent Position parent.\n   * @param {Number} offset Position offset.\n   */\n  function Position(parent, offset) {\n    _classCallCheck(this, Position);\n    /**\n     * Position parent.\n     *\n     * @readonly\n     * @member {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment}\n     * module:engine/view/position~Position#parent\n     */\n    this.parent = parent;\n\n    /**\n     * Position offset.\n     *\n     * @readonly\n     * @member {Number} module:engine/view/position~Position#offset\n     */\n    this.offset = offset;\n  }\n\n  /**\n   * Node directly after the position. Equals `null` when there is no node after position or position is located\n   * inside text node.\n   *\n   * @readonly\n   * @type {module:engine/view/node~Node|null}\n   */\n  return _createClass(Position, [{\n    key: \"nodeAfter\",\n    get: function get() {\n      if (this.parent.is('text')) {\n        return null;\n      }\n      return this.parent.getChild(this.offset) || null;\n    }\n\n    /**\n     * Node directly before the position. Equals `null` when there is no node before position or position is located\n     * inside text node.\n     *\n     * @readonly\n     * @type {module:engine/view/node~Node|null}\n     */\n  }, {\n    key: \"nodeBefore\",\n    get: function get() {\n      if (this.parent.is('text')) {\n        return null;\n      }\n      return this.parent.getChild(this.offset - 1) || null;\n    }\n\n    /**\n     * Is `true` if position is at the beginning of its {@link module:engine/view/position~Position#parent parent}, `false` otherwise.\n     *\n     * @readonly\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isAtStart\",\n    get: function get() {\n      return this.offset === 0;\n    }\n\n    /**\n     * Is `true` if position is at the end of its {@link module:engine/view/position~Position#parent parent}, `false` otherwise.\n     *\n     * @readonly\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isAtEnd\",\n    get: function get() {\n      var endOffset = this.parent.is('text') ? this.parent.data.length : this.parent.childCount;\n      return this.offset === endOffset;\n    }\n\n    /**\n     * Position's root, that is the root of the position's parent element.\n     *\n     * @readonly\n     * @type {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment}\n     */\n  }, {\n    key: \"root\",\n    get: function get() {\n      return this.parent.root;\n    }\n\n    /**\n     * {@link module:engine/view/editableelement~EditableElement EditableElement} instance that contains this position, or `null` if\n     * position is not inside an editable element.\n     *\n     * @type {module:engine/view/editableelement~EditableElement|null}\n     */\n  }, {\n    key: \"editableElement\",\n    get: function get() {\n      var editable = this.parent;\n      while (!(editable instanceof EditableElement)) {\n        if (editable.parent) {\n          editable = editable.parent;\n        } else {\n          return null;\n        }\n      }\n      return editable;\n    }\n\n    /**\n     * Returns a new instance of Position with offset incremented by `shift` value.\n     *\n     * @param {Number} shift How position offset should get changed. Accepts negative values.\n     * @returns {module:engine/view/position~Position} Shifted position.\n     */\n  }, {\n    key: \"getShiftedBy\",\n    value: function getShiftedBy(shift) {\n      var shifted = Position._createAt(this);\n      var offset = shifted.offset + shift;\n      shifted.offset = offset < 0 ? 0 : offset;\n      return shifted;\n    }\n\n    /**\n     * Gets the farthest position which matches the callback using\n     * {@link module:engine/view/treewalker~TreeWalker TreeWalker}.\n     *\n     * For example:\n     *\n     * \t\tgetLastMatchingPosition( value => value.type == 'text' ); // <p>{}foo</p> -> <p>foo[]</p>\n     * \t\tgetLastMatchingPosition( value => value.type == 'text', { direction: 'backward' } ); // <p>foo[]</p> -> <p>{}foo</p>\n     * \t\tgetLastMatchingPosition( value => false ); // Do not move the position.\n     *\n     * @param {Function} skip Callback function. Gets {@link module:engine/view/treewalker~TreeWalkerValue} and should\n     * return `true` if the value should be skipped or `false` if not.\n     * @param {Object} options Object with configuration options. See {@link module:engine/view/treewalker~TreeWalker}.\n     *\n     * @returns {module:engine/view/position~Position} The position after the last item which matches the `skip` callback test.\n     */\n  }, {\n    key: \"getLastMatchingPosition\",\n    value: function getLastMatchingPosition(skip) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      options.startPosition = this;\n      var treeWalker = new TreeWalker(options);\n      treeWalker.skip(skip);\n      return treeWalker.position;\n    }\n\n    /**\n     * Returns ancestors array of this position, that is this position's parent and it's ancestors.\n     *\n     * @returns {Array} Array with ancestors.\n     */\n  }, {\n    key: \"getAncestors\",\n    value: function getAncestors() {\n      if (this.parent.is('documentFragment')) {\n        return [this.parent];\n      } else {\n        return this.parent.getAncestors({\n          includeSelf: true\n        });\n      }\n    }\n\n    /**\n     * Returns a {@link module:engine/view/node~Node} or {@link module:engine/view/documentfragment~DocumentFragment}\n     * which is a common ancestor of both positions.\n     *\n     * @param {module:engine/view/position~Position} position\n     * @returns {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment|null}\n     */\n  }, {\n    key: \"getCommonAncestor\",\n    value: function getCommonAncestor(position) {\n      var ancestorsA = this.getAncestors();\n      var ancestorsB = position.getAncestors();\n      var i = 0;\n      while (ancestorsA[i] == ancestorsB[i] && ancestorsA[i]) {\n        i++;\n      }\n      return i === 0 ? null : ancestorsA[i - 1];\n    }\n\n    /**\n     * Checks whether this object is of the given type.\n     *\n     *\t\tposition.is( 'position' ); // -> true\n     *\t\tposition.is( 'view:position' ); // -> true\n     *\n     *\t\tposition.is( 'model:position' ); // -> false\n     *\t\tposition.is( 'element' ); // -> false\n     *\t\tposition.is( 'range' ); // -> false\n     *\n     * {@link module:engine/view/node~Node#is Check the entire list of view objects} which implement the `is()` method.\n     *\n     * @param {String} type\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'position' || type == 'view:position';\n    }\n\n    /**\n     * Checks whether this position equals given position.\n     *\n     * @param {module:engine/view/position~Position} otherPosition Position to compare with.\n     * @returns {Boolean} True if positions are same.\n     */\n  }, {\n    key: \"isEqual\",\n    value: function isEqual(otherPosition) {\n      return this.parent == otherPosition.parent && this.offset == otherPosition.offset;\n    }\n\n    /**\n     * Checks whether this position is located before given position. When method returns `false` it does not mean that\n     * this position is after give one. Two positions may be located inside separate roots and in that situation this\n     * method will still return `false`.\n     *\n     * @see module:engine/view/position~Position#isAfter\n     * @see module:engine/view/position~Position#compareWith\n     * @param {module:engine/view/position~Position} otherPosition Position to compare with.\n     * @returns {Boolean} Returns `true` if this position is before given position.\n     */\n  }, {\n    key: \"isBefore\",\n    value: function isBefore(otherPosition) {\n      return this.compareWith(otherPosition) == 'before';\n    }\n\n    /**\n     * Checks whether this position is located after given position. When method returns `false` it does not mean that\n     * this position is before give one. Two positions may be located inside separate roots and in that situation this\n     * method will still return `false`.\n     *\n     * @see module:engine/view/position~Position#isBefore\n     * @see module:engine/view/position~Position#compareWith\n     * @param {module:engine/view/position~Position} otherPosition Position to compare with.\n     * @returns {Boolean} Returns `true` if this position is after given position.\n     */\n  }, {\n    key: \"isAfter\",\n    value: function isAfter(otherPosition) {\n      return this.compareWith(otherPosition) == 'after';\n    }\n\n    /**\n     * Checks whether this position is before, after or in same position that other position. Two positions may be also\n     * different when they are located in separate roots.\n     *\n     * @param {module:engine/view/position~Position} otherPosition Position to compare with.\n     * @returns {module:engine/view/position~PositionRelation}\n     */\n  }, {\n    key: \"compareWith\",\n    value: function compareWith(otherPosition) {\n      if (this.root !== otherPosition.root) {\n        return 'different';\n      }\n      if (this.isEqual(otherPosition)) {\n        return 'same';\n      }\n\n      // Get path from root to position's parent element.\n      var thisPath = this.parent.is('node') ? this.parent.getPath() : [];\n      var otherPath = otherPosition.parent.is('node') ? otherPosition.parent.getPath() : [];\n\n      // Add the positions' offsets to the parents offsets.\n      thisPath.push(this.offset);\n      otherPath.push(otherPosition.offset);\n\n      // Compare both path arrays to find common ancestor.\n      var result = compareArrays(thisPath, otherPath);\n      switch (result) {\n        case 'prefix':\n          return 'before';\n        case 'extension':\n          return 'after';\n        default:\n          return thisPath[result] < otherPath[result] ? 'before' : 'after';\n      }\n    }\n\n    /**\n     * Creates a {@link module:engine/view/treewalker~TreeWalker TreeWalker} instance with this positions as a start position.\n     *\n     * @param {Object} options Object with configuration options. See {@link module:engine/view/treewalker~TreeWalker}\n     * @param {module:engine/view/range~Range} [options.boundaries=null] Range to define boundaries of the iterator.\n     * @param {Boolean} [options.singleCharacters=false]\n     * @param {Boolean} [options.shallow=false]\n     * @param {Boolean} [options.ignoreElementEnd=false]\n     */\n  }, {\n    key: \"getWalker\",\n    value: function getWalker() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      options.startPosition = this;\n      return new TreeWalker(options);\n    }\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      return new Position(this.parent, this.offset);\n    }\n\n    /**\n     * Creates position at the given location. The location can be specified as:\n     *\n     * * a {@link module:engine/view/position~Position position},\n     * * parent element and offset (offset defaults to `0`),\n     * * parent element and `'end'` (sets position at the end of that element),\n     * * {@link module:engine/view/item~Item view item} and `'before'` or `'after'` (sets position before or after given view item).\n     *\n     * This method is a shortcut to other constructors such as:\n     *\n     * * {@link module:engine/view/position~Position._createBefore},\n     * * {@link module:engine/view/position~Position._createAfter}.\n     *\n     * @protected\n     * @param {module:engine/view/item~Item|module:engine/view/position~Position} itemOrPosition\n     * @param {Number|'end'|'before'|'after'} [offset] Offset or one of the flags. Used only when\n     * first parameter is a {@link module:engine/view/item~Item view item}.\n     */\n  }], [{\n    key: \"_createAt\",\n    value: function _createAt(itemOrPosition, offset) {\n      if (itemOrPosition instanceof Position) {\n        return new this(itemOrPosition.parent, itemOrPosition.offset);\n      } else {\n        var node = itemOrPosition;\n        if (offset == 'end') {\n          offset = node.is('text') ? node.data.length : node.childCount;\n        } else if (offset == 'before') {\n          return this._createBefore(node);\n        } else if (offset == 'after') {\n          return this._createAfter(node);\n        } else if (offset !== 0 && !offset) {\n          /**\n           * {@link module:engine/view/view~View#createPositionAt `View#createPositionAt()`}\n           * requires the offset to be specified when the first parameter is a view item.\n           *\n           * @error view-createPositionAt-offset-required\n           */\n          throw new CKEditorError('view-createPositionAt-offset-required: ' + 'View#createPositionAt() requires the offset when the first parameter is a view item.', node);\n        }\n        return new Position(node, offset);\n      }\n    }\n\n    /**\n     * Creates a new position after given view item.\n     *\n     * @protected\n     * @param {module:engine/view/item~Item} item View item after which the position should be located.\n     * @returns {module:engine/view/position~Position}\n     */\n  }, {\n    key: \"_createAfter\",\n    value: function _createAfter(item) {\n      // TextProxy is not a instance of Node so we need do handle it in specific way.\n      if (item.is('textProxy')) {\n        return new Position(item.textNode, item.offsetInText + item.data.length);\n      }\n      if (!item.parent) {\n        /**\n         * You can not make a position after a root.\n         *\n         * @error view-position-after-root\n         * @param {module:engine/view/node~Node} root\n         */\n        throw new CKEditorError('view-position-after-root: You can not make position after root.', item, {\n          root: item\n        });\n      }\n      return new Position(item.parent, item.index + 1);\n    }\n\n    /**\n     * Creates a new position before given view item.\n     *\n     * @protected\n     * @param {module:engine/view/item~Item} item View item before which the position should be located.\n     * @returns {module:engine/view/position~Position}\n     */\n  }, {\n    key: \"_createBefore\",\n    value: function _createBefore(item) {\n      // TextProxy is not a instance of Node so we need do handle it in specific way.\n      if (item.is('textProxy')) {\n        return new Position(item.textNode, item.offsetInText);\n      }\n      if (!item.parent) {\n        /**\n         * You cannot make a position before a root.\n         *\n         * @error view-position-before-root\n         * @param {module:engine/view/node~Node} root\n         */\n        throw new CKEditorError('view-position-before-root: You can not make position before root.', item, {\n          root: item\n        });\n      }\n      return new Position(item.parent, item.index);\n    }\n  }]);\n}();\n/**\n * A flag indicating whether this position is `'before'` or `'after'` or `'same'` as given position.\n * If positions are in different roots `'different'` flag is returned.\n *\n * @typedef {String} module:engine/view/position~PositionRelation\n */\nexport { Position as default };","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _regeneratorValues from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regeneratorValues.js\";\nimport _regenerator from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regenerator.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/range\n */\n\nimport Position from './position';\nimport TreeWalker from './treewalker';\n\n/**\n * Range in the view tree. A range is represented by its start and end {@link module:engine/view/position~Position positions}.\n *\n * In order to create a new position instance use the `createPosition*()` factory methods available in:\n *\n * * {@link module:engine/view/view~View}\n * * {@link module:engine/view/downcastwriter~DowncastWriter}\n * * {@link module:engine/view/upcastwriter~UpcastWriter}\n */\nvar Range = /*#__PURE__*/function () {\n  /**\n   * Creates a range spanning from `start` position to `end` position.\n   *\n   * **Note:** Constructor creates it's own {@link module:engine/view/position~Position} instances basing on passed values.\n   *\n   * @param {module:engine/view/position~Position} start Start position.\n   * @param {module:engine/view/position~Position} [end] End position. If not set, range will be collapsed at the `start` position.\n   */\n  function Range(start) {\n    var end = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    _classCallCheck(this, Range);\n    /**\n     * Start position.\n     *\n     * @readonly\n     * @member {module:engine/view/position~Position}\n     */\n    this.start = start.clone();\n\n    /**\n     * End position.\n     *\n     * @readonly\n     * @member {module:engine/view/position~Position}\n     */\n    this.end = end ? end.clone() : start.clone();\n  }\n\n  /**\n   * Iterable interface.\n   *\n   * Iterates over all {@link module:engine/view/item~Item view items} that are in this range and returns\n   * them together with additional information like length or {@link module:engine/view/position~Position positions},\n   * grouped as {@link module:engine/view/treewalker~TreeWalkerValue}.\n   *\n   * This iterator uses {@link module:engine/view/treewalker~TreeWalker TreeWalker} with `boundaries` set to this range and\n   * `ignoreElementEnd` option\n   * set to `true`.\n   *\n   * @returns {Iterable.<module:engine/view/treewalker~TreeWalkerValue>}\n   */\n  return _createClass(Range, [{\n    key: Symbol.iterator,\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function value() {\n      return _regenerator().w(function (_context) {\n        while (1) switch (_context.n) {\n          case 0:\n            return _context.d(_regeneratorValues(new TreeWalker({\n              boundaries: this,\n              ignoreElementEnd: true\n            })), 1);\n          case 1:\n            return _context.a(2);\n        }\n      }, value, this);\n    })\n    /**\n     * Returns whether the range is collapsed, that is it start and end positions are equal.\n     *\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isCollapsed\",\n    get: function get() {\n      return this.start.isEqual(this.end);\n    }\n\n    /**\n     * Returns whether this range is flat, that is if {@link module:engine/view/range~Range#start start} position and\n     * {@link module:engine/view/range~Range#end end} position are in the same {@link module:engine/view/position~Position#parent parent}.\n     *\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isFlat\",\n    get: function get() {\n      return this.start.parent === this.end.parent;\n    }\n\n    /**\n     * Range root element.\n     *\n     * @type {module:engine/view/element~Element|module:engine/view/documentfragment~DocumentFragment}\n     */\n  }, {\n    key: \"root\",\n    get: function get() {\n      return this.start.root;\n    }\n\n    /**\n     * Creates a maximal range that has the same content as this range but is expanded in both ways (at the beginning\n     * and at the end).\n     *\n     * For example:\n     *\n     *\t\t<p>Foo</p><p><b>{Bar}</b></p> -> <p>Foo</p>[<p><b>Bar</b>]</p>\n     *\t\t<p><b>foo</b>{bar}<span></span></p> -> <p><b>foo[</b>bar<span></span>]</p>\n     *\n     * Note that in the sample above:\n     *\n     * - `<p>` have type of {@link module:engine/view/containerelement~ContainerElement},\n     * - `<b>` have type of {@link module:engine/view/attributeelement~AttributeElement},\n     * - `<span>` have type of {@link module:engine/view/uielement~UIElement}.\n     *\n     * @returns {module:engine/view/range~Range} Enlarged range.\n     */\n  }, {\n    key: \"getEnlarged\",\n    value: function getEnlarged() {\n      var start = this.start.getLastMatchingPosition(enlargeTrimSkip, {\n        direction: 'backward'\n      });\n      var end = this.end.getLastMatchingPosition(enlargeTrimSkip);\n\n      // Fix positions, in case if they are in Text node.\n      if (start.parent.is('text') && start.isAtStart) {\n        start = Position._createBefore(start.parent);\n      }\n      if (end.parent.is('text') && end.isAtEnd) {\n        end = Position._createAfter(end.parent);\n      }\n      return new Range(start, end);\n    }\n\n    /**\n     * Creates a minimum range that has the same content as this range but is trimmed in both ways (at the beginning\n     * and at the end).\n     *\n     * For example:\n     *\n     *\t\t<p>Foo</p>[<p><b>Bar</b>]</p> -> <p>Foo</p><p><b>{Bar}</b></p>\n     *\t\t<p><b>foo[</b>bar<span></span>]</p> -> <p><b>foo</b>{bar}<span></span></p>\n     *\n     * Note that in the sample above:\n     *\n     * - `<p>` have type of {@link module:engine/view/containerelement~ContainerElement},\n     * - `<b>` have type of {@link module:engine/view/attributeelement~AttributeElement},\n     * - `<span>` have type of {@link module:engine/view/uielement~UIElement}.\n     *\n     * @returns {module:engine/view/range~Range} Shrink range.\n     */\n  }, {\n    key: \"getTrimmed\",\n    value: function getTrimmed() {\n      var start = this.start.getLastMatchingPosition(enlargeTrimSkip);\n      if (start.isAfter(this.end) || start.isEqual(this.end)) {\n        return new Range(start, start);\n      }\n      var end = this.end.getLastMatchingPosition(enlargeTrimSkip, {\n        direction: 'backward'\n      });\n      var nodeAfterStart = start.nodeAfter;\n      var nodeBeforeEnd = end.nodeBefore;\n\n      // Because TreeWalker prefers positions next to text node, we need to move them manually into these text nodes.\n      if (nodeAfterStart && nodeAfterStart.is('text')) {\n        start = new Position(nodeAfterStart, 0);\n      }\n      if (nodeBeforeEnd && nodeBeforeEnd.is('text')) {\n        end = new Position(nodeBeforeEnd, nodeBeforeEnd.data.length);\n      }\n      return new Range(start, end);\n    }\n\n    /**\n     * Two ranges are equal if their start and end positions are equal.\n     *\n     * @param {module:engine/view/range~Range} otherRange Range to compare with.\n     * @returns {Boolean} `true` if ranges are equal, `false` otherwise\n     */\n  }, {\n    key: \"isEqual\",\n    value: function isEqual(otherRange) {\n      return this == otherRange || this.start.isEqual(otherRange.start) && this.end.isEqual(otherRange.end);\n    }\n\n    /**\n     * Checks whether this range contains given {@link module:engine/view/position~Position position}.\n     *\n     * @param {module:engine/view/position~Position} position Position to check.\n     * @returns {Boolean} `true` if given {@link module:engine/view/position~Position position} is contained in this range,\n     * `false` otherwise.\n     */\n  }, {\n    key: \"containsPosition\",\n    value: function containsPosition(position) {\n      return position.isAfter(this.start) && position.isBefore(this.end);\n    }\n\n    /**\n     * Checks whether this range contains given {@link module:engine/view/range~Range range}.\n     *\n     * @param {module:engine/view/range~Range} otherRange Range to check.\n     * @param {Boolean} [loose=false] Whether the check is loose or strict. If the check is strict (`false`), compared range cannot\n     * start or end at the same position as this range boundaries. If the check is loose (`true`), compared range can start, end or\n     * even be equal to this range. Note that collapsed ranges are always compared in strict mode.\n     * @returns {Boolean} `true` if given {@link module:engine/view/range~Range range} boundaries are contained by this range, `false`\n     * otherwise.\n     */\n  }, {\n    key: \"containsRange\",\n    value: function containsRange(otherRange) {\n      var loose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      if (otherRange.isCollapsed) {\n        loose = false;\n      }\n      var containsStart = this.containsPosition(otherRange.start) || loose && this.start.isEqual(otherRange.start);\n      var containsEnd = this.containsPosition(otherRange.end) || loose && this.end.isEqual(otherRange.end);\n      return containsStart && containsEnd;\n    }\n\n    /**\n     * Computes which part(s) of this {@link module:engine/view/range~Range range} is not a part of given\n     * {@link module:engine/view/range~Range range}.\n     * Returned array contains zero, one or two {@link module:engine/view/range~Range ranges}.\n     *\n     * Examples:\n     *\n     *\t\tlet foo = downcastWriter.createText( 'foo' );\n     *\t\tlet img = downcastWriter.createContainerElement( 'img' );\n     *\t\tlet bar = downcastWriter.createText( 'bar' );\n     *\t\tlet p = downcastWriter.createContainerElement( 'p', null, [ foo, img, bar ] );\n     *\n     *\t\tlet range = view.createRange( view.createPositionAt( foo, 2 ), view.createPositionAt( bar, 1 ); // \"o\", img, \"b\" are in range.\n     *\t\tlet otherRange = view.createRange( // \"oo\", img, \"ba\" are in range.\n     *\t\t\tview.createPositionAt( foo, 1 ),\n     *\t\t\tview.createPositionAt( bar, 2 )\n     *\t\t);\n     *\t\tlet transformed = range.getDifference( otherRange );\n     *\t\t// transformed array has no ranges because `otherRange` contains `range`\n     *\n     *\t\totherRange = view.createRange( view.createPositionAt( foo, 1 ), view.createPositionAt( p, 2 ); // \"oo\", img are in range.\n     *\t\ttransformed = range.getDifference( otherRange );\n     *\t\t// transformed array has one range: from ( p, 2 ) to ( bar, 1 )\n     *\n     *\t\totherRange = view.createRange( view.createPositionAt( p, 1 ), view.createPositionAt( p, 2 ) ); // img is in range.\n     *\t\ttransformed = range.getDifference( otherRange );\n     *\t\t// transformed array has two ranges: from ( foo, 1 ) to ( p, 1 ) and from ( p, 2 ) to ( bar, 1 )\n     *\n     * @param {module:engine/view/range~Range} otherRange Range to differentiate against.\n     * @returns {Array.<module:engine/view/range~Range>} The difference between ranges.\n     */\n  }, {\n    key: \"getDifference\",\n    value: function getDifference(otherRange) {\n      var ranges = [];\n      if (this.isIntersecting(otherRange)) {\n        // Ranges intersect.\n\n        if (this.containsPosition(otherRange.start)) {\n          // Given range start is inside this range. This means that we have to\n          // add shrunken range - from the start to the middle of this range.\n          ranges.push(new Range(this.start, otherRange.start));\n        }\n        if (this.containsPosition(otherRange.end)) {\n          // Given range end is inside this range. This means that we have to\n          // add shrunken range - from the middle of this range to the end.\n          ranges.push(new Range(otherRange.end, this.end));\n        }\n      } else {\n        // Ranges do not intersect, return the original range.\n        ranges.push(this.clone());\n      }\n      return ranges;\n    }\n\n    /**\n     * Returns an intersection of this {@link module:engine/view/range~Range range} and given {@link module:engine/view/range~Range range}.\n     * Intersection is a common part of both of those ranges. If ranges has no common part, returns `null`.\n     *\n     * Examples:\n     *\n     *\t\tlet foo = downcastWriter.createText( 'foo' );\n     *\t\tlet img = downcastWriter.createContainerElement( 'img' );\n     *\t\tlet bar = downcastWriter.createText( 'bar' );\n     *\t\tlet p = downcastWriter.createContainerElement( 'p', null, [ foo, img, bar ] );\n     *\n     *\t\tlet range = view.createRange( view.createPositionAt( foo, 2 ), view.createPositionAt( bar, 1 ); // \"o\", img, \"b\" are in range.\n     *\t\tlet otherRange = view.createRange( view.createPositionAt( foo, 1 ), view.createPositionAt( p, 2 ); // \"oo\", img are in range.\n     *\t\tlet transformed = range.getIntersection( otherRange ); // range from ( foo, 1 ) to ( p, 2 ).\n     *\n     *\t\totherRange = view.createRange( view.createPositionAt( bar, 1 ), view.createPositionAt( bar, 3 ); \"ar\" is in range.\n     *\t\ttransformed = range.getIntersection( otherRange ); // null - no common part.\n     *\n     * @param {module:engine/view/range~Range} otherRange Range to check for intersection.\n     * @returns {module:engine/view/range~Range|null} A common part of given ranges or `null` if ranges have no common part.\n     */\n  }, {\n    key: \"getIntersection\",\n    value: function getIntersection(otherRange) {\n      if (this.isIntersecting(otherRange)) {\n        // Ranges intersect, so a common range will be returned.\n        // At most, it will be same as this range.\n        var commonRangeStart = this.start;\n        var commonRangeEnd = this.end;\n        if (this.containsPosition(otherRange.start)) {\n          // Given range start is inside this range. This means thaNt we have to\n          // shrink common range to the given range start.\n          commonRangeStart = otherRange.start;\n        }\n        if (this.containsPosition(otherRange.end)) {\n          // Given range end is inside this range. This means that we have to\n          // shrink common range to the given range end.\n          commonRangeEnd = otherRange.end;\n        }\n        return new Range(commonRangeStart, commonRangeEnd);\n      }\n\n      // Ranges do not intersect, so they do not have common part.\n      return null;\n    }\n\n    /**\n     * Creates a {@link module:engine/view/treewalker~TreeWalker TreeWalker} instance with this range as a boundary.\n     *\n     * @param {Object} options Object with configuration options. See {@link module:engine/view/treewalker~TreeWalker}.\n     * @param {module:engine/view/position~Position} [options.startPosition]\n     * @param {Boolean} [options.singleCharacters=false]\n     * @param {Boolean} [options.shallow=false]\n     * @param {Boolean} [options.ignoreElementEnd=false]\n     * @returns {module:engine/view/treewalker~TreeWalker}\n     */\n  }, {\n    key: \"getWalker\",\n    value: function getWalker() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      options.boundaries = this;\n      return new TreeWalker(options);\n    }\n\n    /**\n     * Returns a {@link module:engine/view/node~Node} or {@link module:engine/view/documentfragment~DocumentFragment}\n     * which is a common ancestor of range's both ends (in which the entire range is contained).\n     *\n     * @returns {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment|null}\n     */\n  }, {\n    key: \"getCommonAncestor\",\n    value: function getCommonAncestor() {\n      return this.start.getCommonAncestor(this.end);\n    }\n\n    /**\n     * Clones this range.\n     *\n     * @returns {module:engine/view/range~Range}\n     */\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      return new Range(this.start, this.end);\n    }\n\n    /**\n     * Returns an iterator that iterates over all {@link module:engine/view/item~Item view items} that are in this range and returns\n     * them.\n     *\n     * This method uses {@link module:engine/view/treewalker~TreeWalker} with `boundaries` set to this range and `ignoreElementEnd` option\n     * set to `true`. However it returns only {@link module:engine/view/item~Item items},\n     * not {@link module:engine/view/treewalker~TreeWalkerValue}.\n     *\n     * You may specify additional options for the tree walker. See {@link module:engine/view/treewalker~TreeWalker} for\n     * a full list of available options.\n     *\n     * @param {Object} options Object with configuration options. See {@link module:engine/view/treewalker~TreeWalker}.\n     * @returns {Iterable.<module:engine/view/item~Item>}\n     */\n  }, {\n    key: \"getItems\",\n    value: function getItems() {\n      var _this = this;\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      return /*#__PURE__*/_regenerator().m(function _callee() {\n        var treeWalker, _iterator, _step, value, _t;\n        return _regenerator().w(function (_context2) {\n          while (1) switch (_context2.p = _context2.n) {\n            case 0:\n              options.boundaries = _this;\n              options.ignoreElementEnd = true;\n              treeWalker = new TreeWalker(options);\n              _iterator = _createForOfIteratorHelper(treeWalker);\n              _context2.p = 1;\n              _iterator.s();\n            case 2:\n              if ((_step = _iterator.n()).done) {\n                _context2.n = 4;\n                break;\n              }\n              value = _step.value;\n              _context2.n = 3;\n              return value.item;\n            case 3:\n              _context2.n = 2;\n              break;\n            case 4:\n              _context2.n = 6;\n              break;\n            case 5:\n              _context2.p = 5;\n              _t = _context2.v;\n              _iterator.e(_t);\n            case 6:\n              _context2.p = 6;\n              _iterator.f();\n              return _context2.f(6);\n            case 7:\n              return _context2.a(2);\n          }\n        }, _callee, null, [[1, 5, 6, 7]]);\n      })();\n    }\n\n    /**\n     * Returns an iterator that iterates over all {@link module:engine/view/position~Position positions} that are boundaries or\n     * contained in this range.\n     *\n     * This method uses {@link module:engine/view/treewalker~TreeWalker} with `boundaries` set to this range. However it returns only\n     * {@link module:engine/view/position~Position positions}, not {@link module:engine/view/treewalker~TreeWalkerValue}.\n     *\n     * You may specify additional options for the tree walker. See {@link module:engine/view/treewalker~TreeWalker} for\n     * a full list of available options.\n     *\n     * @param {Object} options Object with configuration options. See {@link module:engine/view/treewalker~TreeWalker}.\n     * @returns {Iterable.<module:engine/view/position~Position>}\n     */\n  }, {\n    key: \"getPositions\",\n    value: function getPositions() {\n      var _this2 = this;\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      return /*#__PURE__*/_regenerator().m(function _callee2() {\n        var treeWalker, _iterator2, _step2, value, _t2;\n        return _regenerator().w(function (_context3) {\n          while (1) switch (_context3.p = _context3.n) {\n            case 0:\n              options.boundaries = _this2;\n              treeWalker = new TreeWalker(options);\n              _context3.n = 1;\n              return treeWalker.position;\n            case 1:\n              _iterator2 = _createForOfIteratorHelper(treeWalker);\n              _context3.p = 2;\n              _iterator2.s();\n            case 3:\n              if ((_step2 = _iterator2.n()).done) {\n                _context3.n = 5;\n                break;\n              }\n              value = _step2.value;\n              _context3.n = 4;\n              return value.nextPosition;\n            case 4:\n              _context3.n = 3;\n              break;\n            case 5:\n              _context3.n = 7;\n              break;\n            case 6:\n              _context3.p = 6;\n              _t2 = _context3.v;\n              _iterator2.e(_t2);\n            case 7:\n              _context3.p = 7;\n              _iterator2.f();\n              return _context3.f(7);\n            case 8:\n              return _context3.a(2);\n          }\n        }, _callee2, null, [[2, 6, 7, 8]]);\n      })();\n    }\n\n    /**\n     * Checks whether this object is of the given type.\n     *\n     *\t\trange.is( 'range' ); // -> true\n     *\t\trange.is( 'view:range' ); // -> true\n     *\n     *\t\trange.is( 'model:range' ); // -> false\n     *\t\trange.is( 'element' ); // -> false\n     *\t\trange.is( 'selection' ); // -> false\n     *\n     * {@link module:engine/view/node~Node#is Check the entire list of view objects} which implement the `is()` method.\n     *\n     * @param {String} type\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'range' || type == 'view:range';\n    }\n\n    /**\n     * Checks and returns whether this range intersects with the given range.\n     *\n     * @param {module:engine/view/range~Range} otherRange Range to compare with.\n     * @returns {Boolean} True if ranges intersect.\n     */\n  }, {\n    key: \"isIntersecting\",\n    value: function isIntersecting(otherRange) {\n      return this.start.isBefore(otherRange.end) && this.end.isAfter(otherRange.start);\n    }\n\n    /**\n     * Creates a range from the given parents and offsets.\n     *\n     * @protected\n     * @param {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment} startElement Start position\n     * parent element.\n     * @param {Number} startOffset Start position offset.\n     * @param {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment} endElement End position\n     * parent element.\n     * @param {Number} endOffset End position offset.\n     * @returns {module:engine/view/range~Range} Created range.\n     */\n  }], [{\n    key: \"_createFromParentsAndOffsets\",\n    value: function _createFromParentsAndOffsets(startElement, startOffset, endElement, endOffset) {\n      return new this(new Position(startElement, startOffset), new Position(endElement, endOffset));\n    }\n\n    /**\n     * Creates a new range, spreading from specified {@link module:engine/view/position~Position position} to a position moved by\n     * given `shift`. If `shift` is a negative value, shifted position is treated as the beginning of the range.\n     *\n     * @protected\n     * @param {module:engine/view/position~Position} position Beginning of the range.\n     * @param {Number} shift How long the range should be.\n     * @returns {module:engine/view/range~Range}\n     */\n  }, {\n    key: \"_createFromPositionAndShift\",\n    value: function _createFromPositionAndShift(position, shift) {\n      var start = position;\n      var end = position.getShiftedBy(shift);\n      return shift > 0 ? new this(start, end) : new this(end, start);\n    }\n\n    /**\n     * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n     * that element and ends after the last child of that element.\n     *\n     * @protected\n     * @param {module:engine/view/element~Element} element Element which is a parent for the range.\n     * @returns {module:engine/view/range~Range}\n     */\n  }, {\n    key: \"_createIn\",\n    value: function _createIn(element) {\n      return this._createFromParentsAndOffsets(element, 0, element, element.childCount);\n    }\n\n    /**\n     * Creates a range that starts before given {@link module:engine/view/item~Item view item} and ends after it.\n     *\n     * @protected\n     * @param {module:engine/view/item~Item} item\n     * @returns {module:engine/view/range~Range}\n     */\n  }, {\n    key: \"_createOn\",\n    value: function _createOn(item) {\n      var size = item.is('textProxy') ? item.offsetSize : 1;\n      return this._createFromPositionAndShift(Position._createBefore(item), size);\n    }\n  }]);\n}(); // Function used by getEnlarged and getTrimmed methods.\nexport { Range as default };\nfunction enlargeTrimSkip(value) {\n  if (value.item.is('attributeElement') || value.item.is('uiElement')) {\n    return true;\n  }\n  return false;\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.anchor.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* globals Node */\n\n/**\n * @module engine/view/renderer\n */\n\nimport ViewText from './text';\nimport ViewPosition from './position';\nimport { INLINE_FILLER, INLINE_FILLER_LENGTH, startsWithFiller, isInlineFiller } from './filler';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport diff from '@ckeditor/ckeditor5-utils/src/diff';\nimport insertAt from '@ckeditor/ckeditor5-utils/src/dom/insertat';\nimport remove from '@ckeditor/ckeditor5-utils/src/dom/remove';\nimport ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport isText from '@ckeditor/ckeditor5-utils/src/dom/istext';\nimport isNode from '@ckeditor/ckeditor5-utils/src/dom/isnode';\nimport fastDiff from '@ckeditor/ckeditor5-utils/src/fastdiff';\nimport env from '@ckeditor/ckeditor5-utils/src/env';\n\n/**\n * Renderer is responsible for updating the DOM structure and the DOM selection based on\n * the {@link module:engine/view/renderer~Renderer#markToSync information about updated view nodes}.\n * In other words, it renders the view to the DOM.\n *\n * Its main responsibility is to make only the necessary, minimal changes to the DOM. However, unlike in many\n * virtual DOM implementations, the primary reason for doing minimal changes is not the performance but ensuring\n * that native editing features such as text composition, autocompletion, spell checking, selection's x-index are\n * affected as little as possible.\n *\n * Renderer uses {@link module:engine/view/domconverter~DomConverter} to transform view nodes and positions\n * to and from the DOM.\n */\nvar Renderer = /*#__PURE__*/function () {\n  /**\n   * Creates a renderer instance.\n   *\n   * @param {module:engine/view/domconverter~DomConverter} domConverter Converter instance.\n   * @param {module:engine/view/documentselection~DocumentSelection} selection View selection.\n   */\n  function Renderer(domConverter, selection) {\n    _classCallCheck(this, Renderer);\n    /**\n     * Set of DOM Documents instances.\n     *\n     * @readonly\n     * @member {Set.<Document>}\n     */\n    this.domDocuments = new Set();\n\n    /**\n     * Converter instance.\n     *\n     * @readonly\n     * @member {module:engine/view/domconverter~DomConverter}\n     */\n    this.domConverter = domConverter;\n\n    /**\n     * Set of nodes which attributes changed and may need to be rendered.\n     *\n     * @readonly\n     * @member {Set.<module:engine/view/node~Node>}\n     */\n    this.markedAttributes = new Set();\n\n    /**\n     * Set of elements which child lists changed and may need to be rendered.\n     *\n     * @readonly\n     * @member {Set.<module:engine/view/node~Node>}\n     */\n    this.markedChildren = new Set();\n\n    /**\n     * Set of text nodes which text data changed and may need to be rendered.\n     *\n     * @readonly\n     * @member {Set.<module:engine/view/node~Node>}\n     */\n    this.markedTexts = new Set();\n\n    /**\n     * View selection. Renderer updates DOM selection based on the view selection.\n     *\n     * @readonly\n     * @member {module:engine/view/documentselection~DocumentSelection}\n     */\n    this.selection = selection;\n\n    /**\n     * Indicates if the view document is focused and selection can be rendered. Selection will not be rendered if\n     * this is set to `false`.\n     *\n     * @member {Boolean}\n     */\n    this.isFocused = false;\n\n    /**\n     * The text node in which the inline filler was rendered.\n     *\n     * @private\n     * @member {Text}\n     */\n    this._inlineFiller = null;\n\n    /**\n     * DOM element containing fake selection.\n     *\n     * @private\n     * @type {null|HTMLElement}\n     */\n    this._fakeSelectionContainer = null;\n  }\n\n  /**\n   * Marks a view node to be updated in the DOM by {@link #render `render()`}.\n   *\n   * Note that only view nodes whose parents have corresponding DOM elements need to be marked to be synchronized.\n   *\n   * @see #markedAttributes\n   * @see #markedChildren\n   * @see #markedTexts\n   *\n   * @param {module:engine/view/document~ChangeType} type Type of the change.\n   * @param {module:engine/view/node~Node} node Node to be marked.\n   */\n  return _createClass(Renderer, [{\n    key: \"markToSync\",\n    value: function markToSync(type, node) {\n      if (type === 'text') {\n        if (this.domConverter.mapViewToDom(node.parent)) {\n          this.markedTexts.add(node);\n        }\n      } else {\n        // If the node has no DOM element it is not rendered yet,\n        // its children/attributes do not need to be marked to be sync.\n        if (!this.domConverter.mapViewToDom(node)) {\n          return;\n        }\n        if (type === 'attributes') {\n          this.markedAttributes.add(node);\n        } else if (type === 'children') {\n          this.markedChildren.add(node);\n        } else {\n          /**\n           * Unknown type passed to Renderer.markToSync.\n           *\n           * @error renderer-unknown-type\n           */\n          throw new CKEditorError('view-renderer-unknown-type: Unknown type passed to Renderer.markToSync.', this);\n        }\n      }\n    }\n\n    /**\n     * Renders all buffered changes ({@link #markedAttributes}, {@link #markedChildren} and {@link #markedTexts}) and\n     * the current view selection (if needed) to the DOM by applying a minimal set of changes to it.\n     *\n     * Renderer tries not to break the text composition (e.g. IME) and x-index of the selection,\n     * so it does as little as it is needed to update the DOM.\n     *\n     * Renderer also handles {@link module:engine/view/filler fillers}. Especially, it checks if the inline filler is needed\n     * at the selection position and adds or removes it. To prevent breaking text composition inline filler will not be\n     * removed as long as the selection is in the text node which needed it at first.\n     */\n  }, {\n    key: \"render\",\n    value: function render() {\n      var inlineFillerPosition;\n\n      // Refresh mappings.\n      var _iterator = _createForOfIteratorHelper(this.markedChildren),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var element = _step.value;\n          this._updateChildrenMappings(element);\n        }\n\n        // There was inline filler rendered in the DOM but it's not\n        // at the selection position any more, so we can remove it\n        // (cause even if it's needed, it must be placed in another location).\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      if (this._inlineFiller && !this._isSelectionInInlineFiller()) {\n        this._removeInlineFiller();\n      }\n\n      // If we've got the filler, let's try to guess its position in the view.\n      if (this._inlineFiller) {\n        inlineFillerPosition = this._getInlineFillerPosition();\n      }\n      // Otherwise, if it's needed, create it at the selection position.\n      else if (this._needsInlineFillerAtSelection()) {\n        inlineFillerPosition = this.selection.getFirstPosition();\n\n        // Do not use `markToSync` so it will be added even if the parent is already added.\n        this.markedChildren.add(inlineFillerPosition.parent);\n      }\n      var _iterator2 = _createForOfIteratorHelper(this.markedAttributes),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var _element = _step2.value;\n          this._updateAttrs(_element);\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      var _iterator3 = _createForOfIteratorHelper(this.markedChildren),\n        _step3;\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var _element2 = _step3.value;\n          this._updateChildren(_element2, {\n            inlineFillerPosition: inlineFillerPosition\n          });\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n      var _iterator4 = _createForOfIteratorHelper(this.markedTexts),\n        _step4;\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var node = _step4.value;\n          if (!this.markedChildren.has(node.parent) && this.domConverter.mapViewToDom(node.parent)) {\n            this._updateText(node, {\n              inlineFillerPosition: inlineFillerPosition\n            });\n          }\n        }\n\n        // Check whether the inline filler is required and where it really is in the DOM.\n        // At this point in most cases it will be in the DOM, but there are exceptions.\n        // For example, if the inline filler was deep in the created DOM structure, it will not be created.\n        // Similarly, if it was removed at the beginning of this function and then neither text nor children were updated,\n        // it will not be present.\n        // Fix those and similar scenarios.\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n      if (inlineFillerPosition) {\n        var fillerDomPosition = this.domConverter.viewPositionToDom(inlineFillerPosition);\n        var domDocument = fillerDomPosition.parent.ownerDocument;\n        if (!startsWithFiller(fillerDomPosition.parent)) {\n          // Filler has not been created at filler position. Create it now.\n          this._inlineFiller = addInlineFiller(domDocument, fillerDomPosition.parent, fillerDomPosition.offset);\n        } else {\n          // Filler has been found, save it.\n          this._inlineFiller = fillerDomPosition.parent;\n        }\n      } else {\n        // There is no filler needed.\n        this._inlineFiller = null;\n      }\n      this._updateSelection();\n      this._updateFocus();\n      this.markedTexts.clear();\n      this.markedAttributes.clear();\n      this.markedChildren.clear();\n    }\n\n    /**\n     * Updates mappings of view element's children.\n     *\n     * Children that were replaced in the view structure by similar elements (same tag name) are treated as 'replaced'.\n     * This means that their mappings can be updated so the new view elements are mapped to the existing DOM elements.\n     * Thanks to that these elements do not need to be re-rendered completely.\n     *\n     * @private\n     * @param {module:engine/view/node~Node} viewElement The view element whose children mappings will be updated.\n     */\n  }, {\n    key: \"_updateChildrenMappings\",\n    value: function _updateChildrenMappings(viewElement) {\n      var domElement = this.domConverter.mapViewToDom(viewElement);\n      if (!domElement) {\n        // If there is no `domElement` it means that it was already removed from DOM and there is no need to process it.\n        return;\n      }\n      var actualDomChildren = this.domConverter.mapViewToDom(viewElement).childNodes;\n      var expectedDomChildren = Array.from(this.domConverter.viewChildrenToDom(viewElement, domElement.ownerDocument, {\n        withChildren: false\n      }));\n      var diff = this._diffNodeLists(actualDomChildren, expectedDomChildren);\n      var actions = this._findReplaceActions(diff, actualDomChildren, expectedDomChildren);\n      if (actions.indexOf('replace') !== -1) {\n        var counter = {\n          equal: 0,\n          insert: 0,\n          delete: 0\n        };\n        var _iterator5 = _createForOfIteratorHelper(actions),\n          _step5;\n        try {\n          for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n            var action = _step5.value;\n            if (action === 'replace') {\n              var insertIndex = counter.equal + counter.insert;\n              var deleteIndex = counter.equal + counter.delete;\n              var viewChild = viewElement.getChild(insertIndex);\n\n              // The 'uiElement' is a special one and its children are not stored in a view (#799),\n              // so we cannot use it with replacing flow (since it uses view children during rendering\n              // which will always result in rendering empty element).\n              if (viewChild && !viewChild.is('uiElement')) {\n                this._updateElementMappings(viewChild, actualDomChildren[deleteIndex]);\n              }\n              remove(expectedDomChildren[insertIndex]);\n              counter.equal++;\n            } else {\n              counter[action]++;\n            }\n          }\n        } catch (err) {\n          _iterator5.e(err);\n        } finally {\n          _iterator5.f();\n        }\n      }\n    }\n\n    /**\n     * Updates mappings of a given view element.\n     *\n     * @private\n     * @param {module:engine/view/node~Node} viewElement The view element whose mappings will be updated.\n     * @param {Node} domElement The DOM element representing the given view element.\n     */\n  }, {\n    key: \"_updateElementMappings\",\n    value: function _updateElementMappings(viewElement, domElement) {\n      // Remap 'DomConverter' bindings.\n      this.domConverter.unbindDomElement(domElement);\n      this.domConverter.bindElements(domElement, viewElement);\n\n      // View element may have children which needs to be updated, but are not marked, mark them to update.\n      this.markedChildren.add(viewElement);\n\n      // Because we replace new view element mapping with the existing one, the corresponding DOM element\n      // will not be rerendered. The new view element may have different attributes than the previous one.\n      // Since its corresponding DOM element will not be rerendered, new attributes will not be added\n      // to the DOM, so we need to mark it here to make sure its attributes gets updated. See #1427 for more\n      // detailed case study.\n      // Also there are cases where replaced element is removed from the view structure and then has\n      // its attributes changed or removed. In such cases the element will not be present in `markedAttributes`\n      // and also may be the same (`element.isSimilar()`) as the reused element not having its attributes updated.\n      // To prevent such situations we always mark reused element to have its attributes rerenderd (#1560).\n      this.markedAttributes.add(viewElement);\n    }\n\n    /**\n     * Gets the position of the inline filler based on the current selection.\n     * Here, we assume that we know that the filler is needed and\n     * {@link #_isSelectionInInlineFiller is at the selection position}, and, since it is needed,\n     * it is somewhere at the selection position.\n     *\n     * Note: The filler position cannot be restored based on the filler's DOM text node, because\n     * when this method is called (before rendering), the bindings will often be broken. View-to-DOM\n     * bindings are only dependable after rendering.\n     *\n     * @private\n     * @returns {module:engine/view/position~Position}\n     */\n  }, {\n    key: \"_getInlineFillerPosition\",\n    value: function _getInlineFillerPosition() {\n      var firstPos = this.selection.getFirstPosition();\n      if (firstPos.parent.is('text')) {\n        return ViewPosition._createBefore(this.selection.getFirstPosition().parent);\n      } else {\n        return firstPos;\n      }\n    }\n\n    /**\n     * Returns `true` if the selection has not left the inline filler's text node.\n     * If it is `true`, it means that the filler had been added for a reason and the selection did not\n     * leave the filler's text node. For example, the user can be in the middle of a composition so it should not be touched.\n     *\n     * @private\n     * @returns {Boolean} `true` if the inline filler and selection are in the same place.\n     */\n  }, {\n    key: \"_isSelectionInInlineFiller\",\n    value: function _isSelectionInInlineFiller() {\n      if (this.selection.rangeCount != 1 || !this.selection.isCollapsed) {\n        return false;\n      }\n\n      // Note, we can't check if selection's position equals position of the\n      // this._inlineFiller node, because of #663. We may not be able to calculate\n      // the filler's position in the view at this stage.\n      // Instead, we check it the other way – whether selection is anchored in\n      // that text node or next to it.\n\n      // Possible options are:\n      // \"FILLER{}\"\n      // \"FILLERadded-text{}\"\n      var selectionPosition = this.selection.getFirstPosition();\n      var position = this.domConverter.viewPositionToDom(selectionPosition);\n      if (position && isText(position.parent) && startsWithFiller(position.parent)) {\n        return true;\n      }\n      return false;\n    }\n\n    /**\n     * Removes the inline filler.\n     *\n     * @private\n     */\n  }, {\n    key: \"_removeInlineFiller\",\n    value: function _removeInlineFiller() {\n      var domFillerNode = this._inlineFiller;\n\n      // Something weird happened and the stored node doesn't contain the filler's text.\n      if (!startsWithFiller(domFillerNode)) {\n        /**\n         * The inline filler node was lost. Most likely, something overwrote the filler text node\n         * in the DOM.\n         *\n         * @error view-renderer-filler-was-lost\n         */\n        throw new CKEditorError('view-renderer-filler-was-lost: The inline filler node was lost.', this);\n      }\n      if (isInlineFiller(domFillerNode)) {\n        domFillerNode.parentNode.removeChild(domFillerNode);\n      } else {\n        domFillerNode.data = domFillerNode.data.substr(INLINE_FILLER_LENGTH);\n      }\n      this._inlineFiller = null;\n    }\n\n    /**\n     * Checks if the inline {@link module:engine/view/filler filler} should be added.\n     *\n     * @private\n     * @returns {Boolean} `true` if the inline filler should be added.\n     */\n  }, {\n    key: \"_needsInlineFillerAtSelection\",\n    value: function _needsInlineFillerAtSelection() {\n      if (this.selection.rangeCount != 1 || !this.selection.isCollapsed) {\n        return false;\n      }\n      var selectionPosition = this.selection.getFirstPosition();\n      var selectionParent = selectionPosition.parent;\n      var selectionOffset = selectionPosition.offset;\n\n      // If there is no DOM root we do not care about fillers.\n      if (!this.domConverter.mapViewToDom(selectionParent.root)) {\n        return false;\n      }\n      if (!selectionParent.is('element')) {\n        return false;\n      }\n\n      // Prevent adding inline filler inside elements with contenteditable=false.\n      // https://github.com/ckeditor/ckeditor5-engine/issues/1170\n      if (!isEditable(selectionParent)) {\n        return false;\n      }\n\n      // We have block filler, we do not need inline one.\n      if (selectionOffset === selectionParent.getFillerOffset()) {\n        return false;\n      }\n      var nodeBefore = selectionPosition.nodeBefore;\n      var nodeAfter = selectionPosition.nodeAfter;\n      if (nodeBefore instanceof ViewText || nodeAfter instanceof ViewText) {\n        return false;\n      }\n      return true;\n    }\n\n    /**\n     * Checks if text needs to be updated and possibly updates it.\n     *\n     * @private\n     * @param {module:engine/view/text~Text} viewText View text to update.\n     * @param {Object} options\n     * @param {module:engine/view/position~Position} options.inlineFillerPosition The position where the inline\n     * filler should be rendered.\n     */\n  }, {\n    key: \"_updateText\",\n    value: function _updateText(viewText, options) {\n      var domText = this.domConverter.findCorrespondingDomText(viewText);\n      var newDomText = this.domConverter.viewToDom(viewText, domText.ownerDocument);\n      var actualText = domText.data;\n      var expectedText = newDomText.data;\n      var filler = options.inlineFillerPosition;\n      if (filler && filler.parent == viewText.parent && filler.offset == viewText.index) {\n        expectedText = INLINE_FILLER + expectedText;\n      }\n      if (actualText != expectedText) {\n        var actions = fastDiff(actualText, expectedText);\n        var _iterator6 = _createForOfIteratorHelper(actions),\n          _step6;\n        try {\n          for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n            var action = _step6.value;\n            if (action.type === 'insert') {\n              domText.insertData(action.index, action.values.join(''));\n            } else {\n              // 'delete'\n              domText.deleteData(action.index, action.howMany);\n            }\n          }\n        } catch (err) {\n          _iterator6.e(err);\n        } finally {\n          _iterator6.f();\n        }\n      }\n    }\n\n    /**\n     * Checks if attribute list needs to be updated and possibly updates it.\n     *\n     * @private\n     * @param {module:engine/view/element~Element} viewElement The view element to update.\n     */\n  }, {\n    key: \"_updateAttrs\",\n    value: function _updateAttrs(viewElement) {\n      var domElement = this.domConverter.mapViewToDom(viewElement);\n      if (!domElement) {\n        // If there is no `domElement` it means that 'viewElement' is outdated as its mapping was updated\n        // in 'this._updateChildrenMappings()'. There is no need to process it as new view element which\n        // replaced old 'viewElement' mapping was also added to 'this.markedAttributes'\n        // in 'this._updateChildrenMappings()' so it will be processed separately.\n        return;\n      }\n      var domAttrKeys = Array.from(domElement.attributes).map(function (attr) {\n        return attr.name;\n      });\n      var viewAttrKeys = viewElement.getAttributeKeys();\n\n      // Add or overwrite attributes.\n      var _iterator7 = _createForOfIteratorHelper(viewAttrKeys),\n        _step7;\n      try {\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n          var key = _step7.value;\n          domElement.setAttribute(key, viewElement.getAttribute(key));\n        }\n\n        // Remove from DOM attributes which do not exists in the view.\n      } catch (err) {\n        _iterator7.e(err);\n      } finally {\n        _iterator7.f();\n      }\n      var _iterator8 = _createForOfIteratorHelper(domAttrKeys),\n        _step8;\n      try {\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n          var _key = _step8.value;\n          if (!viewElement.hasAttribute(_key)) {\n            domElement.removeAttribute(_key);\n          }\n        }\n      } catch (err) {\n        _iterator8.e(err);\n      } finally {\n        _iterator8.f();\n      }\n    }\n\n    /**\n     * Checks if elements child list needs to be updated and possibly updates it.\n     *\n     * @private\n     * @param {module:engine/view/element~Element} viewElement View element to update.\n     * @param {Object} options\n     * @param {module:engine/view/position~Position} options.inlineFillerPosition The position where the inline\n     * filler should be rendered.\n     */\n  }, {\n    key: \"_updateChildren\",\n    value: function _updateChildren(viewElement, options) {\n      var domElement = this.domConverter.mapViewToDom(viewElement);\n      if (!domElement) {\n        // If there is no `domElement` it means that it was already removed from DOM.\n        // There is no need to process it. It will be processed when re-inserted.\n        return;\n      }\n      var inlineFillerPosition = options.inlineFillerPosition;\n      var actualDomChildren = this.domConverter.mapViewToDom(viewElement).childNodes;\n      var expectedDomChildren = Array.from(this.domConverter.viewChildrenToDom(viewElement, domElement.ownerDocument, {\n        bind: true,\n        inlineFillerPosition: inlineFillerPosition\n      }));\n\n      // Inline filler element has to be created as it is present in the DOM, but not in the view. It is required\n      // during diffing so text nodes could be compared correctly and also during rendering to maintain\n      // proper order and indexes while updating the DOM.\n      if (inlineFillerPosition && inlineFillerPosition.parent === viewElement) {\n        addInlineFiller(domElement.ownerDocument, expectedDomChildren, inlineFillerPosition.offset);\n      }\n      var diff = this._diffNodeLists(actualDomChildren, expectedDomChildren);\n      var i = 0;\n      var nodesToUnbind = new Set();\n      var _iterator9 = _createForOfIteratorHelper(diff),\n        _step9;\n      try {\n        for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n          var action = _step9.value;\n          if (action === 'insert') {\n            insertAt(domElement, i, expectedDomChildren[i]);\n            i++;\n          } else if (action === 'delete') {\n            nodesToUnbind.add(actualDomChildren[i]);\n            remove(actualDomChildren[i]);\n          } else {\n            // 'equal'\n            // Force updating text nodes inside elements which did not change and do not need to be re-rendered (#1125).\n            this._markDescendantTextToSync(this.domConverter.domToView(expectedDomChildren[i]));\n            i++;\n          }\n        }\n\n        // Unbind removed nodes. When node does not have a parent it means that it was removed from DOM tree during\n        // comparision with the expected DOM. We don't need to check child nodes, because if child node was reinserted,\n        // it was moved to DOM tree out of the removed node.\n      } catch (err) {\n        _iterator9.e(err);\n      } finally {\n        _iterator9.f();\n      }\n      var _iterator0 = _createForOfIteratorHelper(nodesToUnbind),\n        _step0;\n      try {\n        for (_iterator0.s(); !(_step0 = _iterator0.n()).done;) {\n          var node = _step0.value;\n          if (!node.parentNode) {\n            this.domConverter.unbindDomElement(node);\n          }\n        }\n      } catch (err) {\n        _iterator0.e(err);\n      } finally {\n        _iterator0.f();\n      }\n    }\n\n    /**\n     * Shorthand for diffing two arrays or node lists of DOM nodes.\n     *\n     * @private\n     * @param {Array.<Node>|NodeList} actualDomChildren Actual DOM children\n     * @param {Array.<Node>|NodeList} expectedDomChildren Expected DOM children.\n     * @returns {Array.<String>} The list of actions based on the {@link module:utils/diff~diff} function.\n     */\n  }, {\n    key: \"_diffNodeLists\",\n    value: function _diffNodeLists(actualDomChildren, expectedDomChildren) {\n      actualDomChildren = filterOutFakeSelectionContainer(actualDomChildren, this._fakeSelectionContainer);\n      return diff(actualDomChildren, expectedDomChildren, sameNodes.bind(null, this.domConverter));\n    }\n\n    /**\n     * Finds DOM nodes that were replaced with the similar nodes (same tag name) in the view. All nodes are compared\n     * within one `insert`/`delete` action group, for example:\n     *\n     * \t\tActual DOM:\t\t<p><b>Foo</b>Bar<i>Baz</i><b>Bax</b></p>\n     * \t\tExpected DOM:\t<p>Bar<b>123</b><i>Baz</i><b>456</b></p>\n     * \t\tInput actions:\t[ insert, insert, delete, delete, equal, insert, delete ]\n     * \t\tOutput actions:\t[ insert, replace, delete, equal, replace ]\n     *\n     * @private\n     * @param {Array.<String>} actions Actions array which is a result of the {@link module:utils/diff~diff} function.\n     * @param {Array.<Node>|NodeList} actualDom Actual DOM children\n     * @param {Array.<Node>} expectedDom Expected DOM children.\n     * @returns {Array.<String>} Actions array modified with the `replace` actions.\n     */\n  }, {\n    key: \"_findReplaceActions\",\n    value: function _findReplaceActions(actions, actualDom, expectedDom) {\n      // If there is no both 'insert' and 'delete' actions, no need to check for replaced elements.\n      if (actions.indexOf('insert') === -1 || actions.indexOf('delete') === -1) {\n        return actions;\n      }\n      var newActions = [];\n      var actualSlice = [];\n      var expectedSlice = [];\n      var counter = {\n        equal: 0,\n        insert: 0,\n        delete: 0\n      };\n      var _iterator1 = _createForOfIteratorHelper(actions),\n        _step1;\n      try {\n        for (_iterator1.s(); !(_step1 = _iterator1.n()).done;) {\n          var action = _step1.value;\n          if (action === 'insert') {\n            expectedSlice.push(expectedDom[counter.equal + counter.insert]);\n          } else if (action === 'delete') {\n            actualSlice.push(actualDom[counter.equal + counter.delete]);\n          } else {\n            // equal\n            newActions = newActions.concat(diff(actualSlice, expectedSlice, areSimilar).map(function (x) {\n              return x === 'equal' ? 'replace' : x;\n            }));\n            newActions.push('equal');\n            // Reset stored elements on 'equal'.\n            actualSlice = [];\n            expectedSlice = [];\n          }\n          counter[action]++;\n        }\n      } catch (err) {\n        _iterator1.e(err);\n      } finally {\n        _iterator1.f();\n      }\n      return newActions.concat(diff(actualSlice, expectedSlice, areSimilar).map(function (x) {\n        return x === 'equal' ? 'replace' : x;\n      }));\n    }\n\n    /**\n     * Marks text nodes to be synchronized.\n     *\n     * If a text node is passed, it will be marked. If an element is passed, all descendant text nodes inside it will be marked.\n     *\n     * @private\n     * @param {module:engine/view/node~Node} viewNode View node to sync.\n     */\n  }, {\n    key: \"_markDescendantTextToSync\",\n    value: function _markDescendantTextToSync(viewNode) {\n      if (!viewNode) {\n        return;\n      }\n      if (viewNode.is('text')) {\n        this.markedTexts.add(viewNode);\n      } else if (viewNode.is('element')) {\n        var _iterator10 = _createForOfIteratorHelper(viewNode.getChildren()),\n          _step10;\n        try {\n          for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n            var child = _step10.value;\n            this._markDescendantTextToSync(child);\n          }\n        } catch (err) {\n          _iterator10.e(err);\n        } finally {\n          _iterator10.f();\n        }\n      }\n    }\n\n    /**\n     * Checks if the selection needs to be updated and possibly updates it.\n     *\n     * @private\n     */\n  }, {\n    key: \"_updateSelection\",\n    value: function _updateSelection() {\n      // If there is no selection - remove DOM and fake selections.\n      if (this.selection.rangeCount === 0) {\n        this._removeDomSelection();\n        this._removeFakeSelection();\n        return;\n      }\n      var domRoot = this.domConverter.mapViewToDom(this.selection.editableElement);\n\n      // Do nothing if there is no focus, or there is no DOM element corresponding to selection's editable element.\n      if (!this.isFocused || !domRoot) {\n        return;\n      }\n\n      // Render selection.\n      if (this.selection.isFake) {\n        this._updateFakeSelection(domRoot);\n      } else {\n        this._removeFakeSelection();\n        this._updateDomSelection(domRoot);\n      }\n    }\n\n    /**\n     * Updates the fake selection.\n     *\n     * @private\n     * @param {HTMLElement} domRoot A valid DOM root where the fake selection container should be added.\n     */\n  }, {\n    key: \"_updateFakeSelection\",\n    value: function _updateFakeSelection(domRoot) {\n      var domDocument = domRoot.ownerDocument;\n      if (!this._fakeSelectionContainer) {\n        this._fakeSelectionContainer = createFakeSelectionContainer(domDocument);\n      }\n      var container = this._fakeSelectionContainer;\n\n      // Bind fake selection container with the current selection *position*.\n      this.domConverter.bindFakeSelection(container, this.selection);\n      if (!this._fakeSelectionNeedsUpdate(domRoot)) {\n        return;\n      }\n      if (!container.parentElement || container.parentElement != domRoot) {\n        domRoot.appendChild(container);\n      }\n      container.textContent = this.selection.fakeSelectionLabel || \"\\xA0\";\n      var domSelection = domDocument.getSelection();\n      var domRange = domDocument.createRange();\n      domSelection.removeAllRanges();\n      domRange.selectNodeContents(container);\n      domSelection.addRange(domRange);\n    }\n\n    /**\n     * Updates the DOM selection.\n     *\n     * @private\n     * @param {HTMLElement} domRoot A valid DOM root where the DOM selection should be rendered.\n     */\n  }, {\n    key: \"_updateDomSelection\",\n    value: function _updateDomSelection(domRoot) {\n      var domSelection = domRoot.ownerDocument.defaultView.getSelection();\n\n      // Let's check whether DOM selection needs updating at all.\n      if (!this._domSelectionNeedsUpdate(domSelection)) {\n        return;\n      }\n\n      // Multi-range selection is not available in most browsers, and, at least in Chrome, trying to\n      // set such selection, that is not continuous, throws an error. Because of that, we will just use anchor\n      // and focus of view selection.\n      // Since we are not supporting multi-range selection, we also do not need to check if proper editable is\n      // selected. If there is any editable selected, it is okay (editable is taken from selection anchor).\n      var anchor = this.domConverter.viewPositionToDom(this.selection.anchor);\n      var focus = this.domConverter.viewPositionToDom(this.selection.focus);\n\n      // Focus the new editing host.\n      // Otherwise, FF may throw an error (https://github.com/ckeditor/ckeditor5/issues/721).\n      domRoot.focus();\n      domSelection.collapse(anchor.parent, anchor.offset);\n      domSelection.extend(focus.parent, focus.offset);\n\n      // Firefox–specific hack (https://github.com/ckeditor/ckeditor5-engine/issues/1439).\n      if (env.isGecko) {\n        fixGeckoSelectionAfterBr(focus, domSelection);\n      }\n    }\n\n    /**\n     * Checks whether a given DOM selection needs to be updated.\n     *\n     * @private\n     * @param {Selection} domSelection The DOM selection to check.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"_domSelectionNeedsUpdate\",\n    value: function _domSelectionNeedsUpdate(domSelection) {\n      if (!this.domConverter.isDomSelectionCorrect(domSelection)) {\n        // Current DOM selection is in incorrect position. We need to update it.\n        return true;\n      }\n      var oldViewSelection = domSelection && this.domConverter.domSelectionToView(domSelection);\n      if (oldViewSelection && this.selection.isEqual(oldViewSelection)) {\n        return false;\n      }\n\n      // If selection is not collapsed, it does not need to be updated if it is similar.\n      if (!this.selection.isCollapsed && this.selection.isSimilar(oldViewSelection)) {\n        // Selection did not changed and is correct, do not update.\n        return false;\n      }\n\n      // Selections are not similar.\n      return true;\n    }\n\n    /**\n     * Checks whether the fake selection needs to be updated.\n     *\n     * @private\n     * @param {HTMLElement} domRoot A valid DOM root where a new fake selection container should be added.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"_fakeSelectionNeedsUpdate\",\n    value: function _fakeSelectionNeedsUpdate(domRoot) {\n      var container = this._fakeSelectionContainer;\n      var domSelection = domRoot.ownerDocument.getSelection();\n\n      // Fake selection needs to be updated if there's no fake selection container, or the container currently sits\n      // in a different root.\n      if (!container || container.parentElement !== domRoot) {\n        return true;\n      }\n\n      // Make sure that the selection actually is within the fake selection.\n      if (domSelection.anchorNode !== container && !container.contains(domSelection.anchorNode)) {\n        return true;\n      }\n      return container.textContent !== this.selection.fakeSelectionLabel;\n    }\n\n    /**\n     * Removes the DOM selection.\n     *\n     * @private\n     */\n  }, {\n    key: \"_removeDomSelection\",\n    value: function _removeDomSelection() {\n      var _iterator11 = _createForOfIteratorHelper(this.domDocuments),\n        _step11;\n      try {\n        for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n          var doc = _step11.value;\n          var domSelection = doc.getSelection();\n          if (domSelection.rangeCount) {\n            var activeDomElement = doc.activeElement;\n            var viewElement = this.domConverter.mapDomToView(activeDomElement);\n            if (activeDomElement && viewElement) {\n              doc.getSelection().removeAllRanges();\n            }\n          }\n        }\n      } catch (err) {\n        _iterator11.e(err);\n      } finally {\n        _iterator11.f();\n      }\n    }\n\n    /**\n     * Removes the fake selection.\n     *\n     * @private\n     */\n  }, {\n    key: \"_removeFakeSelection\",\n    value: function _removeFakeSelection() {\n      var container = this._fakeSelectionContainer;\n      if (container) {\n        container.remove();\n      }\n    }\n\n    /**\n     * Checks if focus needs to be updated and possibly updates it.\n     *\n     * @private\n     */\n  }, {\n    key: \"_updateFocus\",\n    value: function _updateFocus() {\n      if (this.isFocused) {\n        var editable = this.selection.editableElement;\n        if (editable) {\n          this.domConverter.focus(editable);\n        }\n      }\n    }\n  }]);\n}();\nexport { Renderer as default };\nmix(Renderer, ObservableMixin);\n\n// Checks if provided element is editable.\n//\n// @private\n// @param {module:engine/view/element~Element} element\n// @returns {Boolean}\nfunction isEditable(element) {\n  if (element.getAttribute('contenteditable') == 'false') {\n    return false;\n  }\n  var parent = element.findAncestor(function (element) {\n    return element.hasAttribute('contenteditable');\n  });\n  return !parent || parent.getAttribute('contenteditable') == 'true';\n}\n\n// Adds inline filler at a given position.\n//\n// The position can be given as an array of DOM nodes and an offset in that array,\n// or a DOM parent element and an offset in that element.\n//\n// @private\n// @param {Document} domDocument\n// @param {Element|Array.<Node>} domParentOrArray\n// @param {Number} offset\n// @returns {Text} The DOM text node that contains an inline filler.\nfunction addInlineFiller(domDocument, domParentOrArray, offset) {\n  var childNodes = domParentOrArray instanceof Array ? domParentOrArray : domParentOrArray.childNodes;\n  var nodeAfterFiller = childNodes[offset];\n  if (isText(nodeAfterFiller)) {\n    nodeAfterFiller.data = INLINE_FILLER + nodeAfterFiller.data;\n    return nodeAfterFiller;\n  } else {\n    var fillerNode = domDocument.createTextNode(INLINE_FILLER);\n    if (Array.isArray(domParentOrArray)) {\n      childNodes.splice(offset, 0, fillerNode);\n    } else {\n      insertAt(domParentOrArray, offset, fillerNode);\n    }\n    return fillerNode;\n  }\n}\n\n// Whether two DOM nodes should be considered as similar.\n// Nodes are considered similar if they have the same tag name.\n//\n// @private\n// @param {Node} node1\n// @param {Node} node2\n// @returns {Boolean}\nfunction areSimilar(node1, node2) {\n  return isNode(node1) && isNode(node2) && !isText(node1) && !isText(node2) && node1.tagName.toLowerCase() === node2.tagName.toLowerCase();\n}\n\n// Whether two dom nodes should be considered as the same.\n// Two nodes which are considered the same are:\n//\n//\t\t* Text nodes with the same text.\n//\t\t* Element nodes represented by the same object.\n//\t\t* Two block filler elements.\n//\n// @private\n// @param {String} blockFillerMode Block filler mode, see {@link module:engine/view/domconverter~DomConverter#blockFillerMode}.\n// @param {Node} node1\n// @param {Node} node2\n// @returns {Boolean}\nfunction sameNodes(domConverter, actualDomChild, expectedDomChild) {\n  // Elements.\n  if (actualDomChild === expectedDomChild) {\n    return true;\n  }\n  // Texts.\n  else if (isText(actualDomChild) && isText(expectedDomChild)) {\n    return actualDomChild.data === expectedDomChild.data;\n  }\n  // Block fillers.\n  else if (domConverter.isBlockFiller(actualDomChild) && domConverter.isBlockFiller(expectedDomChild)) {\n    return true;\n  }\n\n  // Not matching types.\n  return false;\n}\n\n// The following is a Firefox–specific hack (https://github.com/ckeditor/ckeditor5-engine/issues/1439).\n// When the native DOM selection is at the end of the block and preceded by <br /> e.g.\n//\n//\t\t<p>foo<br/>[]</p>\n//\n// which happens a lot when using the soft line break, the browser fails to (visually) move the\n// caret to the new line. A quick fix is as simple as force–refreshing the selection with the same range.\nfunction fixGeckoSelectionAfterBr(focus, domSelection) {\n  var parent = focus.parent;\n\n  // This fix works only when the focus point is at the very end of an element.\n  // There is no point in running it in cases unrelated to the browser bug.\n  if (parent.nodeType != Node.ELEMENT_NODE || focus.offset != parent.childNodes.length - 1) {\n    return;\n  }\n  var childAtOffset = parent.childNodes[focus.offset];\n\n  // To stay on the safe side, the fix being as specific as possible, it targets only the\n  // selection which is at the very end of the element and preceded by <br />.\n  if (childAtOffset && childAtOffset.tagName == 'BR') {\n    domSelection.addRange(domSelection.getRangeAt(0));\n  }\n}\nfunction filterOutFakeSelectionContainer(domChildList, fakeSelectionContainer) {\n  var childList = Array.from(domChildList);\n  if (childList.length == 0 || !fakeSelectionContainer) {\n    return childList;\n  }\n  var last = childList[childList.length - 1];\n  if (last == fakeSelectionContainer) {\n    childList.pop();\n  }\n  return childList;\n}\n\n// Creates a fake selection container for a given document.\n//\n// @private\n// @param {Document} domDocument\n// @returns {HTMLElement}\nfunction createFakeSelectionContainer(domDocument) {\n  var container = domDocument.createElement('div');\n  Object.assign(container.style, {\n    position: 'fixed',\n    top: 0,\n    left: '-9999px',\n    // See https://github.com/ckeditor/ckeditor5/issues/752.\n    width: '42px'\n  });\n\n  // Fill it with a text node so we can update it later.\n  container.textContent = \"\\xA0\";\n  return container;\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/rooteditableelement\n */\n\nimport EditableElement from './editableelement';\nvar rootNameSymbol = Symbol('rootName');\n\n/**\n * Class representing a single root in the data view. A root can be either {@link ~RootEditableElement#isReadOnly editable or read-only},\n * but in both cases it is called \"an editable\". Roots can contain other {@link module:engine/view/editableelement~EditableElement\n * editable elements} making them \"nested editables\".\n *\n * @extends module:engine/view/editableelement~EditableElement\n */\nvar RootEditableElement = /*#__PURE__*/function (_EditableElement) {\n  /**\n   * Creates root editable element.\n   *\n   * @param {String} name Node name.\n   */\n  function RootEditableElement(name) {\n    var _this;\n    _classCallCheck(this, RootEditableElement);\n    _this = _callSuper(this, RootEditableElement, [name]);\n\n    /**\n     * Name of this root inside {@link module:engine/view/document~Document} that is an owner of this root. If no\n     * other name is set, `main` name is used.\n     *\n     * @readonly\n     * @member {String}\n     */\n    _this.rootName = 'main';\n    return _this;\n  }\n\n  /**\n   * Checks whether this object is of the given.\n   *\n   *\t\trootEditableElement.is( 'rootEditableElement' ); // -> true\n   *\t\trootEditableElement.is( 'editableElement' ); // -> true\n   *\t\trootEditableElement.is( 'element' ); // -> true\n   *\t\trootEditableElement.is( 'node' ); // -> true\n   *\t\trootEditableElement.is( 'view:rootEditableElement' ); // -> true\n   *\t\trootEditableElement.is( 'view:editableElement' ); // -> true\n   *\t\trootEditableElement.is( 'view:element' ); // -> true\n   *\t\trootEditableElement.is( 'view:node' ); // -> true\n   *\n   *\t\trootEditableElement.is( 'model:element' ); // -> false\n   *\t\trootEditableElement.is( 'documentFragment' ); // -> false\n   *\n   * Assuming that the object being checked is a root editbale element, you can also check its\n   * {@link module:engine/view/rooteditableelement~RootEditableElement#name name}:\n   *\n   *\t\trootEditableElement.is( 'div' ); // -> true if this is a div root editable element\n   *\t\trootEditableElement.is( 'rootEditableElement', 'div' ); // -> same as above\n   *\t\ttext.is( 'div' ); -> false\n   *\n   * {@link module:engine/view/node~Node#is Check the entire list of view objects} which implement the `is()` method.\n   *\n   * @param {String} type Type to check when `name` parameter is present.\n   * Otherwise, it acts like the `name` parameter.\n   * @param {String} [name] Element name.\n   * @returns {Boolean}\n   */\n  _inherits(RootEditableElement, _EditableElement);\n  return _createClass(RootEditableElement, [{\n    key: \"is\",\n    value: function is(type) {\n      var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var cutType = type.replace(/^view:/, '');\n      if (!name) {\n        return cutType == 'rootElement' || _superPropGet(RootEditableElement, \"is\", this, 3)([type]);\n      } else {\n        return cutType == 'rootElement' && name == this.name || _superPropGet(RootEditableElement, \"is\", this, 3)([type, name]);\n      }\n    }\n  }, {\n    key: \"rootName\",\n    get: function get() {\n      return this.getCustomProperty(rootNameSymbol);\n    },\n    set: function set(rootName) {\n      this._setCustomProperty(rootNameSymbol, rootName);\n    }\n\n    /**\n     * Overrides old element name and sets new one.\n     * This is needed because view roots are created before they are attached to the DOM.\n     * The name of the root element is temporary at this stage. It has to be changed when the\n     * view root element is attached to the DOM element.\n     *\n     * @protected\n     * @param {String} name The new name of element.\n     */\n  }, {\n    key: \"_name\",\n    set: function set(name) {\n      this.name = name;\n    }\n  }]);\n}(EditableElement);\nexport { RootEditableElement as default };","import _regenerator from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regenerator.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.anchor.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/selection\n */\n\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport Range from './range';\nimport Position from './position';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport EmitterMixin from '@ckeditor/ckeditor5-utils/src/emittermixin';\nimport Node from './node';\nimport Element from './element';\nimport count from '@ckeditor/ckeditor5-utils/src/count';\nimport isIterable from '@ckeditor/ckeditor5-utils/src/isiterable';\nimport DocumentSelection from './documentselection';\n\n/**\n * Class representing an arbirtary selection in the view.\n * See also {@link module:engine/view/documentselection~DocumentSelection}.\n *\n * New selection instances can be created via the constructor or one these methods:\n *\n * * {@link module:engine/view/view~View#createSelection `View#createSelection()`},\n * * {@link module:engine/view/upcastwriter~UpcastWriter#createSelection `UpcastWriter#createSelection()`}.\n *\n * A selection can consist of {@link module:engine/view/range~Range ranges} that can be set by using\n * the {@link module:engine/view/selection~Selection#setTo `Selection#setTo()`} method.\n */\nvar Selection = /*#__PURE__*/function () {\n  /**\n   * Creates new selection instance.\n   *\n   * **Note**: The selection constructor is available as a factory method:\n   *\n   * * {@link module:engine/view/view~View#createSelection `View#createSelection()`},\n   * * {@link module:engine/view/upcastwriter~UpcastWriter#createSelection `UpcastWriter#createSelection()`}.\n   *\n   * \t\t// Creates empty selection without ranges.\n   *\t\tconst selection = writer.createSelection();\n   *\n   *\t\t// Creates selection at the given range.\n   *\t\tconst range = writer.createRange( start, end );\n   *\t\tconst selection = writer.createSelection( range );\n   *\n   *\t\t// Creates selection at the given ranges\n   * \t\tconst ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ];\n   *\t\tconst selection = writer.createSelection( ranges );\n   *\n   *\t\t// Creates selection from the other selection.\n   *\t\tconst otherSelection = writer.createSelection();\n   *\t\tconst selection = writer.createSelection( otherSelection );\n   *\n   *\t\t// Creates selection from the document selection.\n   *\t\tconst selection = writer.createSelection( editor.editing.view.document.selection );\n   *\n   * \t\t// Creates selection at the given position.\n   *\t\tconst position = writer.createPositionFromPath( root, path );\n   *\t\tconst selection = writer.createSelection( position );\n   *\n   *\t\t// Creates collapsed selection at the position of given item and offset.\n   *\t\tconst paragraph = writer.createContainerElement( 'paragraph' );\n   *\t\tconst selection = writer.createSelection( paragraph, offset );\n   *\n   *\t\t// Creates a range inside an {@link module:engine/view/element~Element element} which starts before the\n   *\t\t// first child of that element and ends after the last child of that element.\n   *\t\tconst selection = writer.createSelection( paragraph, 'in' );\n   *\n   *\t\t// Creates a range on an {@link module:engine/view/item~Item item} which starts before the item and ends\n   *\t\t// just after the item.\n   *\t\tconst selection = writer.createSelection( paragraph, 'on' );\n   *\n   * `Selection`'s constructor allow passing additional options (`backward`, `fake` and `label`) as the last argument.\n   *\n   *\t\t// Creates backward selection.\n   *\t\tconst selection = writer.createSelection( range, { backward: true } );\n   *\n   * Fake selection does not render as browser native selection over selected elements and is hidden to the user.\n   * This way, no native selection UI artifacts are displayed to the user and selection over elements can be\n   * represented in other way, for example by applying proper CSS class.\n   *\n   * Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM\n   * (and be  properly handled by screen readers).\n   *\n   *\t\t// Creates fake selection with label.\n   *\t\tconst selection = writer.createSelection( range, { fake: true, label: 'foo' } );\n   *\n   * @param {module:engine/view/selection~Selectable} [selectable=null]\n   * @param {Number|'before'|'end'|'after'|'on'|'in'} [placeOrOffset] Offset or place when selectable is an `Item`.\n   * @param {Object} [options]\n   * @param {Boolean} [options.backward] Sets this selection instance to be backward.\n   * @param {Boolean} [options.fake] Sets this selection instance to be marked as `fake`.\n   * @param {String} [options.label] Label for the fake selection.\n   */\n  function Selection() {\n    var selectable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    var placeOrOffset = arguments.length > 1 ? arguments[1] : undefined;\n    var options = arguments.length > 2 ? arguments[2] : undefined;\n    _classCallCheck(this, Selection);\n    /**\n     * Stores all ranges that are selected.\n     *\n     * @protected\n     * @member {Array.<module:engine/view/range~Range>}\n     */\n    this._ranges = [];\n\n    /**\n     * Specifies whether the last added range was added as a backward or forward range.\n     *\n     * @protected\n     * @member {Boolean}\n     */\n    this._lastRangeBackward = false;\n\n    /**\n     * Specifies whether selection instance is fake.\n     *\n     * @private\n     * @member {Boolean}\n     */\n    this._isFake = false;\n\n    /**\n     * Fake selection's label.\n     *\n     * @private\n     * @member {String}\n     */\n    this._fakeSelectionLabel = '';\n    this.setTo(selectable, placeOrOffset, options);\n  }\n\n  /**\n   * Returns true if selection instance is marked as `fake`.\n   *\n   * @see #setTo\n   * @returns {Boolean}\n   */\n  return _createClass(Selection, [{\n    key: \"isFake\",\n    get: function get() {\n      return this._isFake;\n    }\n\n    /**\n     * Returns fake selection label.\n     *\n     * @see #setTo\n     * @returns {String}\n     */\n  }, {\n    key: \"fakeSelectionLabel\",\n    get: function get() {\n      return this._fakeSelectionLabel;\n    }\n\n    /**\n     * Selection anchor. Anchor may be described as a position where the selection starts. Together with\n     * {@link #focus focus} they define the direction of selection, which is important\n     * when expanding/shrinking selection. Anchor is always the start or end of the most recent added range.\n     * It may be a bit unintuitive when there are multiple ranges in selection.\n     *\n     * @see #focus\n     * @type {module:engine/view/position~Position}\n     */\n  }, {\n    key: \"anchor\",\n    get: function get() {\n      if (!this._ranges.length) {\n        return null;\n      }\n      var range = this._ranges[this._ranges.length - 1];\n      var anchor = this._lastRangeBackward ? range.end : range.start;\n      return anchor.clone();\n    }\n\n    /**\n     * Selection focus. Focus is a position where the selection ends.\n     *\n     * @see #anchor\n     * @type {module:engine/view/position~Position}\n     */\n  }, {\n    key: \"focus\",\n    get: function get() {\n      if (!this._ranges.length) {\n        return null;\n      }\n      var range = this._ranges[this._ranges.length - 1];\n      var focus = this._lastRangeBackward ? range.start : range.end;\n      return focus.clone();\n    }\n\n    /**\n     * Returns whether the selection is collapsed. Selection is collapsed when there is exactly one range which is\n     * collapsed.\n     *\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isCollapsed\",\n    get: function get() {\n      return this.rangeCount === 1 && this._ranges[0].isCollapsed;\n    }\n\n    /**\n     * Returns number of ranges in selection.\n     *\n     * @type {Number}\n     */\n  }, {\n    key: \"rangeCount\",\n    get: function get() {\n      return this._ranges.length;\n    }\n\n    /**\n     * Specifies whether the {@link #focus} precedes {@link #anchor}.\n     *\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isBackward\",\n    get: function get() {\n      return !this.isCollapsed && this._lastRangeBackward;\n    }\n\n    /**\n     * {@link module:engine/view/editableelement~EditableElement EditableElement} instance that contains this selection, or `null`\n     * if the selection is not inside an editable element.\n     *\n     * @type {module:engine/view/editableelement~EditableElement|null}\n     */\n  }, {\n    key: \"editableElement\",\n    get: function get() {\n      if (this.anchor) {\n        return this.anchor.editableElement;\n      }\n      return null;\n    }\n\n    /**\n     * Returns an iterable that contains copies of all ranges added to the selection.\n     *\n     * @returns {Iterable.<module:engine/view/range~Range>}\n     */\n  }, {\n    key: \"getRanges\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function getRanges() {\n      var _iterator, _step, range, _t;\n      return _regenerator().w(function (_context) {\n        while (1) switch (_context.p = _context.n) {\n          case 0:\n            _iterator = _createForOfIteratorHelper(this._ranges);\n            _context.p = 1;\n            _iterator.s();\n          case 2:\n            if ((_step = _iterator.n()).done) {\n              _context.n = 4;\n              break;\n            }\n            range = _step.value;\n            _context.n = 3;\n            return range.clone();\n          case 3:\n            _context.n = 2;\n            break;\n          case 4:\n            _context.n = 6;\n            break;\n          case 5:\n            _context.p = 5;\n            _t = _context.v;\n            _iterator.e(_t);\n          case 6:\n            _context.p = 6;\n            _iterator.f();\n            return _context.f(6);\n          case 7:\n            return _context.a(2);\n        }\n      }, getRanges, this, [[1, 5, 6, 7]]);\n    })\n    /**\n     * Returns copy of the first range in the selection. First range is the one which\n     * {@link module:engine/view/range~Range#start start} position {@link module:engine/view/position~Position#isBefore is before} start\n     * position of all other ranges (not to confuse with the first range added to the selection).\n     * Returns `null` if no ranges are added to selection.\n     *\n     * @returns {module:engine/view/range~Range|null}\n     */\n  }, {\n    key: \"getFirstRange\",\n    value: function getFirstRange() {\n      var first = null;\n      var _iterator2 = _createForOfIteratorHelper(this._ranges),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var range = _step2.value;\n          if (!first || range.start.isBefore(first.start)) {\n            first = range;\n          }\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      return first ? first.clone() : null;\n    }\n\n    /**\n     * Returns copy of the last range in the selection. Last range is the one which {@link module:engine/view/range~Range#end end}\n     * position {@link module:engine/view/position~Position#isAfter is after} end position of all other ranges (not to confuse\n     * with the last range added to the selection). Returns `null` if no ranges are added to selection.\n     *\n     * @returns {module:engine/view/range~Range|null}\n     */\n  }, {\n    key: \"getLastRange\",\n    value: function getLastRange() {\n      var last = null;\n      var _iterator3 = _createForOfIteratorHelper(this._ranges),\n        _step3;\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var range = _step3.value;\n          if (!last || range.end.isAfter(last.end)) {\n            last = range;\n          }\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n      return last ? last.clone() : null;\n    }\n\n    /**\n     * Returns copy of the first position in the selection. First position is the position that\n     * {@link module:engine/view/position~Position#isBefore is before} any other position in the selection ranges.\n     * Returns `null` if no ranges are added to selection.\n     *\n     * @returns {module:engine/view/position~Position|null}\n     */\n  }, {\n    key: \"getFirstPosition\",\n    value: function getFirstPosition() {\n      var firstRange = this.getFirstRange();\n      return firstRange ? firstRange.start.clone() : null;\n    }\n\n    /**\n     * Returns copy of the last position in the selection. Last position is the position that\n     * {@link module:engine/view/position~Position#isAfter is after} any other position in the selection ranges.\n     * Returns `null` if no ranges are added to selection.\n     *\n     * @returns {module:engine/view/position~Position|null}\n     */\n  }, {\n    key: \"getLastPosition\",\n    value: function getLastPosition() {\n      var lastRange = this.getLastRange();\n      return lastRange ? lastRange.end.clone() : null;\n    }\n\n    /**\n     * Checks whether, this selection is equal to given selection. Selections are equal if they have same directions,\n     * same number of ranges and all ranges from one selection equal to a range from other selection.\n     *\n     * @param {module:engine/view/selection~Selection|module:engine/view/documentselection~DocumentSelection} otherSelection\n     * Selection to compare with.\n     * @returns {Boolean} `true` if selections are equal, `false` otherwise.\n     */\n  }, {\n    key: \"isEqual\",\n    value: function isEqual(otherSelection) {\n      if (this.isFake != otherSelection.isFake) {\n        return false;\n      }\n      if (this.isFake && this.fakeSelectionLabel != otherSelection.fakeSelectionLabel) {\n        return false;\n      }\n      if (this.rangeCount != otherSelection.rangeCount) {\n        return false;\n      } else if (this.rangeCount === 0) {\n        return true;\n      }\n      if (!this.anchor.isEqual(otherSelection.anchor) || !this.focus.isEqual(otherSelection.focus)) {\n        return false;\n      }\n      var _iterator4 = _createForOfIteratorHelper(this._ranges),\n        _step4;\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var thisRange = _step4.value;\n          var found = false;\n          var _iterator5 = _createForOfIteratorHelper(otherSelection._ranges),\n            _step5;\n          try {\n            for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n              var otherRange = _step5.value;\n              if (thisRange.isEqual(otherRange)) {\n                found = true;\n                break;\n              }\n            }\n          } catch (err) {\n            _iterator5.e(err);\n          } finally {\n            _iterator5.f();\n          }\n          if (!found) {\n            return false;\n          }\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n      return true;\n    }\n\n    /**\n     * Checks whether this selection is similar to given selection. Selections are similar if they have same directions, same\n     * number of ranges, and all {@link module:engine/view/range~Range#getTrimmed trimmed} ranges from one selection are\n     * equal to any trimmed range from other selection.\n     *\n     * @param {module:engine/view/selection~Selection|module:engine/view/documentselection~DocumentSelection} otherSelection\n     * Selection to compare with.\n     * @returns {Boolean} `true` if selections are similar, `false` otherwise.\n     */\n  }, {\n    key: \"isSimilar\",\n    value: function isSimilar(otherSelection) {\n      if (this.isBackward != otherSelection.isBackward) {\n        return false;\n      }\n      var numOfRangesA = count(this.getRanges());\n      var numOfRangesB = count(otherSelection.getRanges());\n\n      // If selections have different number of ranges, they cannot be similar.\n      if (numOfRangesA != numOfRangesB) {\n        return false;\n      }\n\n      // If both selections have no ranges, they are similar.\n      if (numOfRangesA == 0) {\n        return true;\n      }\n\n      // Check if each range in one selection has a similar range in other selection.\n      var _iterator6 = _createForOfIteratorHelper(this.getRanges()),\n        _step6;\n      try {\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n          var rangeA = _step6.value;\n          rangeA = rangeA.getTrimmed();\n          var found = false;\n          var _iterator7 = _createForOfIteratorHelper(otherSelection.getRanges()),\n            _step7;\n          try {\n            for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n              var rangeB = _step7.value;\n              rangeB = rangeB.getTrimmed();\n              if (rangeA.start.isEqual(rangeB.start) && rangeA.end.isEqual(rangeB.end)) {\n                found = true;\n                break;\n              }\n            }\n\n            // For `rangeA`, neither range in `otherSelection` was similar. So selections are not similar.\n          } catch (err) {\n            _iterator7.e(err);\n          } finally {\n            _iterator7.f();\n          }\n          if (!found) {\n            return false;\n          }\n        }\n\n        // There were no ranges that weren't matched. Selections are similar.\n      } catch (err) {\n        _iterator6.e(err);\n      } finally {\n        _iterator6.f();\n      }\n      return true;\n    }\n\n    /**\n     * Returns the selected element. {@link module:engine/view/element~Element Element} is considered as selected if there is only\n     * one range in the selection, and that range contains exactly one element.\n     * Returns `null` if there is no selected element.\n     *\n     * @returns {module:engine/view/element~Element|null}\n     */\n  }, {\n    key: \"getSelectedElement\",\n    value: function getSelectedElement() {\n      if (this.rangeCount !== 1) {\n        return null;\n      }\n      var range = this.getFirstRange();\n      var nodeAfterStart = range.start.nodeAfter;\n      var nodeBeforeEnd = range.end.nodeBefore;\n\n      // Handle the situation when selection position is at the beginning / at the end of a text node.\n      // In such situation `.nodeAfter` and `.nodeBefore` are `null` but the selection still might be spanning\n      // over one element.\n      //\n      // <p>Foo{<span class=\"widget\"></span>}bar</p> vs <p>Foo[<span class=\"widget\"></span>]bar</p>\n      //\n      // These are basically the same selections, only the difference is if the selection position is at\n      // at the end/at the beginning of a text node or just before/just after the text node.\n      //\n      if (range.start.parent.is('text') && range.start.isAtEnd && range.start.parent.nextSibling) {\n        nodeAfterStart = range.start.parent.nextSibling;\n      }\n      if (range.end.parent.is('text') && range.end.isAtStart && range.end.parent.previousSibling) {\n        nodeBeforeEnd = range.end.parent.previousSibling;\n      }\n      return nodeAfterStart instanceof Element && nodeAfterStart == nodeBeforeEnd ? nodeAfterStart : null;\n    }\n\n    /**\n     * Sets this selection's ranges and direction to the specified location based on the given\n     * {@link module:engine/view/selection~Selectable selectable}.\n     *\n     *\t\t// Sets selection to the given range.\n     *\t\tconst range = writer.createRange( start, end );\n     *\t\tselection.setTo( range );\n     *\n     *\t\t// Sets selection to given ranges.\n     * \t\tconst ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ];\n     *\t\tselection.setTo( range );\n     *\n     *\t\t// Sets selection to the other selection.\n     *\t\tconst otherSelection = writer.createSelection();\n     *\t\tselection.setTo( otherSelection );\n     *\n     *\t \t// Sets selection to contents of DocumentSelection.\n     *\t\tselection.setTo( editor.editing.view.document.selection );\n     *\n     * \t\t// Sets collapsed selection at the given position.\n     *\t\tconst position = writer.createPositionAt( root, path );\n     *\t\tselection.setTo( position );\n     *\n     * \t\t// Sets collapsed selection at the position of given item and offset.\n     *\t\tselection.setTo( paragraph, offset );\n     *\n     * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n     * that element and ends after the last child of that element.\n     *\n     *\t\tselection.setTo( paragraph, 'in' );\n     *\n     * Creates a range on an {@link module:engine/view/item~Item item} which starts before the item and ends just after the item.\n     *\n     *\t\tselection.setTo( paragraph, 'on' );\n     *\n     * \t\t// Clears selection. Removes all ranges.\n     *\t\tselection.setTo( null );\n     *\n     * `Selection#setTo()` method allow passing additional options (`backward`, `fake` and `label`) as the last argument.\n     *\n     *\t\t// Sets selection as backward.\n     *\t\tselection.setTo( range, { backward: true } );\n     *\n     * Fake selection does not render as browser native selection over selected elements and is hidden to the user.\n     * This way, no native selection UI artifacts are displayed to the user and selection over elements can be\n     * represented in other way, for example by applying proper CSS class.\n     *\n     * Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM\n     * (and be  properly handled by screen readers).\n     *\n     *\t\t// Creates fake selection with label.\n     *\t\tselection.setTo( range, { fake: true, label: 'foo' } );\n     *\n     * @fires change\n     * @param {module:engine/view/selection~Selectable} selectable\n     * @param {Number|'before'|'end'|'after'|'on'|'in'} [placeOrOffset] Sets place or offset of the selection.\n     * @param {Object} [options]\n     * @param {Boolean} [options.backward] Sets this selection instance to be backward.\n     * @param {Boolean} [options.fake] Sets this selection instance to be marked as `fake`.\n     * @param {String} [options.label] Label for the fake selection.\n     */\n  }, {\n    key: \"setTo\",\n    value: function setTo(selectable, placeOrOffset, options) {\n      if (selectable === null) {\n        this._setRanges([]);\n        this._setFakeOptions(placeOrOffset);\n      } else if (selectable instanceof Selection || selectable instanceof DocumentSelection) {\n        this._setRanges(selectable.getRanges(), selectable.isBackward);\n        this._setFakeOptions({\n          fake: selectable.isFake,\n          label: selectable.fakeSelectionLabel\n        });\n      } else if (selectable instanceof Range) {\n        this._setRanges([selectable], placeOrOffset && placeOrOffset.backward);\n        this._setFakeOptions(placeOrOffset);\n      } else if (selectable instanceof Position) {\n        this._setRanges([new Range(selectable)]);\n        this._setFakeOptions(placeOrOffset);\n      } else if (selectable instanceof Node) {\n        var backward = !!options && !!options.backward;\n        var range;\n        if (placeOrOffset === undefined) {\n          /**\n           * selection.setTo requires the second parameter when the first parameter is a node.\n           *\n           * @error view-selection-setTo-required-second-parameter\n           */\n          throw new CKEditorError('view-selection-setTo-required-second-parameter: ' + 'selection.setTo requires the second parameter when the first parameter is a node.', this);\n        } else if (placeOrOffset == 'in') {\n          range = Range._createIn(selectable);\n        } else if (placeOrOffset == 'on') {\n          range = Range._createOn(selectable);\n        } else {\n          range = new Range(Position._createAt(selectable, placeOrOffset));\n        }\n        this._setRanges([range], backward);\n        this._setFakeOptions(options);\n      } else if (isIterable(selectable)) {\n        // We assume that the selectable is an iterable of ranges.\n        // Array.from() is used to prevent setting ranges to the old iterable\n        this._setRanges(selectable, placeOrOffset && placeOrOffset.backward);\n        this._setFakeOptions(placeOrOffset);\n      } else {\n        /**\n         * Cannot set selection to given place.\n         *\n         * @error view-selection-setTo-not-selectable\n         */\n        throw new CKEditorError('view-selection-setTo-not-selectable: Cannot set selection to given place.', this);\n      }\n      this.fire('change');\n    }\n\n    /**\n     * Moves {@link #focus} to the specified location.\n     *\n     * The location can be specified in the same form as {@link module:engine/view/view~View#createPositionAt view.createPositionAt()}\n     * parameters.\n     *\n     * @fires change\n     * @param {module:engine/view/item~Item|module:engine/view/position~Position} itemOrPosition\n     * @param {Number|'end'|'before'|'after'} [offset] Offset or one of the flags. Used only when\n     * first parameter is a {@link module:engine/view/item~Item view item}.\n     */\n  }, {\n    key: \"setFocus\",\n    value: function setFocus(itemOrPosition, offset) {\n      if (this.anchor === null) {\n        /**\n         * Cannot set selection focus if there are no ranges in selection.\n         *\n         * @error view-selection-setFocus-no-ranges\n         */\n        throw new CKEditorError('view-selection-setFocus-no-ranges: Cannot set selection focus if there are no ranges in selection.', this);\n      }\n      var newFocus = Position._createAt(itemOrPosition, offset);\n      if (newFocus.compareWith(this.focus) == 'same') {\n        return;\n      }\n      var anchor = this.anchor;\n      this._ranges.pop();\n      if (newFocus.compareWith(anchor) == 'before') {\n        this._addRange(new Range(newFocus, anchor), true);\n      } else {\n        this._addRange(new Range(anchor, newFocus));\n      }\n      this.fire('change');\n    }\n\n    /**\n     * Checks whether this object is of the given type.\n     *\n     *\t\tselection.is( 'selection' ); // -> true\n     *\t\tselection.is( 'view:selection' ); // -> true\n     *\n     *\t\tselection.is( 'model:selection' ); // -> false\n     *\t\tselection.is( 'element' ); // -> false\n     *\t\tselection.is( 'range' ); // -> false\n     *\n     * {@link module:engine/view/node~Node#is Check the entire list of view objects} which implement the `is()` method.\n     *\n     * @param {String} type\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'selection' || type == 'view:selection';\n    }\n\n    /**\n     * Replaces all ranges that were added to the selection with given array of ranges. Last range of the array\n     * is treated like the last added range and is used to set {@link #anchor anchor} and {@link #focus focus}.\n     * Accepts a flag describing in which way the selection is made.\n     *\n     * @private\n     * @param {Iterable.<module:engine/view/range~Range>} newRanges Iterable object of ranges to set.\n     * @param {Boolean} [isLastBackward=false] Flag describing if last added range was selected forward - from start to end\n     * (`false`) or backward - from end to start (`true`). Defaults to `false`.\n     */\n  }, {\n    key: \"_setRanges\",\n    value: function _setRanges(newRanges) {\n      var isLastBackward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      // New ranges should be copied to prevent removing them by setting them to `[]` first.\n      // Only applies to situations when selection is set to the same selection or same selection's ranges.\n      newRanges = Array.from(newRanges);\n      this._ranges = [];\n      var _iterator8 = _createForOfIteratorHelper(newRanges),\n        _step8;\n      try {\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n          var range = _step8.value;\n          this._addRange(range);\n        }\n      } catch (err) {\n        _iterator8.e(err);\n      } finally {\n        _iterator8.f();\n      }\n      this._lastRangeBackward = !!isLastBackward;\n    }\n\n    /**\n     * Sets this selection instance to be marked as `fake`. A fake selection does not render as browser native selection\n     * over selected elements and is hidden to the user. This way, no native selection UI artifacts are displayed to\n     * the user and selection over elements can be represented in other way, for example by applying proper CSS class.\n     *\n     * Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM (and be\n     * properly handled by screen readers).\n     *\n     * @private\n     * @param {Object} [options] Options.\n     * @param {Boolean} [options.fake] If set to true selection will be marked as `fake`.\n     * @param {String} [options.label=''] Fake selection label.\n     */\n  }, {\n    key: \"_setFakeOptions\",\n    value: function _setFakeOptions() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      this._isFake = !!options.fake;\n      this._fakeSelectionLabel = options.fake ? options.label || '' : '';\n    }\n\n    /**\n     * Adds a range to the selection. Added range is copied. This means that passed range is not saved in the\n     * selection instance and you can safely operate on it.\n     *\n     * Accepts a flag describing in which way the selection is made - passed range might be selected from\n     * {@link module:engine/view/range~Range#start start} to {@link module:engine/view/range~Range#end end}\n     * or from {@link module:engine/view/range~Range#end end} to {@link module:engine/view/range~Range#start start}.\n     * The flag is used to set {@link #anchor anchor} and {@link #focus focus} properties.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-selection-range-intersects` if added range intersects\n     * with ranges already stored in Selection instance.\n     *\n     * @private\n     * @fires change\n     * @param {module:engine/view/range~Range} range\n     * @param {Boolean} [isBackward]\n     */\n  }, {\n    key: \"_addRange\",\n    value: function _addRange(range) {\n      var isBackward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      if (!(range instanceof Range)) {\n        /**\n         * Selection range set to an object that is not an instance of {@link module:engine/view/range~Range}.\n         *\n         * @error view-selection-add-range-not-range\n         */\n        throw new CKEditorError('view-selection-add-range-not-range: ' + 'Selection range set to an object that is not an instance of view.Range', this);\n      }\n      this._pushRange(range);\n      this._lastRangeBackward = !!isBackward;\n    }\n\n    /**\n     * Adds range to selection - creates copy of given range so it can be safely used and modified.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-selection-range-intersects` if added range intersects\n     * with ranges already stored in selection instance.\n     *\n     * @private\n     * @param {module:engine/view/range~Range} range\n     */\n  }, {\n    key: \"_pushRange\",\n    value: function _pushRange(range) {\n      var _iterator9 = _createForOfIteratorHelper(this._ranges),\n        _step9;\n      try {\n        for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n          var storedRange = _step9.value;\n          if (range.isIntersecting(storedRange)) {\n            /**\n             * Trying to add a range that intersects with another range from selection.\n             *\n             * @error view-selection-range-intersects\n             * @param {module:engine/view/range~Range} addedRange Range that was added to the selection.\n             * @param {module:engine/view/range~Range} intersectingRange Range from selection that intersects with `addedRange`.\n             */\n            throw new CKEditorError('view-selection-range-intersects: Trying to add a range that intersects with another range from selection.', this, {\n              addedRange: range,\n              intersectingRange: storedRange\n            });\n          }\n        }\n      } catch (err) {\n        _iterator9.e(err);\n      } finally {\n        _iterator9.f();\n      }\n      this._ranges.push(new Range(range.start, range.end));\n    }\n\n    /**\n     * Fired whenever selection ranges are changed through {@link ~Selection Selection API}.\n     *\n     * @event change\n     */\n  }]);\n}();\nexport { Selection as default };\nmix(Selection, EmitterMixin);\n\n/**\n * An entity that is used to set selection.\n *\n * See also {@link module:engine/view/selection~Selection#setTo}\n *\n * @typedef {\n *    module:engine/view/selection~Selection|\n *    module:engine/view/documentselection~DocumentSelection|\n *    module:engine/view/position~Position|\n *    Iterable.<module:engine/view/range~Range>|\n *    module:engine/view/range~Range|\n *    module:engine/view/item~Item|\n *    null\n * } module:engine/view/selection~Selectable\n */","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/text\n */\n\nimport Node from './node';\n\n/**\n * Tree view text node.\n *\n * The constructor of this class shouldn't be used directly. To create new Text instances\n * use the {@link module:engine/view/downcastwriter~DowncastWriter#createText `DowncastWriter#createText()`}\n * method when working on data downcasted from the model or the\n * {@link module:engine/view/upcastwriter~UpcastWriter#createText `UpcastWriter#createText()`}\n * method when working on non-semantic views.\n *\n * @extends module:engine/view/node~Node\n */\nvar Text = /*#__PURE__*/function (_Node) {\n  /**\n   * Creates a tree view text node.\n   *\n   * @protected\n   * @param {String} data The text's data.\n   */\n  function Text(data) {\n    var _this;\n    _classCallCheck(this, Text);\n    _this = _callSuper(this, Text);\n\n    /**\n     * The text content.\n     *\n     * Setting the data fires the {@link module:engine/view/node~Node#event:change:text change event}.\n     *\n     * @protected\n     * @member {String} module:engine/view/text~Text#_textData\n     */\n    _this._textData = data;\n    return _this;\n  }\n\n  /**\n   * Checks whether this object is of the given type.\n   *\n   *\t\ttext.is( 'text' ); // -> true\n   *\t\ttext.is( 'node' ); // -> true\n   *\t\ttext.is( 'view:text' ); // -> true\n   *\t\ttext.is( 'view:node' ); // -> true\n   *\n   *\t\ttext.is( 'model:text' ); // -> false\n   *\t\ttext.is( 'element' ); // -> false\n   *\t\ttext.is( 'range' ); // -> false\n   *\n   * {@link module:engine/view/node~Node#is Check the entire list of view objects} which implement the `is()` method.\n   *\n   * @param {String} type\n   * @returns {Boolean}\n   */\n  _inherits(Text, _Node);\n  return _createClass(Text, [{\n    key: \"is\",\n    value: function is(type) {\n      return type == 'text' || type == 'view:text' || _superPropGet(Text, \"is\", this, 3)([type]);\n    }\n\n    /**\n     * The text content.\n     *\n     * @readonly\n     * @type {String}\n     */\n  }, {\n    key: \"data\",\n    get: function get() {\n      return this._textData;\n    }\n\n    /**\n     * This getter is required when using the addition assignment operator on protected property:\n     *\n     *\t\tconst foo = downcastWriter.createText( 'foo' );\n     *\t\tconst bar = downcastWriter.createText( 'bar' );\n     *\n     *\t\tfoo._data += bar.data;   // executes: `foo._data = foo._data + bar.data`\n     *\t\tconsole.log( foo.data ); // prints: 'foobar'\n     *\n     * If the protected getter didn't exist, `foo._data` will return `undefined` and result of the merge will be invalid.\n     *\n     * @protected\n     * @type {String}\n     */\n  }, {\n    key: \"_data\",\n    get: function get() {\n      return this.data;\n    }\n\n    /**\n     * Sets data and fires the {@link module:engine/view/node~Node#event:change:text change event}.\n     *\n     * @protected\n     * @fires change:text\n     * @param {String} data New data for the text node.\n     */,\n    set: function set(data) {\n      this._fireChange('text', this);\n      this._textData = data;\n    }\n\n    /**\n     * Checks if this text node is similar to other text node.\n     * Both nodes should have the same data to be considered as similar.\n     *\n     * @param {module:engine/view/text~Text} otherNode Node to check if it is same as this node.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"isSimilar\",\n    value: function isSimilar(otherNode) {\n      if (!(otherNode instanceof Text)) {\n        return false;\n      }\n      return this === otherNode || this.data === otherNode.data;\n    }\n\n    /**\n     * Clones this node.\n     *\n     * @protected\n     * @returns {module:engine/view/text~Text} Text node that is a clone of this node.\n     */\n  }, {\n    key: \"_clone\",\n    value: function _clone() {\n      return new Text(this.data);\n    }\n  }]);\n}(Node);\nexport { Text as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/textproxy\n */\n\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * TextProxy is a wrapper for substring of {@link module:engine/view/text~Text}. Instance of this class is created by\n * {@link module:engine/view/treewalker~TreeWalker} when only a part of {@link module:engine/view/text~Text} needs to be returned.\n *\n * `TextProxy` has an API similar to {@link module:engine/view/text~Text Text} and allows to do most of the common tasks performed\n * on view nodes.\n *\n * **Note:** Some `TextProxy` instances may represent whole text node, not just a part of it.\n * See {@link module:engine/view/textproxy~TextProxy#isPartial}.\n *\n * **Note:** `TextProxy` is a readonly interface.\n *\n * **Note:** `TextProxy` instances are created on the fly basing on the current state of parent {@link module:engine/view/text~Text}.\n * Because of this it is highly unrecommended to store references to `TextProxy instances because they might get\n * invalidated due to operations on Document. Also TextProxy is not a {@link module:engine/view/node~Node} so it can not be\n * inserted as a child of {@link module:engine/view/element~Element}.\n *\n * `TextProxy` instances are created by {@link module:engine/view/treewalker~TreeWalker view tree walker}. You should not need to create\n * an instance of this class by your own.\n */\nvar TextProxy = /*#__PURE__*/function () {\n  /**\n   * Creates a text proxy.\n   *\n   * @protected\n   * @param {module:engine/view/text~Text} textNode Text node which part is represented by this text proxy.\n   * @param {Number} offsetInText Offset in {@link module:engine/view/textproxy~TextProxy#textNode text node}\n   * from which the text proxy starts.\n   * @param {Number} length Text proxy length, that is how many text node's characters, starting from `offsetInText` it represents.\n   * @constructor\n   */\n  function TextProxy(textNode, offsetInText, length) {\n    _classCallCheck(this, TextProxy);\n    /**\n     * Reference to the {@link module:engine/view/text~Text} element which TextProxy is a substring.\n     *\n     * @readonly\n     * @member {module:engine/view/text~Text} module:engine/view/textproxy~TextProxy#textNode\n     */\n    this.textNode = textNode;\n    if (offsetInText < 0 || offsetInText > textNode.data.length) {\n      /**\n       * Given offsetInText value is incorrect.\n       *\n       * @error view-textproxy-wrong-offsetintext\n       */\n      throw new CKEditorError('view-textproxy-wrong-offsetintext: Given offsetInText value is incorrect.', this);\n    }\n    if (length < 0 || offsetInText + length > textNode.data.length) {\n      /**\n       * Given length value is incorrect.\n       *\n       * @error view-textproxy-wrong-length\n       */\n      throw new CKEditorError('view-textproxy-wrong-length: Given length value is incorrect.', this);\n    }\n\n    /**\n     * Text data represented by this text proxy.\n     *\n     * @readonly\n     * @member {String} module:engine/view/textproxy~TextProxy#data\n     */\n    this.data = textNode.data.substring(offsetInText, offsetInText + length);\n\n    /**\n     * Offset in the `textNode` where this `TextProxy` instance starts.\n     *\n     * @readonly\n     * @member {Number} module:engine/view/textproxy~TextProxy#offsetInText\n     */\n    this.offsetInText = offsetInText;\n  }\n\n  /**\n   * Offset size of this node.\n   *\n   * @readonly\n   * @type {Number}\n   */\n  return _createClass(TextProxy, [{\n    key: \"offsetSize\",\n    get: function get() {\n      return this.data.length;\n    }\n\n    /**\n     * Flag indicating whether `TextProxy` instance covers only part of the original {@link module:engine/view/text~Text text node}\n     * (`true`) or the whole text node (`false`).\n     *\n     * This is `false` when text proxy starts at the very beginning of {@link module:engine/view/textproxy~TextProxy#textNode textNode}\n     * ({@link module:engine/view/textproxy~TextProxy#offsetInText offsetInText} equals `0`) and text proxy sizes is equal to\n     * text node size.\n     *\n     * @readonly\n     * @type {Boolean}\n     */\n  }, {\n    key: \"isPartial\",\n    get: function get() {\n      return this.data.length !== this.textNode.data.length;\n    }\n\n    /**\n     * Parent of this text proxy, which is same as parent of text node represented by this text proxy.\n     *\n     * @readonly\n     * @type {module:engine/view/element~Element|module:engine/view/documentfragment~DocumentFragment|null}\n     */\n  }, {\n    key: \"parent\",\n    get: function get() {\n      return this.textNode.parent;\n    }\n\n    /**\n     * Root of this text proxy, which is same as root of text node represented by this text proxy.\n     *\n     * @readonly\n     * @type {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment}\n     */\n  }, {\n    key: \"root\",\n    get: function get() {\n      return this.textNode.root;\n    }\n\n    /**\n     * {@link module:engine/view/document~Document View document} that owns this text proxy, or `null` if the text proxy is inside\n     * {@link module:engine/view/documentfragment~DocumentFragment document fragment}.\n     *\n     * @readonly\n     * @type {module:engine/view/document~Document|null}\n     */\n  }, {\n    key: \"document\",\n    get: function get() {\n      return this.textNode.document;\n    }\n\n    /**\n     * Checks whether this object is of the given type.\n     *\n     *\t\ttextProxy.is( 'textProxy' ); // -> true\n     *\t\ttextProxy.is( 'view:textProxy' ); // -> true\n     *\n     *\t\ttextProxy.is( 'model:textProxy' ); // -> false\n     *\t\ttextProxy.is( 'element' ); // -> false\n     *\t\ttextProxy.is( 'range' ); // -> false\n     *\n     * {@link module:engine/view/node~Node#is Check the entire list of view objects} which implement the `is()` method.\n     *\n     * @param {String} type\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"is\",\n    value: function is(type) {\n      return type == 'textProxy' || type == 'view:textProxy';\n    }\n\n    /**\n     * Returns ancestors array of this text proxy.\n     *\n     * @param {Object} options Options object.\n     * @param {Boolean} [options.includeSelf=false] When set to `true` {#textNode} will be also included in parent's array.\n     * @param {Boolean} [options.parentFirst=false] When set to `true`, array will be sorted from text proxy parent to\n     * root element, otherwise root element will be the first item in the array.\n     * @returns {Array} Array with ancestors.\n     */\n  }, {\n    key: \"getAncestors\",\n    value: function getAncestors() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n        includeSelf: false,\n        parentFirst: false\n      };\n      var ancestors = [];\n      var parent = options.includeSelf ? this.textNode : this.parent;\n      while (parent !== null) {\n        ancestors[options.parentFirst ? 'push' : 'unshift'](parent);\n        parent = parent.parent;\n      }\n      return ancestors;\n    }\n  }]);\n}();\nexport { TextProxy as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/treewalker\n */\n\nimport Element from './element';\nimport Text from './text';\nimport TextProxy from './textproxy';\nimport Position from './position';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * Position iterator class. It allows to iterate forward and backward over the document.\n */\nvar TreeWalker = /*#__PURE__*/function () {\n  /**\n   * Creates a range iterator. All parameters are optional, but you have to specify either `boundaries` or `startPosition`.\n   *\n   * @constructor\n   * @param {Object} options Object with configuration.\n   * @param {module:engine/view/range~Range} [options.boundaries=null] Range to define boundaries of the iterator.\n   * @param {module:engine/view/position~Position} [options.startPosition] Starting position.\n   * @param {'forward'|'backward'} [options.direction='forward'] Walking direction.\n   * @param {Boolean} [options.singleCharacters=false] Flag indicating whether all characters from\n   * {@link module:engine/view/text~Text} should be returned as one {@link module:engine/view/text~Text} (`false`) ore one by one as\n   * {@link module:engine/view/textproxy~TextProxy} (`true`).\n   * @param {Boolean} [options.shallow=false] Flag indicating whether iterator should enter elements or not. If the\n   * iterator is shallow child nodes of any iterated node will not be returned along with `elementEnd` tag.\n   * @param {Boolean} [options.ignoreElementEnd=false] Flag indicating whether iterator should ignore `elementEnd`\n   * tags. If the option is true walker will not return a parent node of start position. If this option is `true`\n   * each {@link module:engine/view/element~Element} will be returned once, while if the option is `false` they might be returned\n   * twice: for `'elementStart'` and `'elementEnd'`.\n   */\n  function TreeWalker() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _classCallCheck(this, TreeWalker);\n    if (!options.boundaries && !options.startPosition) {\n      /**\n       * Neither boundaries nor starting position have been defined.\n       *\n       * @error view-tree-walker-no-start-position\n       */\n      throw new CKEditorError('view-tree-walker-no-start-position: Neither boundaries nor starting position have been defined.', null);\n    }\n    if (options.direction && options.direction != 'forward' && options.direction != 'backward') {\n      throw new CKEditorError('view-tree-walker-unknown-direction: Only `backward` and `forward` direction allowed.', options.startPosition, {\n        direction: options.direction\n      });\n    }\n\n    /**\n     * Iterator boundaries.\n     *\n     * When the iterator is walking `'forward'` on the end of boundary or is walking `'backward'`\n     * on the start of boundary, then `{ done: true }` is returned.\n     *\n     * If boundaries are not defined they are set before first and after last child of the root node.\n     *\n     * @readonly\n     * @member {module:engine/view/range~Range} module:engine/view/treewalker~TreeWalker#boundaries\n     */\n    this.boundaries = options.boundaries || null;\n\n    /**\n     * Iterator position. If start position is not defined then position depends on {@link #direction}. If direction is\n     * `'forward'` position starts form the beginning, when direction is `'backward'` position starts from the end.\n     *\n     * @readonly\n     * @member {module:engine/view/position~Position} module:engine/view/treewalker~TreeWalker#position\n     */\n    if (options.startPosition) {\n      this.position = Position._createAt(options.startPosition);\n    } else {\n      this.position = Position._createAt(options.boundaries[options.direction == 'backward' ? 'end' : 'start']);\n    }\n\n    /**\n     * Walking direction. Defaults `'forward'`.\n     *\n     * @readonly\n     * @member {'backward'|'forward'} module:engine/view/treewalker~TreeWalker#direction\n     */\n    this.direction = options.direction || 'forward';\n\n    /**\n     * Flag indicating whether all characters from {@link module:engine/view/text~Text} should be returned as one\n     * {@link module:engine/view/text~Text} or one by one as {@link module:engine/view/textproxy~TextProxy}.\n     *\n     * @readonly\n     * @member {Boolean} module:engine/view/treewalker~TreeWalker#singleCharacters\n     */\n    this.singleCharacters = !!options.singleCharacters;\n\n    /**\n     * Flag indicating whether iterator should enter elements or not. If the iterator is shallow child nodes of any\n     * iterated node will not be returned along with `elementEnd` tag.\n     *\n     * @readonly\n     * @member {Boolean} module:engine/view/treewalker~TreeWalker#shallow\n     */\n    this.shallow = !!options.shallow;\n\n    /**\n     * Flag indicating whether iterator should ignore `elementEnd` tags. If set to `true`, walker will not\n     * return a parent node of the start position. Each {@link module:engine/view/element~Element} will be returned once.\n     * When set to `false` each element might be returned twice: for `'elementStart'` and `'elementEnd'`.\n     *\n     * @readonly\n     * @member {Boolean} module:engine/view/treewalker~TreeWalker#ignoreElementEnd\n     */\n    this.ignoreElementEnd = !!options.ignoreElementEnd;\n\n    /**\n     * Start boundary parent.\n     *\n     * @private\n     * @member {module:engine/view/node~Node} module:engine/view/treewalker~TreeWalker#_boundaryStartParent\n     */\n    this._boundaryStartParent = this.boundaries ? this.boundaries.start.parent : null;\n\n    /**\n     * End boundary parent.\n     *\n     * @private\n     * @member {module:engine/view/node~Node} module:engine/view/treewalker~TreeWalker#_boundaryEndParent\n     */\n    this._boundaryEndParent = this.boundaries ? this.boundaries.end.parent : null;\n  }\n\n  /**\n   * Iterable interface.\n   *\n   * @returns {Iterable.<module:engine/view/treewalker~TreeWalkerValue>}\n   */\n  return _createClass(TreeWalker, [{\n    key: Symbol.iterator,\n    value: function value() {\n      return this;\n    }\n\n    /**\n     * Moves {@link #position} in the {@link #direction} skipping values as long as the callback function returns `true`.\n     *\n     * For example:\n     *\n     * \t\twalker.skip( value => value.type == 'text' ); // <p>{}foo</p> -> <p>foo[]</p>\n     * \t\twalker.skip( value => true ); // Move the position to the end: <p>{}foo</p> -> <p>foo</p>[]\n     * \t\twalker.skip( value => false ); // Do not move the position.\n     *\n     * @param {Function} skip Callback function. Gets {@link module:engine/view/treewalker~TreeWalkerValue} and should\n     * return `true` if the value should be skipped or `false` if not.\n     */\n  }, {\n    key: \"skip\",\n    value: function skip(_skip) {\n      var done, value, prevPosition;\n      do {\n        prevPosition = this.position;\n        var _this$next = this.next();\n        done = _this$next.done;\n        value = _this$next.value;\n      } while (!done && _skip(value));\n      if (!done) {\n        this.position = prevPosition;\n      }\n    }\n\n    /**\n     * Gets the next tree walker's value.\n     *\n     * @returns {module:engine/view/treewalker~TreeWalkerValue} Object implementing iterator interface, returning\n     * information about taken step.\n     */\n  }, {\n    key: \"next\",\n    value: function next() {\n      if (this.direction == 'forward') {\n        return this._next();\n      } else {\n        return this._previous();\n      }\n    }\n\n    /**\n     * Makes a step forward in view. Moves the {@link #position} to the next position and returns the encountered value.\n     *\n     * @private\n     * @returns {Object}\n     * @returns {Boolean} return.done `true` if iterator is done, `false` otherwise.\n     * @returns {module:engine/view/treewalker~TreeWalkerValue} return.value Information about taken step.\n     */\n  }, {\n    key: \"_next\",\n    value: function _next() {\n      var position = this.position.clone();\n      var previousPosition = this.position;\n      var parent = position.parent;\n\n      // We are at the end of the root.\n      if (parent.parent === null && position.offset === parent.childCount) {\n        return {\n          done: true\n        };\n      }\n\n      // We reached the walker boundary.\n      if (parent === this._boundaryEndParent && position.offset == this.boundaries.end.offset) {\n        return {\n          done: true\n        };\n      }\n\n      // Get node just after current position.\n      var node;\n\n      // Text is a specific parent because it contains string instead of child nodes.\n      if (parent instanceof Text) {\n        if (position.isAtEnd) {\n          // Prevent returning \"elementEnd\" for Text node. Skip that value and return the next walker step.\n          this.position = Position._createAfter(parent);\n          return this._next();\n        }\n        node = parent.data[position.offset];\n      } else {\n        node = parent.getChild(position.offset);\n      }\n      if (node instanceof Element) {\n        if (!this.shallow) {\n          position = new Position(node, 0);\n        } else {\n          position.offset++;\n        }\n        this.position = position;\n        return this._formatReturnValue('elementStart', node, previousPosition, position, 1);\n      } else if (node instanceof Text) {\n        if (this.singleCharacters) {\n          position = new Position(node, 0);\n          this.position = position;\n          return this._next();\n        } else {\n          var charactersCount = node.data.length;\n          var item;\n\n          // If text stick out of walker range, we need to cut it and wrap in TextProxy.\n          if (node == this._boundaryEndParent) {\n            charactersCount = this.boundaries.end.offset;\n            item = new TextProxy(node, 0, charactersCount);\n            position = Position._createAfter(item);\n          } else {\n            item = new TextProxy(node, 0, node.data.length);\n            // If not just keep moving forward.\n            position.offset++;\n          }\n          this.position = position;\n          return this._formatReturnValue('text', item, previousPosition, position, charactersCount);\n        }\n      } else if (typeof node == 'string') {\n        var textLength;\n        if (this.singleCharacters) {\n          textLength = 1;\n        } else {\n          // Check if text stick out of walker range.\n          var endOffset = parent === this._boundaryEndParent ? this.boundaries.end.offset : parent.data.length;\n          textLength = endOffset - position.offset;\n        }\n        var textProxy = new TextProxy(parent, position.offset, textLength);\n        position.offset += textLength;\n        this.position = position;\n        return this._formatReturnValue('text', textProxy, previousPosition, position, textLength);\n      } else {\n        // `node` is not set, we reached the end of current `parent`.\n        position = Position._createAfter(parent);\n        this.position = position;\n        if (this.ignoreElementEnd) {\n          return this._next();\n        } else {\n          return this._formatReturnValue('elementEnd', parent, previousPosition, position);\n        }\n      }\n    }\n\n    /**\n     * Makes a step backward in view. Moves the {@link #position} to the previous position and returns the encountered value.\n     *\n     * @private\n     * @returns {Object}\n     * @returns {Boolean} return.done True if iterator is done.\n     * @returns {module:engine/view/treewalker~TreeWalkerValue} return.value Information about taken step.\n     */\n  }, {\n    key: \"_previous\",\n    value: function _previous() {\n      var position = this.position.clone();\n      var previousPosition = this.position;\n      var parent = position.parent;\n\n      // We are at the beginning of the root.\n      if (parent.parent === null && position.offset === 0) {\n        return {\n          done: true\n        };\n      }\n\n      // We reached the walker boundary.\n      if (parent == this._boundaryStartParent && position.offset == this.boundaries.start.offset) {\n        return {\n          done: true\n        };\n      }\n\n      // Get node just before current position.\n      var node;\n\n      // Text {@link module:engine/view/text~Text} element is a specific parent because contains string instead of child nodes.\n      if (parent instanceof Text) {\n        if (position.isAtStart) {\n          // Prevent returning \"elementStart\" for Text node. Skip that value and return the next walker step.\n          this.position = Position._createBefore(parent);\n          return this._previous();\n        }\n        node = parent.data[position.offset - 1];\n      } else {\n        node = parent.getChild(position.offset - 1);\n      }\n      if (node instanceof Element) {\n        if (!this.shallow) {\n          position = new Position(node, node.childCount);\n          this.position = position;\n          if (this.ignoreElementEnd) {\n            return this._previous();\n          } else {\n            return this._formatReturnValue('elementEnd', node, previousPosition, position);\n          }\n        } else {\n          position.offset--;\n          this.position = position;\n          return this._formatReturnValue('elementStart', node, previousPosition, position, 1);\n        }\n      } else if (node instanceof Text) {\n        if (this.singleCharacters) {\n          position = new Position(node, node.data.length);\n          this.position = position;\n          return this._previous();\n        } else {\n          var charactersCount = node.data.length;\n          var item;\n\n          // If text stick out of walker range, we need to cut it and wrap in TextProxy.\n          if (node == this._boundaryStartParent) {\n            var offset = this.boundaries.start.offset;\n            item = new TextProxy(node, offset, node.data.length - offset);\n            charactersCount = item.data.length;\n            position = Position._createBefore(item);\n          } else {\n            item = new TextProxy(node, 0, node.data.length);\n            // If not just keep moving backward.\n            position.offset--;\n          }\n          this.position = position;\n          return this._formatReturnValue('text', item, previousPosition, position, charactersCount);\n        }\n      } else if (typeof node == 'string') {\n        var textLength;\n        if (!this.singleCharacters) {\n          // Check if text stick out of walker range.\n          var startOffset = parent === this._boundaryStartParent ? this.boundaries.start.offset : 0;\n          textLength = position.offset - startOffset;\n        } else {\n          textLength = 1;\n        }\n        position.offset -= textLength;\n        var textProxy = new TextProxy(parent, position.offset, textLength);\n        this.position = position;\n        return this._formatReturnValue('text', textProxy, previousPosition, position, textLength);\n      } else {\n        // `node` is not set, we reached the beginning of current `parent`.\n        position = Position._createBefore(parent);\n        this.position = position;\n        return this._formatReturnValue('elementStart', parent, previousPosition, position, 1);\n      }\n    }\n\n    /**\n     * Format returned data and adjust `previousPosition` and `nextPosition` if reach the bound of the {@link module:engine/view/text~Text}.\n     *\n     * @private\n     * @param {module:engine/view/treewalker~TreeWalkerValueType} type Type of step.\n     * @param {module:engine/view/item~Item} item Item between old and new position.\n     * @param {module:engine/view/position~Position} previousPosition Previous position of iterator.\n     * @param {module:engine/view/position~Position} nextPosition Next position of iterator.\n     * @param {Number} [length] Length of the item.\n     * @returns {module:engine/view/treewalker~TreeWalkerValue}\n     */\n  }, {\n    key: \"_formatReturnValue\",\n    value: function _formatReturnValue(type, item, previousPosition, nextPosition, length) {\n      // Text is a specific parent, because contains string instead of children.\n      // Walker doesn't enter to the Text except situations when walker is iterating over every single character,\n      // or the bound starts/ends inside the Text. So when the position is at the beginning or at the end of the Text\n      // we move it just before or just after Text.\n      if (item instanceof TextProxy) {\n        // Position is at the end of Text.\n        if (item.offsetInText + item.data.length == item.textNode.data.length) {\n          if (this.direction == 'forward' && !(this.boundaries && this.boundaries.end.isEqual(this.position))) {\n            nextPosition = Position._createAfter(item.textNode);\n            // When we change nextPosition of returned value we need also update walker current position.\n            this.position = nextPosition;\n          } else {\n            previousPosition = Position._createAfter(item.textNode);\n          }\n        }\n\n        // Position is at the begining ot the text.\n        if (item.offsetInText === 0) {\n          if (this.direction == 'backward' && !(this.boundaries && this.boundaries.start.isEqual(this.position))) {\n            nextPosition = Position._createBefore(item.textNode);\n            // When we change nextPosition of returned value we need also update walker current position.\n            this.position = nextPosition;\n          } else {\n            previousPosition = Position._createBefore(item.textNode);\n          }\n        }\n      }\n      return {\n        done: false,\n        value: {\n          type: type,\n          item: item,\n          previousPosition: previousPosition,\n          nextPosition: nextPosition,\n          length: length\n        }\n      };\n    }\n  }]);\n}();\n/**\n * Type of the step made by {@link module:engine/view/treewalker~TreeWalker}.\n * Possible values: `'elementStart'` if walker is at the beginning of a node, `'elementEnd'` if walker is at the end\n * of node, or `'text'` if walker traversed over single and multiple characters.\n * For {@link module:engine/view/text~Text} `elementStart` and `elementEnd` is not returned.\n *\n * @typedef {String} module:engine/view/treewalker~TreeWalkerValueType\n */\n/**\n * Object returned by {@link module:engine/view/treewalker~TreeWalker} when traversing tree view.\n *\n * @typedef {Object} module:engine/view/treewalker~TreeWalkerValue\n * @property {module:engine/view/treewalker~TreeWalkerValueType} type\n * @property {module:engine/view/item~Item} item Item between the old and the new positions\n * of the tree walker.\n * @property {module:engine/view/position~Position} previousPosition Previous position of the iterator.\n * * Forward iteration: For `'elementEnd'` it is the last position inside the element. For all other types it is the\n * position before the item.\n * * Backward iteration: For `'elementStart'` it is the first position inside the element. For all other types it is\n * the position after item.\n * * If the position is at the beginning or at the end of the {@link module:engine/view/text~Text} it is always moved from the\n * inside of the text to its parent just before or just after that text.\n * @property {module:engine/view/position~Position} nextPosition Next position of the iterator.\n * * Forward iteration: For `'elementStart'` it is the first position inside the element. For all other types it is\n * the position after the item.\n * * Backward iteration: For `'elementEnd'` it is last position inside element. For all other types it is the position\n * before the item.\n * * If the position is at the beginning or at the end of the {@link module:engine/view/text~Text} it is always moved from the\n * inside of the text to its parent just before or just after that text.\n * @property {Number} [length] Length of the item. For `'elementStart'` it is `1`. For `'text'` it is\n * the length of that text. For `'elementEnd'` it is `undefined`.\n */\n/**\n * Tree walking directions.\n *\n * @typedef {'forward'|'backward'} module:engine/view/treewalker~TreeWalkerDirection\n */\nexport { TreeWalker as default };","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.replace.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/uielement\n */\n\nimport Element from './element';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport Node from './node';\nimport { keyCodes } from '@ckeditor/ckeditor5-utils/src/keyboard';\n\n/**\n * UI element class. It should be used to represent editing UI which needs to be injected into the editing view\n * If possible, you should keep your UI outside the editing view. However, if that is not possible,\n * UI elements can be used.\n *\n * How a UI element is rendered is in your control (you pass a callback to\n * {@link module:engine/view/downcastwriter~DowncastWriter#createUIElement `downcastWriter#createUIElement()`}).\n * The editor will ignore your UI element – the selection cannot be placed in it, it is skipped (invisible) when\n * the user modifies the selection by using arrow keys and the editor does not listen to any mutations which\n * happen inside your UI elements.\n *\n * The limitation is that you cannot convert a model element to a UI element. UI elements need to be\n * created for {@link module:engine/model/markercollection~Marker markers} or as additinal elements\n * inside normal {@link module:engine/view/containerelement~ContainerElement container elements}.\n *\n * To create a new UI element use the\n * {@link module:engine/view/downcastwriter~DowncastWriter#createUIElement `downcastWriter#createUIElement()`} method.\n *\n * @extends module:engine/view/element~Element\n */\nvar UIElement = /*#__PURE__*/function (_Element) {\n  /**\n   * Creates new instance of UIElement.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-uielement-cannot-add` when third parameter is passed,\n   * to inform that usage of UIElement is incorrect (adding child nodes to UIElement is forbidden).\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#createUIElement\n   * @protected\n   * @param {String} name Node name.\n   * @param {Object|Iterable} [attributes] Collection of attributes.\n   */\n  function UIElement(name, attributes, children) {\n    var _this;\n    _classCallCheck(this, UIElement);\n    _this = _callSuper(this, UIElement, [name, attributes, children]);\n\n    /**\n     * Returns `null` because filler is not needed for UIElements.\n     *\n     * @method #getFillerOffset\n     * @returns {null} Always returns null.\n     */\n    _this.getFillerOffset = getFillerOffset;\n    return _this;\n  }\n\n  /**\n   * Checks whether this object is of the given.\n   *\n   *\t\tuiElement.is( 'uiElement' ); // -> true\n   *\t\tuiElement.is( 'element' ); // -> true\n   *\t\tuiElement.is( 'node' ); // -> true\n   *\t\tuiElement.is( 'view:uiElement' ); // -> true\n   *\t\tuiElement.is( 'view:element' ); // -> true\n   *\t\tuiElement.is( 'view:node' ); // -> true\n   *\n   *\t\tuiElement.is( 'model:element' ); // -> false\n   *\t\tuiElement.is( 'documentFragment' ); // -> false\n   *\n   * Assuming that the object being checked is an ui element, you can also check its\n   * {@link module:engine/view/uielement~UIElement#name name}:\n   *\n   *\t\tuiElement.is( 'span' ); // -> true if this is a span ui element\n   *\t\tuiElement.is( 'uiElement', 'span' ); // -> same as above\n   *\t\ttext.is( 'span' ); -> false\n   *\n   * {@link module:engine/view/node~Node#is Check the entire list of view objects} which implement the `is()` method.\n   *\n   * @param {String} type Type to check when `name` parameter is present.\n   * Otherwise, it acts like the `name` parameter.\n   * @param {String} [name] Element name.\n   * @returns {Boolean}\n   */\n  _inherits(UIElement, _Element);\n  return _createClass(UIElement, [{\n    key: \"is\",\n    value: function is(type) {\n      var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var cutType = type.replace(/^view:/, '');\n      if (!name) {\n        return cutType == 'uiElement' || _superPropGet(UIElement, \"is\", this, 3)([type]);\n      } else {\n        return cutType == 'uiElement' && name == this.name || _superPropGet(UIElement, \"is\", this, 3)([type, name]);\n      }\n    }\n\n    /**\n     * Overrides {@link module:engine/view/element~Element#_insertChild} method.\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-uielement-cannot-add` to prevent adding any child nodes\n     * to UIElement.\n     *\n     * @protected\n     */\n  }, {\n    key: \"_insertChild\",\n    value: function _insertChild(index, nodes) {\n      if (nodes && (nodes instanceof Node || Array.from(nodes).length > 0)) {\n        /**\n         * Cannot add children to {@link module:engine/view/uielement~UIElement}.\n         *\n         * @error view-uielement-cannot-add\n         */\n        throw new CKEditorError('view-uielement-cannot-add: Cannot add child nodes to UIElement instance.', this);\n      }\n    }\n\n    /**\n     * Renders this {@link module:engine/view/uielement~UIElement} to DOM. This method is called by\n     * {@link module:engine/view/domconverter~DomConverter}.\n     * Do not use inheritance to create custom rendering method, replace `render()` method instead:\n     *\n     *\t\tconst myUIElement = downcastWriter.createUIElement( 'span' );\n     *\t\tmyUIElement.render = function( domDocument ) {\n     *\t\t\tconst domElement = this.toDomElement( domDocument );\n     *\t\t\tdomElement.innerHTML = '<b>this is ui element</b>';\n     *\n     *\t\t\treturn domElement;\n     *\t\t};\n     *\n     * @param {Document} domDocument\n     * @returns {HTMLElement}\n     */\n  }, {\n    key: \"render\",\n    value: function render(domDocument) {\n      return this.toDomElement(domDocument);\n    }\n\n    /**\n     * Creates DOM element based on this view UIElement.\n     * Note that each time this method is called new DOM element is created.\n     *\n     * @param {Document} domDocument\n     * @returns {HTMLElement}\n     */\n  }, {\n    key: \"toDomElement\",\n    value: function toDomElement(domDocument) {\n      var domElement = domDocument.createElement(this.name);\n      var _iterator = _createForOfIteratorHelper(this.getAttributeKeys()),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var key = _step.value;\n          domElement.setAttribute(key, this.getAttribute(key));\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      return domElement;\n    }\n  }]);\n}(Element);\n/**\n * This function injects UI element handling to the given {@link module:engine/view/document~Document document}.\n *\n * A callback is added to {@link module:engine/view/document~Document#event:keydown document keydown event}.\n * The callback handles the situation when right arrow key is pressed and selection is collapsed before a UI element.\n * Without this handler, it would be impossible to \"jump over\" UI element using right arrow key.\n *\n * @param {module:engine/view/view~View} view View controller to which the quirks handling will be injected.\n */\nexport { UIElement as default };\nexport function injectUiElementHandling(view) {\n  view.document.on('keydown', function (evt, data) {\n    return jumpOverUiElement(evt, data, view.domConverter);\n  });\n}\n\n// Returns `null` because block filler is not needed for UIElements.\n//\n// @returns {null}\nfunction getFillerOffset() {\n  return null;\n}\n\n// Selection cannot be placed in a `UIElement`. Whenever it is placed there, it is moved before it. This\n// causes a situation when it is impossible to jump over `UIElement` using right arrow key, because the selection\n// ends up in ui element (in DOM) and is moved back to the left. This handler fixes this situation.\nfunction jumpOverUiElement(evt, data, domConverter) {\n  if (data.keyCode == keyCodes.arrowright) {\n    var domSelection = data.domTarget.ownerDocument.defaultView.getSelection();\n    var domSelectionCollapsed = domSelection.rangeCount == 1 && domSelection.getRangeAt(0).collapsed;\n\n    // Jump over UI element if selection is collapsed or shift key is pressed. These are the cases when selection would extend.\n    if (domSelectionCollapsed || data.shiftKey) {\n      var domParent = domSelection.focusNode;\n      var domOffset = domSelection.focusOffset;\n      var viewPosition = domConverter.domPositionToView(domParent, domOffset);\n\n      // In case if dom element is not converted to view or is not mapped or something. Happens for example in some tests.\n      if (viewPosition === null) {\n        return;\n      }\n\n      // Skip all following ui elements.\n      var jumpedOverAnyUiElement = false;\n      var nextViewPosition = viewPosition.getLastMatchingPosition(function (value) {\n        if (value.item.is('uiElement')) {\n          // Remember that there was at least one ui element.\n          jumpedOverAnyUiElement = true;\n        }\n\n        // Jump over ui elements, jump over empty attribute elements, move up from inside of attribute element.\n        if (value.item.is('uiElement') || value.item.is('attributeElement')) {\n          return true;\n        }\n\n        // Don't jump over text or don't get out of container element.\n        return false;\n      });\n\n      // If anything has been skipped, fix position.\n      // This `if` could be possibly omitted but maybe it is better not to mess with DOM selection if not needed.\n      if (jumpedOverAnyUiElement) {\n        var newDomPosition = domConverter.viewPositionToDom(nextViewPosition);\n        if (domSelectionCollapsed) {\n          // Selection was collapsed, so collapse it at further position.\n          domSelection.collapse(newDomPosition.parent, newDomPosition.offset);\n        } else {\n          // Selection was not collapse, so extend it instead of collapsing.\n          domSelection.extend(newDomPosition.parent, newDomPosition.offset);\n        }\n      }\n    }\n  }\n}","import _slicedToArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/view\n */\n\nimport Document from './document';\nimport DowncastWriter from './downcastwriter';\nimport Renderer from './renderer';\nimport DomConverter from './domconverter';\nimport Position from './position';\nimport Range from './range';\nimport Selection from './selection';\nimport MutationObserver from './observer/mutationobserver';\nimport KeyObserver from './observer/keyobserver';\nimport FakeSelectionObserver from './observer/fakeselectionobserver';\nimport SelectionObserver from './observer/selectionobserver';\nimport FocusObserver from './observer/focusobserver';\nimport CompositionObserver from './observer/compositionobserver';\nimport InputObserver from './observer/inputobserver';\nimport ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport { scrollViewportToShowTarget } from '@ckeditor/ckeditor5-utils/src/dom/scroll';\nimport { injectUiElementHandling } from './uielement';\nimport { injectQuirksHandling } from './filler';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport env from '@ckeditor/ckeditor5-utils/src/env';\n\n/**\n * Editor's view controller class. Its main responsibility is DOM - View management for editing purposes, to provide\n * abstraction over the DOM structure and events and hide all browsers quirks.\n *\n * View controller renders view document to DOM whenever view structure changes. To determine when view can be rendered,\n * all changes need to be done using the {@link module:engine/view/view~View#change} method, using\n * {@link module:engine/view/downcastwriter~DowncastWriter}:\n *\n *\t\tview.change( writer => {\n *\t\t\twriter.insert( position, writer.createText( 'foo' ) );\n *\t\t} );\n *\n * View controller also register {@link module:engine/view/observer/observer~Observer observers} which observes changes\n * on DOM and fire events on the {@link module:engine/view/document~Document Document}.\n * Note that the following observers are added by the class constructor and are always available:\n *\n * * {@link module:engine/view/observer/mutationobserver~MutationObserver},\n * * {@link module:engine/view/observer/selectionobserver~SelectionObserver},\n * * {@link module:engine/view/observer/focusobserver~FocusObserver},\n * * {@link module:engine/view/observer/keyobserver~KeyObserver},\n * * {@link module:engine/view/observer/fakeselectionobserver~FakeSelectionObserver}.\n * * {@link module:engine/view/observer/compositionobserver~CompositionObserver}.\n *\n * This class also {@link module:engine/view/view~View#attachDomRoot binds the DOM and the view elements}.\n *\n * If you do not need full a DOM - view management, and only want to transform a tree of view elements to a tree of DOM\n * elements you do not need this controller. You can use the {@link module:engine/view/domconverter~DomConverter DomConverter} instead.\n *\n * @mixes module:utils/observablemixin~ObservableMixin\n */\nvar View = /*#__PURE__*/function () {\n  function View() {\n    var _this = this;\n    _classCallCheck(this, View);\n    /**\n     * Instance of the {@link module:engine/view/document~Document} associated with this view controller.\n     *\n     * @readonly\n     * @type {module:engine/view/document~Document}\n     */\n    this.document = new Document();\n\n    /**\n     * Instance of the {@link module:engine/view/domconverter~DomConverter domConverter} used by\n     * {@link module:engine/view/view~View#_renderer renderer}\n     * and {@link module:engine/view/observer/observer~Observer observers}.\n     *\n     * @readonly\n     * @type {module:engine/view/domconverter~DomConverter}\n     */\n    this.domConverter = new DomConverter();\n\n    /**\n     * Roots of the DOM tree. Map on the `HTMLElement`s with roots names as keys.\n     *\n     * @readonly\n     * @type {Map.<String, HTMLElement>}\n     */\n    this.domRoots = new Map();\n\n    /**\n     * Used to prevent calling {@link #forceRender} and {@link #change} during rendering view to the DOM.\n     *\n     * @readonly\n     * @member {Boolean} #isRenderingInProgress\n     */\n    this.set('isRenderingInProgress', false);\n\n    /**\n     * Instance of the {@link module:engine/view/renderer~Renderer renderer}.\n     *\n     * @protected\n     * @type {module:engine/view/renderer~Renderer}\n     */\n    this._renderer = new Renderer(this.domConverter, this.document.selection);\n    this._renderer.bind('isFocused').to(this.document);\n\n    /**\n     * A DOM root attributes cache. It saves the initial values of DOM root attributes before the DOM element\n     * is {@link module:engine/view/view~View#attachDomRoot attached} to the view so later on, when\n     * the view is destroyed ({@link module:engine/view/view~View#detachDomRoot}), they can be easily restored.\n     * This way, the DOM element can go back to the (clean) state as if the editing view never used it.\n     *\n     * @private\n     * @member {WeakMap.<HTMLElement,Object>}\n     */\n    this._initialDomRootAttributes = new WeakMap();\n\n    /**\n     * Map of registered {@link module:engine/view/observer/observer~Observer observers}.\n     *\n     * @private\n     * @type {Map.<Function, module:engine/view/observer/observer~Observer>}\n     */\n    this._observers = new Map();\n\n    /**\n     * Is set to `true` when {@link #change view changes} are currently in progress.\n     *\n     * @private\n     * @type {Boolean}\n     */\n    this._ongoingChange = false;\n\n    /**\n     * Used to prevent calling {@link #forceRender} and {@link #change} during rendering view to the DOM.\n     *\n     * @private\n     * @type {Boolean}\n     */\n    this._postFixersInProgress = false;\n\n    /**\n     * Internal flag to temporary disable rendering. See the usage in the {@link #_disableRendering}.\n     *\n     * @private\n     * @type {Boolean}\n     */\n    this._renderingDisabled = false;\n\n    /**\n     * Internal flag that disables rendering when there are no changes since the last rendering.\n     * It stores information about changed selection and changed elements from attached document roots.\n     *\n     * @private\n     * @type {Boolean}\n     */\n    this._hasChangedSinceTheLastRendering = false;\n\n    /**\n     * DowncastWriter instance used in {@link #change change method} callbacks.\n     *\n     * @private\n     * @type {module:engine/view/downcastwriter~DowncastWriter}\n     */\n    this._writer = new DowncastWriter(this.document);\n\n    // Add default observers.\n    this.addObserver(MutationObserver);\n    this.addObserver(SelectionObserver);\n    this.addObserver(FocusObserver);\n    this.addObserver(KeyObserver);\n    this.addObserver(FakeSelectionObserver);\n    this.addObserver(CompositionObserver);\n    if (env.isAndroid) {\n      this.addObserver(InputObserver);\n    }\n\n    // Inject quirks handlers.\n    injectQuirksHandling(this);\n    injectUiElementHandling(this);\n\n    // Use 'normal' priority so that rendering is performed as first when using that priority.\n    this.on('render', function () {\n      _this._render();\n\n      // Informs that layout has changed after render.\n      _this.document.fire('layoutChanged');\n\n      // Reset the `_hasChangedSinceTheLastRendering` flag after rendering.\n      _this._hasChangedSinceTheLastRendering = false;\n    });\n\n    // Listen to the document selection changes directly.\n    this.listenTo(this.document.selection, 'change', function () {\n      _this._hasChangedSinceTheLastRendering = true;\n    });\n  }\n\n  /**\n   * Attaches a DOM root element to the view element and enable all observers on that element.\n   * Also {@link module:engine/view/renderer~Renderer#markToSync mark element} to be synchronized\n   * with the view what means that all child nodes will be removed and replaced with content of the view root.\n   *\n   * This method also will change view element name as the same as tag name of given dom root.\n   * Name is always transformed to lower case.\n   *\n   * **Note:** Use {@link #detachDomRoot `detachDomRoot()`} to revert this action.\n   *\n   * @param {Element} domRoot DOM root element.\n   * @param {String} [name='main'] Name of the root.\n   */\n  return _createClass(View, [{\n    key: \"attachDomRoot\",\n    value: function attachDomRoot(domRoot) {\n      var _this2 = this;\n      var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'main';\n      var viewRoot = this.document.getRoot(name);\n\n      // Set view root name the same as DOM root tag name.\n      viewRoot._name = domRoot.tagName.toLowerCase();\n      var initialDomRootAttributes = {};\n\n      // 1. Copy and cache the attributes to remember the state of the element before attaching.\n      //    The cached attributes will be restored in detachDomRoot() so the element goes to the\n      //    clean state as if the editing view never used it.\n      // 2. Apply the attributes using the view writer, so they all go under the control of the engine.\n      //    The editing view takes over the attribute management completely because various\n      //    features (e.g. addPlaceholder()) require dynamic changes of those attributes and they\n      //    cannot be managed by the engine and the UI library at the same time.\n      for (var _i = 0, _Array$from = Array.from(domRoot.attributes); _i < _Array$from.length; _i++) {\n        var _Array$from$_i = _Array$from[_i],\n          _name = _Array$from$_i.name,\n          value = _Array$from$_i.value;\n        initialDomRootAttributes[_name] = value;\n\n        // Do not use writer.setAttribute() for the class attribute. The EditableUIView class\n        // and its descendants could have already set some using the writer.addClass() on the view\n        // document root. They haven't been rendered yet so they are not present in the DOM root.\n        // Using writer.setAttribute( 'class', ... ) would override them completely.\n        if (_name === 'class') {\n          this._writer.addClass(value.split(' '), viewRoot);\n        } else {\n          this._writer.setAttribute(_name, value, viewRoot);\n        }\n      }\n      this._initialDomRootAttributes.set(domRoot, initialDomRootAttributes);\n      var updateContenteditableAttribute = function updateContenteditableAttribute() {\n        _this2._writer.setAttribute('contenteditable', !viewRoot.isReadOnly, viewRoot);\n        if (viewRoot.isReadOnly) {\n          _this2._writer.addClass('ck-read-only', viewRoot);\n        } else {\n          _this2._writer.removeClass('ck-read-only', viewRoot);\n        }\n      };\n\n      // Set initial value.\n      updateContenteditableAttribute();\n      this.domRoots.set(name, domRoot);\n      this.domConverter.bindElements(domRoot, viewRoot);\n      this._renderer.markToSync('children', viewRoot);\n      this._renderer.markToSync('attributes', viewRoot);\n      this._renderer.domDocuments.add(domRoot.ownerDocument);\n      viewRoot.on('change:children', function (evt, node) {\n        return _this2._renderer.markToSync('children', node);\n      });\n      viewRoot.on('change:attributes', function (evt, node) {\n        return _this2._renderer.markToSync('attributes', node);\n      });\n      viewRoot.on('change:text', function (evt, node) {\n        return _this2._renderer.markToSync('text', node);\n      });\n      viewRoot.on('change:isReadOnly', function () {\n        return _this2.change(updateContenteditableAttribute);\n      });\n      viewRoot.on('change', function () {\n        _this2._hasChangedSinceTheLastRendering = true;\n      });\n      var _iterator = _createForOfIteratorHelper(this._observers.values()),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var observer = _step.value;\n          observer.observe(domRoot, name);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n\n    /**\n     * Detaches a DOM root element from the view element and restores its attributes to the state before\n     * {@link #attachDomRoot `attachDomRoot()`}.\n     *\n     * @param {String} name Name of the root to detach.\n     */\n  }, {\n    key: \"detachDomRoot\",\n    value: function detachDomRoot(name) {\n      var domRoot = this.domRoots.get(name);\n\n      // Remove all root attributes so the DOM element is \"bare\".\n      Array.from(domRoot.attributes).forEach(function (_ref) {\n        var name = _ref.name;\n        return domRoot.removeAttribute(name);\n      });\n      var initialDomRootAttributes = this._initialDomRootAttributes.get(domRoot);\n\n      // Revert all view root attributes back to the state before attachDomRoot was called.\n      for (var attribute in initialDomRootAttributes) {\n        domRoot.setAttribute(attribute, initialDomRootAttributes[attribute]);\n      }\n      this.domRoots.delete(name);\n      this.domConverter.unbindDomElement(domRoot);\n    }\n\n    /**\n     * Gets DOM root element.\n     *\n     * @param {String} [name='main']  Name of the root.\n     * @returns {Element} DOM root element instance.\n     */\n  }, {\n    key: \"getDomRoot\",\n    value: function getDomRoot() {\n      var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'main';\n      return this.domRoots.get(name);\n    }\n\n    /**\n     * Creates observer of the given type if not yet created, {@link module:engine/view/observer/observer~Observer#enable enables} it\n     * and {@link module:engine/view/observer/observer~Observer#observe attaches} to all existing and future\n     * {@link #domRoots DOM roots}.\n     *\n     * Note: Observers are recognized by their constructor (classes). A single observer will be instantiated and used only\n     * when registered for the first time. This means that features and other components can register a single observer\n     * multiple times without caring whether it has been already added or not.\n     *\n     * @param {Function} Observer The constructor of an observer to add.\n     * Should create an instance inheriting from {@link module:engine/view/observer/observer~Observer}.\n     * @returns {module:engine/view/observer/observer~Observer} Added observer instance.\n     */\n  }, {\n    key: \"addObserver\",\n    value: function addObserver(Observer) {\n      var observer = this._observers.get(Observer);\n      if (observer) {\n        return observer;\n      }\n      observer = new Observer(this);\n      this._observers.set(Observer, observer);\n      var _iterator2 = _createForOfIteratorHelper(this.domRoots),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var _step2$value = _slicedToArray(_step2.value, 2),\n            name = _step2$value[0],\n            domElement = _step2$value[1];\n          observer.observe(domElement, name);\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      observer.enable();\n      return observer;\n    }\n\n    /**\n     * Returns observer of the given type or `undefined` if such observer has not been added yet.\n     *\n     * @param {Function} Observer The constructor of an observer to get.\n     * @returns {module:engine/view/observer/observer~Observer|undefined} Observer instance or undefined.\n     */\n  }, {\n    key: \"getObserver\",\n    value: function getObserver(Observer) {\n      return this._observers.get(Observer);\n    }\n\n    /**\n     * Disables all added observers.\n     */\n  }, {\n    key: \"disableObservers\",\n    value: function disableObservers() {\n      var _iterator3 = _createForOfIteratorHelper(this._observers.values()),\n        _step3;\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var observer = _step3.value;\n          observer.disable();\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n    }\n\n    /**\n     * Enables all added observers.\n     */\n  }, {\n    key: \"enableObservers\",\n    value: function enableObservers() {\n      var _iterator4 = _createForOfIteratorHelper(this._observers.values()),\n        _step4;\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var observer = _step4.value;\n          observer.enable();\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n    }\n\n    /**\n     * Scrolls the page viewport and {@link #domRoots} with their ancestors to reveal the\n     * caret, if not already visible to the user.\n     */\n  }, {\n    key: \"scrollToTheSelection\",\n    value: function scrollToTheSelection() {\n      var range = this.document.selection.getFirstRange();\n      if (range) {\n        scrollViewportToShowTarget({\n          target: this.domConverter.viewRangeToDom(range),\n          viewportOffset: 20\n        });\n      }\n    }\n\n    /**\n     * It will focus DOM element representing {@link module:engine/view/editableelement~EditableElement EditableElement}\n     * that is currently having selection inside.\n     */\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      if (!this.document.isFocused) {\n        var editable = this.document.selection.editableElement;\n        if (editable) {\n          this.domConverter.focus(editable);\n          this.forceRender();\n        } else {\n          // Before focusing view document, selection should be placed inside one of the view's editables.\n          // Normally its selection will be converted from model document (which have default selection), but\n          // when using view document on its own, we need to manually place selection before focusing it.\n          //\n          // @if CK_DEBUG // console.warn( 'There is no selection in any editable to focus.' );\n        }\n      }\n    }\n\n    /**\n     * The `change()` method is the primary way of changing the view. You should use it to modify any node in the view tree.\n     * It makes sure that after all changes are made the view is rendered to the DOM (assuming that the view will be changed\n     * inside the callback). It prevents situations when the DOM is updated when the view state is not yet correct. It allows\n     * to nest calls one inside another and still performs a single rendering after all those changes are made.\n     * It also returns the return value of its callback.\n     *\n     *\t\tconst text = view.change( writer => {\n     *\t\t\tconst newText = writer.createText( 'foo' );\n     *\t\t\twriter.insert( position1, newText );\n     *\n     *\t\t\tview.change( writer => {\n     *\t\t\t\twriter.insert( position2, writer.createText( 'bar' ) );\n     *\t\t\t} );\n     *\n     * \t\t\twriter.remove( range );\n     *\n     * \t\t\treturn newText;\n     *\t\t} );\n     *\n     * When the outermost change block is done and rendering to the DOM is over the\n     * {@link module:engine/view/view~View#event:render `View#render`} event is fired.\n     *\n     * This method throws a `applying-view-changes-on-rendering` error when\n     * the change block is used after rendering to the DOM has started.\n     *\n     * @param {Function} callback Callback function which may modify the view.\n     * @returns {*} Value returned by the callback.\n     */\n  }, {\n    key: \"change\",\n    value: function change(callback) {\n      if (this.isRenderingInProgress || this._postFixersInProgress) {\n        /**\n         * Thrown when there is an attempt to make changes to the view tree when it is in incorrect state. This may\n         * cause some unexpected behaviour and inconsistency between the DOM and the view.\n         * This may be caused by:\n         *\n         * * calling {@link #change} or {@link #forceRender} during rendering process,\n         * * calling {@link #change} or {@link #forceRender} inside of\n         *   {@link module:engine/view/document~Document#registerPostFixer post-fixer function}.\n         *\n         * @error cannot-change-view-tree\n         */\n        throw new CKEditorError('cannot-change-view-tree: ' + 'Attempting to make changes to the view when it is in an incorrect state: rendering or post-fixers are in progress. ' + 'This may cause some unexpected behavior and inconsistency between the DOM and the view.', this);\n      }\n      try {\n        // Recursive call to view.change() method - execute listener immediately.\n        if (this._ongoingChange) {\n          return callback(this._writer);\n        }\n\n        // This lock will assure that all recursive calls to view.change() will end up in same block - one \"render\"\n        // event for all nested calls.\n        this._ongoingChange = true;\n        var callbackResult = callback(this._writer);\n        this._ongoingChange = false;\n\n        // This lock is used by editing controller to render changes from outer most model.change() once. As plugins might call\n        // view.change() inside model.change() block - this will ensures that postfixers and rendering are called once after all\n        // changes. Also, we don't need to render anything if there're no changes since last rendering.\n        if (!this._renderingDisabled && this._hasChangedSinceTheLastRendering) {\n          this._postFixersInProgress = true;\n          this.document._callPostFixers(this._writer);\n          this._postFixersInProgress = false;\n          this.fire('render');\n        }\n        return callbackResult;\n      } catch (err) {\n        CKEditorError.rethrowUnexpectedError(err, this);\n      }\n    }\n\n    /**\n     * Forces rendering {@link module:engine/view/document~Document view document} to DOM. If any view changes are\n     * currently in progress, rendering will start after all {@link #change change blocks} are processed.\n     *\n     * Note that this method is dedicated for special cases. All view changes should be wrapped in the {@link #change}\n     * block and the view will automatically check whether it needs to render DOM or not.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `applying-view-changes-on-rendering` when\n     * trying to re-render when rendering to DOM has already started.\n     */\n  }, {\n    key: \"forceRender\",\n    value: function forceRender() {\n      this._hasChangedSinceTheLastRendering = true;\n      this.change(function () {});\n    }\n\n    /**\n     * Destroys this instance. Makes sure that all observers are destroyed and listeners removed.\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _iterator5 = _createForOfIteratorHelper(this._observers.values()),\n        _step5;\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var observer = _step5.value;\n          observer.destroy();\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n      this.document.destroy();\n      this.stopListening();\n    }\n\n    /**\n     * Creates position at the given location. The location can be specified as:\n     *\n     * * a {@link module:engine/view/position~Position position},\n     * * parent element and offset (offset defaults to `0`),\n     * * parent element and `'end'` (sets position at the end of that element),\n     * * {@link module:engine/view/item~Item view item} and `'before'` or `'after'` (sets position before or after given view item).\n     *\n     * This method is a shortcut to other constructors such as:\n     *\n     * * {@link #createPositionBefore},\n     * * {@link #createPositionAfter},\n     *\n     * @param {module:engine/view/item~Item|module:engine/model/position~Position} itemOrPosition\n     * @param {Number|'end'|'before'|'after'} [offset] Offset or one of the flags. Used only when\n     * first parameter is a {@link module:engine/view/item~Item view item}.\n     */\n  }, {\n    key: \"createPositionAt\",\n    value: function createPositionAt(itemOrPosition, offset) {\n      return Position._createAt(itemOrPosition, offset);\n    }\n\n    /**\n     * Creates a new position after given view item.\n     *\n     * @param {module:engine/view/item~Item} item View item after which the position should be located.\n     * @returns {module:engine/view/position~Position}\n     */\n  }, {\n    key: \"createPositionAfter\",\n    value: function createPositionAfter(item) {\n      return Position._createAfter(item);\n    }\n\n    /**\n     * Creates a new position before given view item.\n     *\n     * @param {module:engine/view/item~Item} item View item before which the position should be located.\n     * @returns {module:engine/view/position~Position}\n     */\n  }, {\n    key: \"createPositionBefore\",\n    value: function createPositionBefore(item) {\n      return Position._createBefore(item);\n    }\n\n    /**\n     * Creates a range spanning from `start` position to `end` position.\n     *\n     * **Note:** This factory method creates it's own {@link module:engine/view/position~Position} instances basing on passed values.\n     *\n     * @param {module:engine/view/position~Position} start Start position.\n     * @param {module:engine/view/position~Position} [end] End position. If not set, range will be collapsed at `start` position.\n     * @returns {module:engine/view/range~Range}\n     */\n  }, {\n    key: \"createRange\",\n    value: function createRange(start, end) {\n      return new Range(start, end);\n    }\n\n    /**\n     * Creates a range that starts before given {@link module:engine/view/item~Item view item} and ends after it.\n     *\n     * @param {module:engine/view/item~Item} item\n     * @returns {module:engine/view/range~Range}\n     */\n  }, {\n    key: \"createRangeOn\",\n    value: function createRangeOn(item) {\n      return Range._createOn(item);\n    }\n\n    /**\n     * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n     * that element and ends after the last child of that element.\n     *\n     * @param {module:engine/view/element~Element} element Element which is a parent for the range.\n     * @returns {module:engine/view/range~Range}\n     */\n  }, {\n    key: \"createRangeIn\",\n    value: function createRangeIn(element) {\n      return Range._createIn(element);\n    }\n\n    /**\n     Creates new {@link module:engine/view/selection~Selection} instance.\n     *\n     * \t\t// Creates empty selection without ranges.\n     *\t\tconst selection = view.createSelection();\n     *\n     *\t\t// Creates selection at the given range.\n     *\t\tconst range = view.createRange( start, end );\n     *\t\tconst selection = view.createSelection( range );\n     *\n     *\t\t// Creates selection at the given ranges\n     * \t\tconst ranges = [ view.createRange( start1, end2 ), view.createRange( star2, end2 ) ];\n     *\t\tconst selection = view.createSelection( ranges );\n     *\n     *\t\t// Creates selection from the other selection.\n     *\t\tconst otherSelection = view.createSelection();\n     *\t\tconst selection = view.createSelection( otherSelection );\n     *\n     *\t\t// Creates selection from the document selection.\n     *\t\tconst selection = view.createSelection( editor.editing.view.document.selection );\n     *\n     * \t\t// Creates selection at the given position.\n     *\t\tconst position = view.createPositionFromPath( root, path );\n     *\t\tconst selection = view.createSelection( position );\n     *\n     *\t\t// Creates collapsed selection at the position of given item and offset.\n     *\t\tconst paragraph = view.createContainerElement( 'paragraph' );\n     *\t\tconst selection = view.createSelection( paragraph, offset );\n     *\n     *\t\t// Creates a range inside an {@link module:engine/view/element~Element element} which starts before the\n     *\t\t// first child of that element and ends after the last child of that element.\n     *\t\tconst selection = view.createSelection( paragraph, 'in' );\n     *\n     *\t\t// Creates a range on an {@link module:engine/view/item~Item item} which starts before the item and ends\n     *\t\t// just after the item.\n     *\t\tconst selection = view.createSelection( paragraph, 'on' );\n     *\n     * `Selection`'s factory method allow passing additional options (`backward`, `fake` and `label`) as the last argument.\n     *\n     *\t\t// Creates backward selection.\n     *\t\tconst selection = view.createSelection( range, { backward: true } );\n     *\n     * Fake selection does not render as browser native selection over selected elements and is hidden to the user.\n     * This way, no native selection UI artifacts are displayed to the user and selection over elements can be\n     * represented in other way, for example by applying proper CSS class.\n     *\n     * Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM\n     * (and be  properly handled by screen readers).\n     *\n     *\t\t// Creates fake selection with label.\n     *\t\tconst selection = view.createSelection( range, { fake: true, label: 'foo' } );\n     *\n     * @param {module:engine/view/selection~Selectable} [selectable=null]\n     * @param {Number|'before'|'end'|'after'|'on'|'in'} [placeOrOffset] Offset or place when selectable is an `Item`.\n     * @param {Object} [options]\n     * @param {Boolean} [options.backward] Sets this selection instance to be backward.\n     * @param {Boolean} [options.fake] Sets this selection instance to be marked as `fake`.\n     * @param {String} [options.label] Label for the fake selection.\n     * @returns {module:engine/view/selection~Selection}\n     */\n  }, {\n    key: \"createSelection\",\n    value: function createSelection(selectable, placeOrOffset, options) {\n      return new Selection(selectable, placeOrOffset, options);\n    }\n\n    /**\n     * Disables or enables rendering. If the flag is set to `true` then the rendering will be disabled.\n     * If the flag is set to `false` and if there was some change in the meantime, then the rendering action will be performed.\n     *\n     * @protected\n     * @param {Boolean} flag A flag indicates whether the rendering should be disabled.\n     */\n  }, {\n    key: \"_disableRendering\",\n    value: function _disableRendering(flag) {\n      this._renderingDisabled = flag;\n      if (flag == false) {\n        // Render when you stop blocking rendering.\n        this.change(function () {});\n      }\n    }\n\n    /**\n     * Renders all changes. In order to avoid triggering the observers (e.g. mutations) all observers are disabled\n     * before rendering and re-enabled after that.\n     *\n     * @private\n     */\n  }, {\n    key: \"_render\",\n    value: function _render() {\n      this.isRenderingInProgress = true;\n      this.disableObservers();\n      this._renderer.render();\n      this.enableObservers();\n      this.isRenderingInProgress = false;\n    }\n\n    /**\n     * Fired after a topmost {@link module:engine/view/view~View#change change block} and all\n     * {@link module:engine/view/document~Document#registerPostFixer post-fixers} are executed.\n     *\n     * Actual rendering is performed as a first listener on 'normal' priority.\n     *\n     *\t\tview.on( 'render', () => {\n     *\t\t\t// Rendering to the DOM is complete.\n     *\t\t} );\n     *\n     * This event is useful when you want to update interface elements after the rendering, e.g. position of the\n     * balloon panel. If you wants to change view structure use\n     * {@link module:engine/view/document~Document#registerPostFixer post-fixers}.\n     *\n     * @event module:engine/view/view~View#event:render\n     */\n  }]);\n}();\nexport { View as default };\nmix(View, ObservableMixin);","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../postcss-loader/src/index.js??ref--16-0!./placeholder.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"27ded734\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../postcss-loader/src/index.js??ref--16-0!./placeholder.css\", function() {\n     var newContent = require(\"!!../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../postcss-loader/src/index.js??ref--16-0!./placeholder.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module enter/enter\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport EnterCommand from './entercommand';\nimport EnterObserver from './enterobserver';\n\n/**\n * This plugin handles the <kbd>Enter</kbd> key (hard line break) in the editor.\n *\n * See also the {@link module:enter/shiftenter~ShiftEnter} plugin.\n *\n * For more information about this feature see the {@glink api/enter package page}.\n *\n * @extends module:core/plugin~Plugin\n */\nvar Enter = /*#__PURE__*/function (_Plugin) {\n  function Enter() {\n    _classCallCheck(this, Enter);\n    return _callSuper(this, Enter, arguments);\n  }\n  _inherits(Enter, _Plugin);\n  return _createClass(Enter, [{\n    key: \"init\",\n    value: function init() {\n      var editor = this.editor;\n      var view = editor.editing.view;\n      var viewDocument = view.document;\n      view.addObserver(EnterObserver);\n      editor.commands.add('enter', new EnterCommand(editor));\n      this.listenTo(viewDocument, 'enter', function (evt, data) {\n        data.preventDefault();\n\n        // The soft enter key is handled by the ShiftEnter plugin.\n        if (data.isSoft) {\n          return;\n        }\n        editor.execute('enter');\n        view.scrollToTheSelection();\n      }, {\n        priority: 'low'\n      });\n    }\n  }], [{\n    key: \"pluginName\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return 'Enter';\n    }\n  }]);\n}(Plugin);\nexport { Enter as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.split.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module enter/entercommand\n */\n\nimport Command from '@ckeditor/ckeditor5-core/src/command';\nimport { getCopyOnEnterAttributes } from './utils';\n\n/**\n * Enter command. It is used by the {@link module:enter/enter~Enter Enter feature} to handle the <kbd>Enter</kbd> key.\n *\n * @extends module:core/command~Command\n */\nvar EnterCommand = /*#__PURE__*/function (_Command) {\n  function EnterCommand() {\n    _classCallCheck(this, EnterCommand);\n    return _callSuper(this, EnterCommand, arguments);\n  }\n  _inherits(EnterCommand, _Command);\n  return _createClass(EnterCommand, [{\n    key: \"execute\",\n    value:\n    /**\n     * @inheritDoc\n     */\n    function execute() {\n      var _this = this;\n      var model = this.editor.model;\n      var doc = model.document;\n      model.change(function (writer) {\n        enterBlock(_this.editor.model, writer, doc.selection, model.schema);\n        _this.fire('afterExecute', {\n          writer: writer\n        });\n      });\n    }\n  }]);\n}(Command); // Creates a new block in the way that the <kbd>Enter</kbd> key is expected to work.\n//\n// @param {module:engine/model~Model} model\n// @param {module:engine/model/writer~Writer} writer\n// @param {module:engine/model/selection~Selection|module:engine/model/documentselection~DocumentSelection} selection\n// Selection on which the action should be performed.\n// @param {module:engine/model/schema~Schema} schema\nexport { EnterCommand as default };\nfunction enterBlock(model, writer, selection, schema) {\n  var isSelectionEmpty = selection.isCollapsed;\n  var range = selection.getFirstRange();\n  var startElement = range.start.parent;\n  var endElement = range.end.parent;\n\n  // Don't touch the roots and other limit elements.\n  if (schema.isLimit(startElement) || schema.isLimit(endElement)) {\n    // Delete the selected content but only if inside a single limit element.\n    // Abort, when crossing limit elements boundary (e.g. <limit1>x[x</limit1>donttouchme<limit2>y]y</limit2>).\n    // This is an edge case and it's hard to tell what should actually happen because such a selection\n    // is not entirely valid.\n    if (!isSelectionEmpty && startElement == endElement) {\n      model.deleteContent(selection);\n    }\n    return;\n  }\n  if (isSelectionEmpty) {\n    var attributesToCopy = getCopyOnEnterAttributes(writer.model.schema, selection.getAttributes());\n    splitBlock(writer, range.start);\n    writer.setSelectionAttribute(attributesToCopy);\n  } else {\n    var leaveUnmerged = !(range.start.isAtStart && range.end.isAtEnd);\n    var isContainedWithinOneElement = startElement == endElement;\n    model.deleteContent(selection, {\n      leaveUnmerged: leaveUnmerged\n    });\n    if (leaveUnmerged) {\n      // Partially selected elements.\n      //\n      // <h>x[xx]x</h>\t\t-> <h>x^x</h>\t\t\t-> <h>x</h><h>^x</h>\n      if (isContainedWithinOneElement) {\n        splitBlock(writer, selection.focus);\n      }\n      // Selection over multiple elements.\n      //\n      // <h>x[x</h><p>y]y<p>\t-> <h>x^</h><p>y</p>\t-> <h>x</h><p>^y</p>\n      else {\n        writer.setSelection(endElement, 0);\n      }\n    }\n  }\n}\nfunction splitBlock(writer, splitPos) {\n  writer.split(splitPos);\n  writer.setSelection(splitPos.parent.nextSibling, 0);\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module enter/enterobserver\n */\n\nimport Observer from '@ckeditor/ckeditor5-engine/src/view/observer/observer';\nimport DomEventData from '@ckeditor/ckeditor5-engine/src/view/observer/domeventdata';\nimport { keyCodes } from '@ckeditor/ckeditor5-utils/src/keyboard';\n\n/**\n * Enter observer introduces the {@link module:engine/view/document~Document#event:enter} event.\n *\n * @extends module:engine/view/observer/observer~Observer\n */\nvar EnterObserver = /*#__PURE__*/function (_Observer) {\n  function EnterObserver(view) {\n    var _this;\n    _classCallCheck(this, EnterObserver);\n    _this = _callSuper(this, EnterObserver, [view]);\n    var doc = _this.document;\n    doc.on('keydown', function (evt, data) {\n      if (_this.isEnabled && data.keyCode == keyCodes.enter) {\n        // Save the event object to check later if it was stopped or not.\n        var event;\n        doc.once('enter', function (evt) {\n          return event = evt;\n        }, {\n          priority: 'highest'\n        });\n        doc.fire('enter', new DomEventData(doc, data.domEvent, {\n          isSoft: data.shiftKey\n        }));\n\n        // Stop `keydown` event if `enter` event was stopped.\n        // https://github.com/ckeditor/ckeditor5/issues/753\n        if (event && event.stop.called) {\n          evt.stop();\n        }\n      }\n    });\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(EnterObserver, _Observer);\n  return _createClass(EnterObserver, [{\n    key: \"observe\",\n    value: function observe() {}\n  }]);\n}(Observer);\n/**\n * Event fired when the user presses the <kbd>Enter</kbd> key.\n *\n * Note: This event is fired by the {@link module:enter/enterobserver~EnterObserver observer}\n * (usually registered by the {@link module:enter/enter~Enter Enter feature} and\n * {@link module:enter/shiftenter~ShiftEnter ShiftEnter feature}).\n *\n * @event module:engine/view/document~Document#event:enter\n * @param {module:engine/view/observer/domeventdata~DomEventData} data\n * @param {Boolean} data.isSoft Whether it's a soft enter (<kbd>Shift</kbd>+<kbd>Enter</kbd>) or hard enter (<kbd>Enter</kbd>).\n */\nexport { EnterObserver as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module enter/shiftenter\n */\n\nimport ShiftEnterCommand from './shiftentercommand';\nimport EnterObserver from './enterobserver';\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\n\n/**\n * This plugin handles the <kbd>Shift</kbd>+<kbd>Enter</kbd> keystroke (soft line break) in the editor.\n *\n * See also the {@link module:enter/enter~Enter} plugin.\n *\n * For more information about this feature see the {@glink api/enter package page}.\n *\n * @extends module:core/plugin~Plugin\n */\nvar ShiftEnter = /*#__PURE__*/function (_Plugin) {\n  function ShiftEnter() {\n    _classCallCheck(this, ShiftEnter);\n    return _callSuper(this, ShiftEnter, arguments);\n  }\n  _inherits(ShiftEnter, _Plugin);\n  return _createClass(ShiftEnter, [{\n    key: \"init\",\n    value: function init() {\n      var editor = this.editor;\n      var schema = editor.model.schema;\n      var conversion = editor.conversion;\n      var view = editor.editing.view;\n      var viewDocument = view.document;\n\n      // Configure the schema.\n      schema.register('softBreak', {\n        allowWhere: '$text',\n        isInline: true\n      });\n\n      // Configure converters.\n      conversion.for('upcast').elementToElement({\n        model: 'softBreak',\n        view: 'br'\n      });\n      conversion.for('downcast').elementToElement({\n        model: 'softBreak',\n        view: function view(modelElement, viewWriter) {\n          return viewWriter.createEmptyElement('br');\n        }\n      });\n      view.addObserver(EnterObserver);\n      editor.commands.add('shiftEnter', new ShiftEnterCommand(editor));\n      this.listenTo(viewDocument, 'enter', function (evt, data) {\n        data.preventDefault();\n\n        // The hard enter key is handled by the Enter plugin.\n        if (!data.isSoft) {\n          return;\n        }\n        editor.execute('shiftEnter');\n        view.scrollToTheSelection();\n      }, {\n        priority: 'low'\n      });\n    }\n  }], [{\n    key: \"pluginName\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return 'ShiftEnter';\n    }\n  }]);\n}(Plugin);\nexport { ShiftEnter as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.string.anchor.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module enter/shiftentercommand\n */\n\nimport Command from '@ckeditor/ckeditor5-core/src/command';\nimport { getCopyOnEnterAttributes } from './utils';\n\n/**\n * ShiftEnter command. It is used by the {@link module:enter/shiftenter~ShiftEnter ShiftEnter feature} to handle\n * the <kbd>Shift</kbd>+<kbd>Enter</kbd> keystroke.\n *\n * @extends module:core/command~Command\n */\nvar ShiftEnterCommand = /*#__PURE__*/function (_Command) {\n  function ShiftEnterCommand() {\n    _classCallCheck(this, ShiftEnterCommand);\n    return _callSuper(this, ShiftEnterCommand, arguments);\n  }\n  _inherits(ShiftEnterCommand, _Command);\n  return _createClass(ShiftEnterCommand, [{\n    key: \"execute\",\n    value:\n    /**\n     * @inheritDoc\n     */\n    function execute() {\n      var _this = this;\n      var model = this.editor.model;\n      var doc = model.document;\n      model.change(function (writer) {\n        softBreakAction(model, writer, doc.selection);\n        _this.fire('afterExecute', {\n          writer: writer\n        });\n      });\n    }\n  }, {\n    key: \"refresh\",\n    value: function refresh() {\n      var model = this.editor.model;\n      var doc = model.document;\n      this.isEnabled = isEnabled(model.schema, doc.selection);\n    }\n  }]);\n}(Command); // Checks whether the ShiftEnter command should be enabled in the specified selection.\n//\n// @param {module:engine/model/schema~Schema} schema\n// @param {module:engine/model/selection~Selection|module:engine/model/documentselection~DocumentSelection} selection\nexport { ShiftEnterCommand as default };\nfunction isEnabled(schema, selection) {\n  // At this moment it is okay to support single range selections only.\n  // But in the future we may need to change that.\n  if (selection.rangeCount > 1) {\n    return false;\n  }\n  var anchorPos = selection.anchor;\n\n  // Check whether the break element can be inserted in the current selection anchor.\n  if (!anchorPos || !schema.checkChild(anchorPos, 'softBreak')) {\n    return false;\n  }\n  var range = selection.getFirstRange();\n  var startElement = range.start.parent;\n  var endElement = range.end.parent;\n\n  // Do not modify the content if selection is cross-limit elements.\n  if ((isInsideLimitElement(startElement, schema) || isInsideLimitElement(endElement, schema)) && startElement !== endElement) {\n    return false;\n  }\n  return true;\n}\n\n// Creates a break in the way that the <kbd>Shift</kbd>+<kbd>Enter</kbd> keystroke is expected to work.\n//\n// @param {module:engine/model~Model} model\n// @param {module:engine/model/writer~Writer} writer\n// @param {module:engine/model/selection~Selection|module:engine/model/documentselection~DocumentSelection} selection\n// Selection on which the action should be performed.\nfunction softBreakAction(model, writer, selection) {\n  var isSelectionEmpty = selection.isCollapsed;\n  var range = selection.getFirstRange();\n  var startElement = range.start.parent;\n  var endElement = range.end.parent;\n  var isContainedWithinOneElement = startElement == endElement;\n  if (isSelectionEmpty) {\n    var attributesToCopy = getCopyOnEnterAttributes(model.schema, selection.getAttributes());\n    insertBreak(writer, range.end);\n    writer.removeSelectionAttribute(selection.getAttributeKeys());\n    writer.setSelectionAttribute(attributesToCopy);\n  } else {\n    var leaveUnmerged = !(range.start.isAtStart && range.end.isAtEnd);\n    model.deleteContent(selection, {\n      leaveUnmerged: leaveUnmerged\n    });\n\n    // Selection within one element:\n    //\n    // <h>x[xx]x</h>\t\t-> <h>x^x</h>\t\t\t-> <h>x<br>^x</h>\n    if (isContainedWithinOneElement) {\n      insertBreak(writer, selection.focus);\n    }\n    // Selection over multiple elements.\n    //\n    // <h>x[x</h><p>y]y<p>\t-> <h>x^</h><p>y</p>\t-> <h>x</h><p>^y</p>\n    //\n    // We chose not to insert a line break in this case because:\n    //\n    // * it's not a very common scenario,\n    // * it actually surprised me when I saw the \"expected behavior\" in real life.\n    //\n    // It's ok if the user will need to be more specific where they want the <br> to be inserted.\n    else {\n      // Move the selection to the 2nd element (last step of the example above).\n      if (leaveUnmerged) {\n        writer.setSelection(endElement, 0);\n      }\n    }\n  }\n}\nfunction insertBreak(writer, position) {\n  var breakLineElement = writer.createElement('softBreak');\n  writer.insert(breakLineElement, position);\n  writer.setSelection(breakLineElement, 'after');\n}\n\n// Checks whether the specified `element` is a child of the limit element.\n//\n// Checking whether the `<p>` element is inside a limit element:\n//   - <$root><p>Text.</p></$root> => false\n//   - <$root><limitElement><p>Text</p></limitElement></$root> => true\n//\n// @param {module:engine/model/element~Element} element\n// @param {module:engine/schema~Schema} schema\n// @returns {Boolean}\nfunction isInsideLimitElement(element, schema) {\n  // `$root` is a limit element but in this case is an invalid element.\n  if (element.is('rootElement')) {\n    return false;\n  }\n  return schema.isLimit(element) || isInsideLimitElement(element.parent, schema);\n}","import _regenerator from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regenerator.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nvar _marked = /*#__PURE__*/_regenerator().m(getCopyOnEnterAttributes);\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module enter/utils\n */\n\n/**\n * Returns attributes that should be preserved on the enter key.\n *\n * Filtering is realized based on `copyOnEnter` attribute property. Read more about attribute properties\n * {@link module:engine/model/schema~Schema#setAttributeProperties here}.\n *\n * @param {module:engine/model/schema~Schema} schema\n * @param {Iterable.<*>} allAttributes attributes to filter.\n * @returns {Iterable.<*>}\n */\nexport function getCopyOnEnterAttributes(schema, allAttributes) {\n  var _iterator, _step, attribute, _t;\n  return _regenerator().w(function (_context) {\n    while (1) switch (_context.p = _context.n) {\n      case 0:\n        _iterator = _createForOfIteratorHelper(allAttributes);\n        _context.p = 1;\n        _iterator.s();\n      case 2:\n        if ((_step = _iterator.n()).done) {\n          _context.n = 4;\n          break;\n        }\n        attribute = _step.value;\n        if (!(attribute && schema.getAttributeProperties(attribute[0]).copyOnEnter)) {\n          _context.n = 3;\n          break;\n        }\n        _context.n = 3;\n        return attribute;\n      case 3:\n        _context.n = 2;\n        break;\n      case 4:\n        _context.n = 6;\n        break;\n      case 5:\n        _context.p = 5;\n        _t = _context.v;\n        _iterator.e(_t);\n      case 6:\n        _context.p = 6;\n        _iterator.f();\n        return _context.f(6);\n      case 7:\n        return _context.a(2);\n    }\n  }, _marked, null, [[1, 5, 6, 7]]);\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module essentials/essentials\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport Clipboard from '@ckeditor/ckeditor5-clipboard/src/clipboard';\nimport Enter from '@ckeditor/ckeditor5-enter/src/enter';\nimport ShiftEnter from '@ckeditor/ckeditor5-enter/src/shiftenter';\nimport Typing from '@ckeditor/ckeditor5-typing/src/typing';\nimport Undo from '@ckeditor/ckeditor5-undo/src/undo';\n\n/**\n * A plugin including all essential editing features. It represents a set of features that enables similar functionalities\n * to a `<textarea>` element.\n *\n * It includes:\n *\n * * {@link module:clipboard/clipboard~Clipboard},\n * * {@link module:enter/enter~Enter},\n * * {@link module:enter/shiftenter~ShiftEnter},\n * * {@link module:typing/typing~Typing},\n * * {@link module:undo/undo~Undo}.\n *\n * This plugin set does not define any block-level containers (such as {@link module:paragraph/paragraph~Paragraph}).\n * If your editor is supposed to handle block content, make sure to include it.\n *\n * @extends module:core/plugin~Plugin\n */\nvar Essentials = /*#__PURE__*/function (_Plugin) {\n  function Essentials() {\n    _classCallCheck(this, Essentials);\n    return _callSuper(this, Essentials, arguments);\n  }\n  _inherits(Essentials, _Plugin);\n  return _createClass(Essentials, null, [{\n    key: \"requires\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return [Clipboard, Enter, ShiftEnter, Typing, Undo];\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"pluginName\",\n    get: function get() {\n      return 'Essentials';\n    }\n  }]);\n}(Plugin);\nexport { Essentials as default };","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module link/findlinkrange\n */\n\n/**\n * Returns a range containing the entire link in which the given `position` is placed.\n *\n * It can be used e.g. to get the entire range on which the `linkHref` attribute needs to be changed when having a\n * selection inside a link.\n *\n * @param {module:engine/model/position~Position} position The start position.\n * @param {String} value The `linkHref` attribute value.\n * @returns {module:engine/model/range~Range} The link range.\n */\nexport default function findLinkRange(position, value, model) {\n  return model.createRange(_findBound(position, value, true, model), _findBound(position, value, false, model));\n}\n\n// Walks forward or backward (depends on the `lookBack` flag), node by node, as long as they have the same `linkHref` attribute value\n// and returns a position just before or after (depends on the `lookBack` flag) the last matched node.\n//\n// @param {module:engine/model/position~Position} position The start position.\n// @param {String} value The `linkHref` attribute value.\n// @param {Boolean} lookBack Whether the walk direction is forward (`false`) or backward (`true`).\n// @returns {module:engine/model/position~Position} The position just before the last matched node.\nfunction _findBound(position, value, lookBack, model) {\n  // Get node before or after position (depends on `lookBack` flag).\n  // When position is inside text node then start searching from text node.\n  var node = position.textNode || (lookBack ? position.nodeBefore : position.nodeAfter);\n  var lastNode = null;\n  while (node && node.getAttribute('linkHref') == value) {\n    lastNode = node;\n    node = lookBack ? node.previousSibling : node.nextSibling;\n  }\n  return lastNode ? model.createPositionAt(lastNode, lookBack ? 'before' : 'after') : position;\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module link/link\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport LinkEditing from './linkediting';\nimport LinkUI from './linkui';\n\n/**\n * The link plugin.\n *\n * This is a \"glue\" plugin that loads the {@link module:link/linkediting~LinkEditing link editing feature}\n * and {@link module:link/linkui~LinkUI link UI feature}.\n *\n * @extends module:core/plugin~Plugin\n */\nvar Link = /*#__PURE__*/function (_Plugin) {\n  function Link() {\n    _classCallCheck(this, Link);\n    return _callSuper(this, Link, arguments);\n  }\n  _inherits(Link, _Plugin);\n  return _createClass(Link, null, [{\n    key: \"requires\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return [LinkEditing, LinkUI];\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"pluginName\",\n    get: function get() {\n      return 'Link';\n    }\n  }]);\n}(Plugin);\n/**\n * The configuration of the {@link module:link/link~Link} feature.\n *\n * Read more in {@link module:link/link~LinkConfig}.\n *\n * @member {module:link/link~LinkConfig} module:core/editor/editorconfig~EditorConfig#link\n */\n/**\n * The configuration of the {@link module:link/link~Link link feature}.\n *\n *\t\tClassicEditor\n *\t\t\t.create( editorElement, {\n * \t\t\t\tlink:  ... // Link feature configuration.\n *\t\t\t} )\n *\t\t\t.then( ... )\n *\t\t\t.catch( ... );\n *\n * See {@link module:core/editor/editorconfig~EditorConfig all editor options}.\n * @interface LinkConfig\n */\n/**\n * When set to `true`, the `target=\"blank\"` and `rel=\"noopener noreferrer\"` attributes are automatically added to all external links\n * in the editor. \"External links\" are all links in the editor content starting with `http`, `https`, or `//`.\n *\n *\t\tClassicEditor\n *\t\t\t.create( editorElement, {\n *\t\t\t\tlink: {\n *\t\t\t\t\taddTargetToExternalLinks: true\n *\t\t\t\t}\n *\t\t\t} )\n *\t\t\t.then( ... )\n *\t\t\t.catch( ... );\n *\n * Internally, this option activates a predefined {@link module:link/link~LinkConfig#decorators automatic link decorator}\n * that extends all external links with the `target` and `rel` attributes.\n *\n * **Note**: To control the `target` and `rel` attributes of specific links in the edited content, a dedicated\n * {@link module:link/link~LinkDecoratorManualDefinition manual} decorator must be defined in the\n * {@link module:link/link~LinkConfig#decorators `config.link.decorators`} array. In such scenario,\n * the `config.link.addTargetToExternalLinks` option should remain `undefined` or `false` to not interfere with the manual decorator.\n *\n * It is possible to add other {@link module:link/link~LinkDecoratorAutomaticDefinition automatic}\n * or {@link module:link/link~LinkDecoratorManualDefinition manual} link decorators when this option is active.\n *\n * More information about decorators can be found in the {@link module:link/link~LinkConfig#decorators decorators configuration}\n * reference.\n *\n * @default false\n * @member {Boolean} module:link/link~LinkConfig#addTargetToExternalLinks\n */\n/**\n * Decorators provide an easy way to configure and manage additional link attributes in the editor content. There are\n * two types of link decorators:\n *\n * * {@link module:link/link~LinkDecoratorAutomaticDefinition Automatic} &ndash; They match links against pre–defined rules and\n * manage their attributes based on the results.\n * * {@link module:link/link~LinkDecoratorManualDefinition Manual} &ndash; They allow users to control link attributes individually,\n *  using the editor UI.\n *\n * Link decorators are defined as objects with key-value pairs, where the key is the name provided for a given decorator and the\n * value is the decorator definition.\n *\n * The name of the decorator also corresponds to the {@glink framework/guides/architecture/editing-engine#text-attributes text attribute}\n * in the model. For instance, the `isExternal` decorator below is represented as a `linkIsExternal` attribute in the model.\n *\n *\t\tClassicEditor\n *\t\t\t.create( editorElement, {\n *\t\t\t\tlink: {\n *\t\t\t\t\tdecorators: {\n *\t\t\t\t\t\tisExternal: {\n *\t\t\t\t\t\t\tmode: 'automatic',\n *\t\t\t\t\t\t\tcallback: url => url.startsWith( 'http://' ),\n *\t\t\t\t\t\t\tattributes: {\n *\t\t\t\t\t\t\t\ttarget: '_blank',\n *\t\t\t\t\t\t\t\trel: 'noopener noreferrer'\n *\t\t\t\t\t\t\t}\n *\t\t\t\t\t\t},\n *\t\t\t\t\t\tisDownloadable: {\n *\t\t\t\t\t\t\tmode: 'manual',\n *\t\t\t\t\t\t\tlabel: 'Downloadable',\n *\t\t\t\t\t\t\tattributes: {\n *\t\t\t\t\t\t\t\tdownload: 'file.png',\n *\t\t\t\t\t\t\t}\n *\t\t\t\t\t\t},\n *\t\t\t\t\t\t// ...\n *\t\t\t\t\t}\n *\t\t\t\t}\n *\t\t\t} )\n *\t\t\t.then( ... )\n *\t\t\t.catch( ... );\n *\n * To learn more about the configuration syntax, check out the {@link module:link/link~LinkDecoratorAutomaticDefinition automatic}\n * and {@link module:link/link~LinkDecoratorManualDefinition manual} decorator option reference.\n *\n * **Warning:** Currently, link decorators work independently of one another and no conflict resolution mechanism exists.\n * For example, configuring the `target` attribute using both an automatic and a manual decorator at the same time could end up with\n * quirky results. The same applies if multiple manual or automatic decorators were defined for the same attribute.\n *\n * **Note**: Since the `target` attribute management for external links is a common use case, there is a predefined automatic decorator\n * dedicated for that purpose which can be enabled by turning a single option on. Check out the\n * {@link module:link/link~LinkConfig#addTargetToExternalLinks `config.link.addTargetToExternalLinks`}\n * configuration description to learn more.\n *\n * See also the {@glink features/link#custom-link-attributes-decorators link feature guide} for more information.\n *\n * @member {Object.<String, module:link/link~LinkDecoratorDefinition>} module:link/link~LinkConfig#decorators\n */\n/**\n * Represents a link decorator definition ({@link module:link/link~LinkDecoratorManualDefinition `'manual'`}\n * or {@link module:link/link~LinkDecoratorAutomaticDefinition `'automatic'`}).\n *\n * @interface LinkDecoratorDefinition\n */\n/**\n * Link decorator type.\n *\n * Check out the {@glink features/link#custom-link-attributes-decorators link feature guide} for more information.\n *\n * @member {'manual'|'automatic'} module:link/link~LinkDecoratorDefinition#mode\n */\n/**\n * Describes an automatic {@link module:link/link~LinkConfig#decorators link decorator}. This decorator type matches\n * all links in the editor content against a function that decides whether the link should receive a pre–defined set of attributes.\n *\n * It takes an object with key-value pairs of attributes and a callback function that must return a Boolean value based on the link's\n * `href` (URL). When the callback returns `true`, attributes are applied to the link.\n *\n * For example, to add the `target=\"_blank\"` attribute to all links in the editor starting with `http://`, the\n * configuration could look like this:\n *\n *\t\t{\n *\t\t\tmode: 'automatic',\n *\t\t\tcallback: url => url.startsWith( 'http://' ),\n *\t\t\tattributes: {\n *\t\t\t\ttarget: '_blank'\n *\t\t\t}\n *\t\t}\n *\n * **Note**: Since the `target` attribute management for external links is a common use case, there is a predefined automatic decorator\n * dedicated for that purpose that can be enabled by turning a single option on. Check out the\n * {@link module:link/link~LinkConfig#addTargetToExternalLinks `config.link.addTargetToExternalLinks`}\n * configuration description to learn more.\n *\n * @typedef {Object} module:link/link~LinkDecoratorAutomaticDefinition\n * @property {'automatic'} mode Link decorator type. It is `'automatic'` for all automatic decorators.\n * @property {Function} callback Takes a `url` as a parameter and returns `true` if the `attributes` should be applied to the link.\n * @property {Object} attributes Key-value pairs used as link attributes added to the output during the\n * {@glink framework/guides/architecture/editing-engine#conversion downcasting}.\n * Attributes should follow the {@link module:engine/view/elementdefinition~ElementDefinition} syntax.\n */\n/**\n * Describes a manual {@link module:link/link~LinkConfig#decorators link decorator}. This decorator type is represented in\n * the link feature's {@link module:link/linkui user interface} as a switch that the user can use to control the presence\n * of a predefined set of attributes.\n *\n * For instance, to allow the users to manually control the presence of the `target=\"_blank\"` and\n * `rel=\"noopener noreferrer\"` attributes on specific links, the decorator could look as follows:\n *\n *\t\t{\n *\t\t\tmode: 'manual',\n *\t\t\tlabel: 'Open in a new tab',\n *\t\t\tattributes: {\n *\t\t\t\ttarget: '_blank',\n *\t\t\t\trel: 'noopener noreferrer'\n *\t\t\t}\n *\t\t}\n *\n * @typedef {Object} module:link/link~LinkDecoratorManualDefinition\n * @property {'manual'} mode Link decorator type. It is `'manual'` for all manual decorators.\n * @property {String} label The label of the UI button that the user can use to control the presence of link attributes.\n * @property {Object} attributes Key-value pairs used as link attributes added to the output during the\n * {@glink framework/guides/architecture/editing-engine#conversion downcasting}.\n * Attributes should follow the {@link module:engine/view/elementdefinition~ElementDefinition} syntax.\n */\nexport { Link as default };","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.object.to-string.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module link/linkcommand\n */\n\nimport Command from '@ckeditor/ckeditor5-core/src/command';\nimport findLinkRange from './findlinkrange';\nimport toMap from '@ckeditor/ckeditor5-utils/src/tomap';\nimport Collection from '@ckeditor/ckeditor5-utils/src/collection';\n\n/**\n * The link command. It is used by the {@link module:link/link~Link link feature}.\n *\n * @extends module:core/command~Command\n */\nvar LinkCommand = /*#__PURE__*/function (_Command) {\n  /**\n   * The value of the `'linkHref'` attribute if the start of the selection is located in a node with this attribute.\n   *\n   * @observable\n   * @readonly\n   * @member {Object|undefined} #value\n   */\n\n  function LinkCommand(editor) {\n    var _this;\n    _classCallCheck(this, LinkCommand);\n    _this = _callSuper(this, LinkCommand, [editor]);\n\n    /**\n     * A collection of {@link module:link/utils~ManualDecorator manual decorators}\n     * corresponding to the {@link module:link/link~LinkConfig#decorators decorator configuration}.\n     *\n     * You can consider it a model with states of manual decorators added to the currently selected link.\n     *\n     * @readonly\n     * @type {module:utils/collection~Collection}\n     */\n    _this.manualDecorators = new Collection();\n    return _this;\n  }\n\n  /**\n   * Synchronizes the state of {@link #manualDecorators} with the currently present elements in the model.\n   */\n  _inherits(LinkCommand, _Command);\n  return _createClass(LinkCommand, [{\n    key: \"restoreManualDecoratorStates\",\n    value: function restoreManualDecoratorStates() {\n      var _iterator = _createForOfIteratorHelper(this.manualDecorators),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var manualDecorator = _step.value;\n          manualDecorator.value = this._getDecoratorStateFromModel(manualDecorator.id);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"refresh\",\n    value: function refresh() {\n      var model = this.editor.model;\n      var doc = model.document;\n      this.value = doc.selection.getAttribute('linkHref');\n      var _iterator2 = _createForOfIteratorHelper(this.manualDecorators),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var manualDecorator = _step2.value;\n          manualDecorator.value = this._getDecoratorStateFromModel(manualDecorator.id);\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      this.isEnabled = model.schema.checkAttributeInSelection(doc.selection, 'linkHref');\n    }\n\n    /**\n     * Executes the command.\n     *\n     * When the selection is non-collapsed, the `linkHref` attribute will be applied to nodes inside the selection, but only to\n     * those nodes where the `linkHref` attribute is allowed (disallowed nodes will be omitted).\n     *\n     * When the selection is collapsed and is not inside the text with the `linkHref` attribute, a\n     * new {@link module:engine/model/text~Text text node} with the `linkHref` attribute will be inserted in place of the caret, but\n     * only if such element is allowed in this place. The `_data` of the inserted text will equal the `href` parameter.\n     * The selection will be updated to wrap the just inserted text node.\n     *\n     * When the selection is collapsed and inside the text with the `linkHref` attribute, the attribute value will be updated.\n     *\n     * # Decorators and model attribute management\n     *\n     * There is an optional argument to this command that applies or removes model\n     * {@glink framework/guides/architecture/editing-engine#text-attributes text attributes} brought by\n     * {@link module:link/utils~ManualDecorator manual link decorators}.\n     *\n     * Text attribute names in the model correspond to the entries in the {@link module:link/link~LinkConfig#decorators configuration}.\n     * For every decorator configured, a model text attribute exists with the \"link\" prefix. For example, a `'linkMyDecorator'` attribute\n     * corresponds to `'myDecorator'` in the configuration.\n     *\n     * To learn more about link decorators, check out the {@link module:link/link~LinkConfig#decorators `config.link.decorators`}\n     * documentation.\n     *\n     * Here is how to manage decorator attributes with the link command:\n     *\n     *\t\tconst linkCommand = editor.commands.get( 'link' );\n     *\n     *\t\t// Adding a new decorator attribute.\n     *\t\tlinkCommand.execute( 'http://example.com', {\n     *\t\t\tlinkIsExternal: true\n     *\t\t} );\n     *\n     *\t\t// Removing a decorator attribute from the selection.\n     *\t\tlinkCommand.execute( 'http://example.com', {\n     *\t\t\tlinkIsExternal: false\n     *\t\t} );\n     *\n     *\t\t// Adding multiple decorator attributes at the same time.\n     *\t\tlinkCommand.execute( 'http://example.com', {\n     *\t\t\tlinkIsExternal: true,\n     *\t\t\tlinkIsDownloadable: true,\n     *\t\t} );\n     *\n     *\t\t// Removing and adding decorator attributes at the same time.\n     *\t\tlinkCommand.execute( 'http://example.com', {\n     *\t\t\tlinkIsExternal: false,\n     *\t\t\tlinkFoo: true,\n     *\t\t\tlinkIsDownloadable: false,\n     *\t\t} );\n     *\n     * **Note**: If the decorator attribute name is not specified, its state remains untouched.\n     *\n     * **Note**: {@link module:link/unlinkcommand~UnlinkCommand#execute `UnlinkCommand#execute()`} removes all\n     * decorator attributes.\n     *\n     * @fires execute\n     * @param {String} href Link destination.\n     * @param {Object} [manualDecoratorIds={}] The information about manual decorator attributes to be applied or removed upon execution.\n     */\n  }, {\n    key: \"execute\",\n    value: function execute(href) {\n      var manualDecoratorIds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var model = this.editor.model;\n      var selection = model.document.selection;\n      // Stores information about manual decorators to turn them on/off when command is applied.\n      var truthyManualDecorators = [];\n      var falsyManualDecorators = [];\n      for (var name in manualDecoratorIds) {\n        if (manualDecoratorIds[name]) {\n          truthyManualDecorators.push(name);\n        } else {\n          falsyManualDecorators.push(name);\n        }\n      }\n      model.change(function (writer) {\n        // If selection is collapsed then update selected link or insert new one at the place of caret.\n        if (selection.isCollapsed) {\n          var position = selection.getFirstPosition();\n\n          // When selection is inside text with `linkHref` attribute.\n          if (selection.hasAttribute('linkHref')) {\n            // Then update `linkHref` value.\n            var linkRange = findLinkRange(position, selection.getAttribute('linkHref'), model);\n            writer.setAttribute('linkHref', href, linkRange);\n            truthyManualDecorators.forEach(function (item) {\n              writer.setAttribute(item, true, linkRange);\n            });\n            falsyManualDecorators.forEach(function (item) {\n              writer.removeAttribute(item, linkRange);\n            });\n\n            // Create new range wrapping changed link.\n            writer.setSelection(linkRange);\n          }\n          // If not then insert text node with `linkHref` attribute in place of caret.\n          // However, since selection in collapsed, attribute value will be used as data for text node.\n          // So, if `href` is empty, do not create text node.\n          else if (href !== '') {\n            var attributes = toMap(selection.getAttributes());\n            attributes.set('linkHref', href);\n            truthyManualDecorators.forEach(function (item) {\n              attributes.set(item, true);\n            });\n            var node = writer.createText(href, attributes);\n            model.insertContent(node, position);\n\n            // Create new range wrapping created node.\n            writer.setSelection(writer.createRangeOn(node));\n          }\n        } else {\n          // If selection has non-collapsed ranges, we change attribute on nodes inside those ranges\n          // omitting nodes where `linkHref` attribute is disallowed.\n          var ranges = model.schema.getValidRanges(selection.getRanges(), 'linkHref');\n          var _iterator3 = _createForOfIteratorHelper(ranges),\n            _step3;\n          try {\n            var _loop = function _loop() {\n              var range = _step3.value;\n              writer.setAttribute('linkHref', href, range);\n              truthyManualDecorators.forEach(function (item) {\n                writer.setAttribute(item, true, range);\n              });\n              falsyManualDecorators.forEach(function (item) {\n                writer.removeAttribute(item, range);\n              });\n            };\n            for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n              _loop();\n            }\n          } catch (err) {\n            _iterator3.e(err);\n          } finally {\n            _iterator3.f();\n          }\n        }\n      });\n    }\n\n    /**\n     * Provides information whether a decorator with a given name is present in the currently processed selection.\n     *\n     * @private\n     * @param {String} decoratorName The name of the manual decorator used in the model\n     * @returns {Boolean} The information whether a given decorator is currently present in the selection.\n     */\n  }, {\n    key: \"_getDecoratorStateFromModel\",\n    value: function _getDecoratorStateFromModel(decoratorName) {\n      var doc = this.editor.model.document;\n      return doc.selection.getAttribute(decoratorName) || false;\n    }\n  }]);\n}(Command);\nexport { LinkCommand as default };","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.regexp.test.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module link/linkediting\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport LinkCommand from './linkcommand';\nimport UnlinkCommand from './unlinkcommand';\nimport { createLinkElement, ensureSafeUrl, getLocalizedDecorators, normalizeDecorators } from './utils';\nimport AutomaticDecorators from './utils/automaticdecorators';\nimport ManualDecorator from './utils/manualdecorator';\nimport bindTwoStepCaretToAttribute from '@ckeditor/ckeditor5-engine/src/utils/bindtwostepcarettoattribute';\nimport findLinkRange from './findlinkrange';\nimport '../theme/link.css';\nvar HIGHLIGHT_CLASS = 'ck-link_selected';\nvar DECORATOR_AUTOMATIC = 'automatic';\nvar DECORATOR_MANUAL = 'manual';\nvar EXTERNAL_LINKS_REGEXP = /^(https?:)?\\/\\//;\n\n/**\n * The link engine feature.\n *\n * It introduces the `linkHref=\"url\"` attribute in the model which renders to the view as a `<a href=\"url\">` element\n * as well as `'link'` and `'unlink'` commands.\n *\n * @extends module:core/plugin~Plugin\n */\nvar LinkEditing = /*#__PURE__*/function (_Plugin) {\n  /**\n   * @inheritDoc\n   */\n  function LinkEditing(editor) {\n    var _this;\n    _classCallCheck(this, LinkEditing);\n    _this = _callSuper(this, LinkEditing, [editor]);\n    editor.config.define('link', {\n      addTargetToExternalLinks: false\n    });\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(LinkEditing, _Plugin);\n  return _createClass(LinkEditing, [{\n    key: \"init\",\n    value: function init() {\n      var editor = this.editor;\n      var locale = editor.locale;\n\n      // Allow link attribute on all inline nodes.\n      editor.model.schema.extend('$text', {\n        allowAttributes: 'linkHref'\n      });\n      editor.conversion.for('dataDowncast').attributeToElement({\n        model: 'linkHref',\n        view: createLinkElement\n      });\n      editor.conversion.for('editingDowncast').attributeToElement({\n        model: 'linkHref',\n        view: function view(href, writer) {\n          return createLinkElement(ensureSafeUrl(href), writer);\n        }\n      });\n      editor.conversion.for('upcast').elementToAttribute({\n        view: {\n          name: 'a',\n          attributes: {\n            href: true\n          }\n        },\n        model: {\n          key: 'linkHref',\n          value: function value(viewElement) {\n            return viewElement.getAttribute('href');\n          }\n        }\n      });\n\n      // Create linking commands.\n      editor.commands.add('link', new LinkCommand(editor));\n      editor.commands.add('unlink', new UnlinkCommand(editor));\n      var linkDecorators = getLocalizedDecorators(editor.t, normalizeDecorators(editor.config.get('link.decorators')));\n      this._enableAutomaticDecorators(linkDecorators.filter(function (item) {\n        return item.mode === DECORATOR_AUTOMATIC;\n      }));\n      this._enableManualDecorators(linkDecorators.filter(function (item) {\n        return item.mode === DECORATOR_MANUAL;\n      }));\n\n      // Enable two-step caret movement for `linkHref` attribute.\n      bindTwoStepCaretToAttribute({\n        view: editor.editing.view,\n        model: editor.model,\n        emitter: this,\n        attribute: 'linkHref',\n        locale: locale\n      });\n\n      // Setup highlight over selected link.\n      this._setupLinkHighlight();\n    }\n\n    /**\n     * Processes an array of configured {@link module:link/link~LinkDecoratorAutomaticDefinition automatic decorators}\n     * and registers a {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher downcast dispatcher}\n     * for each one of them. Downcast dispatchers are obtained using the\n     * {@link module:link/utils~AutomaticDecorators#getDispatcher} method.\n     *\n     * **Note**: This method also activates the automatic external link decorator if enabled with\n     * {@link module:link/link~LinkConfig#addTargetToExternalLinks `config.link.addTargetToExternalLinks`}.\n     *\n     * @private\n     * @param {Array.<module:link/link~LinkDecoratorAutomaticDefinition>} automaticDecoratorDefinitions\n     */\n  }, {\n    key: \"_enableAutomaticDecorators\",\n    value: function _enableAutomaticDecorators(automaticDecoratorDefinitions) {\n      var editor = this.editor;\n      var automaticDecorators = new AutomaticDecorators();\n\n      // Adds a default decorator for external links.\n      if (editor.config.get('link.addTargetToExternalLinks')) {\n        automaticDecorators.add({\n          id: 'linkIsExternal',\n          mode: DECORATOR_AUTOMATIC,\n          callback: function callback(url) {\n            return EXTERNAL_LINKS_REGEXP.test(url);\n          },\n          attributes: {\n            target: '_blank',\n            rel: 'noopener noreferrer'\n          }\n        });\n      }\n      automaticDecorators.add(automaticDecoratorDefinitions);\n      if (automaticDecorators.length) {\n        editor.conversion.for('downcast').add(automaticDecorators.getDispatcher());\n      }\n    }\n\n    /**\n     * Processes an array of configured {@link module:link/link~LinkDecoratorManualDefinition manual decorators},\n     * transforms them into {@link module:link/utils~ManualDecorator} instances and stores them in the\n     * {@link module:link/linkcommand~LinkCommand#manualDecorators} collection (a model for manual decorators state).\n     *\n     * Also registers an {@link module:engine/conversion/downcasthelpers~DowncastHelpers#attributeToElement attribute-to-element}\n     * converter for each manual decorator and extends the {@link module:engine/model/schema~Schema model's schema}\n     * with adequate model attributes.\n     *\n     * @private\n     * @param {Array.<module:link/link~LinkDecoratorManualDefinition>} manualDecoratorDefinitions\n     */\n  }, {\n    key: \"_enableManualDecorators\",\n    value: function _enableManualDecorators(manualDecoratorDefinitions) {\n      if (!manualDecoratorDefinitions.length) {\n        return;\n      }\n      var editor = this.editor;\n      var command = editor.commands.get('link');\n      var manualDecorators = command.manualDecorators;\n      manualDecoratorDefinitions.forEach(function (decorator) {\n        editor.model.schema.extend('$text', {\n          allowAttributes: decorator.id\n        });\n\n        // Keeps reference to manual decorator to decode its name to attributes during downcast.\n        manualDecorators.add(new ManualDecorator(decorator));\n        editor.conversion.for('downcast').attributeToElement({\n          model: decorator.id,\n          view: function view(manualDecoratorName, writer) {\n            if (manualDecoratorName) {\n              var attributes = manualDecorators.get(decorator.id).attributes;\n              var element = writer.createAttributeElement('a', attributes, {\n                priority: 5\n              });\n              writer.setCustomProperty('link', true, element);\n              return element;\n            }\n          }\n        });\n        editor.conversion.for('upcast').elementToAttribute({\n          view: {\n            name: 'a',\n            attributes: manualDecorators.get(decorator.id).attributes\n          },\n          model: {\n            key: decorator.id\n          }\n        });\n      });\n    }\n\n    /**\n     * Adds a visual highlight style to a link in which the selection is anchored.\n     * Together with two-step caret movement, they indicate that the user is typing inside the link.\n     *\n     * Highlight is turned on by adding the `.ck-link_selected` class to the link in the view:\n     *\n     * * The class is removed before the conversion has started, as callbacks added with the `'highest'` priority\n     * to {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher} events.\n     * * The class is added in the view post fixer, after other changes in the model tree were converted to the view.\n     *\n     * This way, adding and removing the highlight does not interfere with conversion.\n     *\n     * @private\n     */\n  }, {\n    key: \"_setupLinkHighlight\",\n    value: function _setupLinkHighlight() {\n      var editor = this.editor;\n      var view = editor.editing.view;\n      var highlightedLinks = new Set();\n\n      // Adding the class.\n      view.document.registerPostFixer(function (writer) {\n        var selection = editor.model.document.selection;\n        var changed = false;\n        if (selection.hasAttribute('linkHref')) {\n          var modelRange = findLinkRange(selection.getFirstPosition(), selection.getAttribute('linkHref'), editor.model);\n          var viewRange = editor.editing.mapper.toViewRange(modelRange);\n\n          // There might be multiple `a` elements in the `viewRange`, for example, when the `a` element is\n          // broken by a UIElement.\n          var _iterator = _createForOfIteratorHelper(viewRange.getItems()),\n            _step;\n          try {\n            for (_iterator.s(); !(_step = _iterator.n()).done;) {\n              var item = _step.value;\n              if (item.is('a') && !item.hasClass(HIGHLIGHT_CLASS)) {\n                writer.addClass(HIGHLIGHT_CLASS, item);\n                highlightedLinks.add(item);\n                changed = true;\n              }\n            }\n          } catch (err) {\n            _iterator.e(err);\n          } finally {\n            _iterator.f();\n          }\n        }\n        return changed;\n      });\n\n      // Removing the class.\n      editor.conversion.for('editingDowncast').add(function (dispatcher) {\n        // Make sure the highlight is removed on every possible event, before conversion is started.\n        dispatcher.on('insert', removeHighlight, {\n          priority: 'highest'\n        });\n        dispatcher.on('remove', removeHighlight, {\n          priority: 'highest'\n        });\n        dispatcher.on('attribute', removeHighlight, {\n          priority: 'highest'\n        });\n        dispatcher.on('selection', removeHighlight, {\n          priority: 'highest'\n        });\n        function removeHighlight() {\n          view.change(function (writer) {\n            var _iterator2 = _createForOfIteratorHelper(highlightedLinks.values()),\n              _step2;\n            try {\n              for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n                var item = _step2.value;\n                writer.removeClass(HIGHLIGHT_CLASS, item);\n                highlightedLinks.delete(item);\n              }\n            } catch (err) {\n              _iterator2.e(err);\n            } finally {\n              _iterator2.f();\n            }\n          });\n        }\n      });\n    }\n  }], [{\n    key: \"pluginName\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return 'LinkEditing';\n    }\n  }]);\n}(Plugin);\nexport { LinkEditing as default };","import _classCallCheck from '/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js';\nimport _createClass from '/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js';\nimport _callSuper from '/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js';\nimport _superPropGet from '/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js';\nimport _inherits from '/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js';\nimport 'core-js/modules/es.array.find.js';\nimport 'core-js/modules/es.iterator.constructor.js';\nimport 'core-js/modules/es.iterator.find.js';\nimport 'core-js/modules/es.object.to-string.js';\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module link/linkui\n */\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport ClickObserver from '@ckeditor/ckeditor5-engine/src/view/observer/clickobserver';\nimport { isLinkElement } from './utils';\nimport ContextualBalloon from '@ckeditor/ckeditor5-ui/src/panel/balloon/contextualballoon';\nimport clickOutsideHandler from '@ckeditor/ckeditor5-ui/src/bindings/clickoutsidehandler';\nimport ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview';\nimport LinkFormView from './ui/linkformview';\nimport LinkActionsView from './ui/linkactionsview';\nimport linkIcon from '../theme/icons/link.svg';\nvar linkKeystroke = 'Ctrl+K';\n/**\n * The link UI plugin. It introduces the `'link'` and `'unlink'` buttons and support for the <kbd>Ctrl+K</kbd> keystroke.\n *\n * It uses the\n * {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon plugin}.\n *\n * @extends module:core/plugin~Plugin\n */\nvar LinkUI = /*#__PURE__*/\nfunction (_Plugin) {\n    function LinkUI() {\n        _classCallCheck(this, LinkUI);\n        return _callSuper(this, LinkUI, arguments);\n    }\n    _inherits(LinkUI, _Plugin);\n    return _createClass(LinkUI, [\n        {\n            key: 'init',\n            value: /**\n     * @inheritDoc\n     */\n            function init() {\n                var editor = this.editor;\n                editor.editing.view.addObserver(ClickObserver);\n                /**\n       * The actions view displayed inside of the balloon.\n       *\n       * @member {module:link/ui/linkactionsview~LinkActionsView}\n       */\n                this.actionsView = this._createActionsView();\n                /**\n       * The form view displayed inside the balloon.\n       *\n       * @member {module:link/ui/linkformview~LinkFormView}\n       */\n                this.formView = this._createFormView();\n                /**\n       * The contextual balloon plugin instance.\n       *\n       * @private\n       * @member {module:ui/panel/balloon/contextualballoon~ContextualBalloon}\n       */\n                this._balloon = editor.plugins.get(ContextualBalloon);\n                // Create toolbar buttons.\n                this._createToolbarLinkButton();\n                // Attach lifecycle actions to the the balloon.\n                this._enableUserBalloonInteractions();\n            }    /**\n     * @inheritDoc\n     */\n        },\n        {\n            key: 'destroy',\n            value: function destroy() {\n                _superPropGet(LinkUI, 'destroy', this, 3)([]);\n                // Destroy created UI components as they are not automatically destroyed (see ckeditor5#1341).\n                this.formView.destroy();\n            }    /**\n     * Creates the {@link module:link/ui/linkactionsview~LinkActionsView} instance.\n     *\n     * @private\n     * @returns {module:link/ui/linkactionsview~LinkActionsView} The link actions view instance.\n     */\n        },\n        {\n            key: '_createActionsView',\n            value: function _createActionsView() {\n                var _this = this;\n                var editor = this.editor;\n                var actionsView = new LinkActionsView(editor.locale);\n                var linkCommand = editor.commands.get('link');\n                var unlinkCommand = editor.commands.get('unlink');\n                actionsView.bind('href').to(linkCommand, 'value');\n                actionsView.editButtonView.bind('isEnabled').to(linkCommand);\n                actionsView.unlinkButtonView.bind('isEnabled').to(unlinkCommand);\n                // Execute unlink command after clicking on the \"Edit\" button.\n                this.listenTo(actionsView, 'edit', function () {\n                    _this._addFormView();\n                });\n                // Execute unlink command after clicking on the \"Unlink\" button.\n                this.listenTo(actionsView, 'unlink', function () {\n                    editor.execute('unlink');\n                    _this._hideUI();\n                });\n                // Close the panel on esc key press when the **actions have focus**.\n                actionsView.keystrokes.set('Esc', function (data, cancel) {\n                    _this._hideUI();\n                    cancel();\n                });\n                // Open the form view on Ctrl+K when the **actions have focus**..\n                actionsView.keystrokes.set(linkKeystroke, function (data, cancel) {\n                    _this._addFormView();\n                    cancel();\n                });\n                return actionsView;\n            }    /**\n     * Creates the {@link module:link/ui/linkformview~LinkFormView} instance.\n     *\n     * @private\n     * @returns {module:link/ui/linkformview~LinkFormView} The link form view instance.\n     */\n        },\n        {\n            key: '_createFormView',\n            value: function _createFormView() {\n                var _this2 = this;\n                var editor = this.editor;\n                var linkCommand = editor.commands.get('link');\n                var formView = new LinkFormView(editor.locale, linkCommand.manualDecorators);\n                formView.urlInputView.bind('value').to(linkCommand, 'value');\n                // Form elements should be read-only when corresponding commands are disabled.\n                formView.urlInputView.bind('isReadOnly').to(linkCommand, 'isEnabled', function (value) {\n                    return !value;\n                });\n                formView.saveButtonView.bind('isEnabled').to(linkCommand);\n                // Execute link command after clicking the \"Save\" button.\n                this.listenTo(formView, 'submit', function () {\n                    editor.execute('link', formView.urlInputView.inputView.element.value, formView.getDecoratorSwitchesState());\n                    _this2._closeFormView();\n                });\n                // Hide the panel after clicking the \"Cancel\" button.\n                this.listenTo(formView, 'cancel', function () {\n                    _this2._closeFormView();\n                });\n                // Close the panel on esc key press when the **form has focus**.\n                formView.keystrokes.set('Esc', function (data, cancel) {\n                    _this2._closeFormView();\n                    cancel();\n                });\n                return formView;\n            }    /**\n     * Creates a toolbar Link button. Clicking this button will show\n     * a {@link #_balloon} attached to the selection.\n     *\n     * @private\n     */\n        },\n        {\n            key: '_createToolbarLinkButton',\n            value: function _createToolbarLinkButton() {\n                var _this3 = this;\n                var editor = this.editor;\n                var linkCommand = editor.commands.get('link');\n                var t = editor.t;\n                // Handle the `Ctrl+K` keystroke and show the panel.\n                editor.keystrokes.set(linkKeystroke, function (keyEvtData, cancel) {\n                    // Prevent focusing the search bar in FF and opening new tab in Edge. #153, #154.\n                    cancel();\n                    if (linkCommand.isEnabled) {\n                        _this3._showUI(true);\n                    }\n                });\n                editor.ui.componentFactory.add('link', function (locale) {\n                    var button = new ButtonView(locale);\n                    button.isEnabled = true;\n                    button.label = t('Link');\n                    button.icon = linkIcon;\n                    button.keystroke = linkKeystroke;\n                    button.tooltip = true;\n                    button.isToggleable = true;\n                    // Bind button to the command.\n                    button.bind('isEnabled').to(linkCommand, 'isEnabled');\n                    button.bind('isOn').to(linkCommand, 'value', function (value) {\n                        return !!value;\n                    });\n                    // Show the panel on button click.\n                    _this3.listenTo(button, 'execute', function () {\n                        return _this3._showUI(true);\n                    });\n                    return button;\n                });\n            }    /**\n     * Attaches actions that control whether the balloon panel containing the\n     * {@link #formView} is visible or not.\n     *\n     * @private\n     */\n        },\n        {\n            key: '_enableUserBalloonInteractions',\n            value: function _enableUserBalloonInteractions() {\n                var _this4 = this;\n                var viewDocument = this.editor.editing.view.document;\n                // Handle click on view document and show panel when selection is placed inside the link element.\n                // Keep panel open until selection will be inside the same link element.\n                this.listenTo(viewDocument, 'click', function () {\n                    var parentLink = _this4._getSelectedLinkElement();\n                    if (parentLink) {\n                        // Then show panel but keep focus inside editor editable.\n                        _this4._showUI();\n                    }\n                });\n                // Focus the form if the balloon is visible and the Tab key has been pressed.\n                this.editor.keystrokes.set('Tab', function (data, cancel) {\n                    if (_this4._areActionsVisible && !_this4.actionsView.focusTracker.isFocused) {\n                        _this4.actionsView.focus();\n                        cancel();\n                    }\n                }, {\n                    // Use the high priority because the link UI navigation is more important\n                    // than other feature's actions, e.g. list indentation.\n                    // https://github.com/ckeditor/ckeditor5-link/issues/146\n                    priority: 'high'\n                });\n                // Close the panel on the Esc key press when the editable has focus and the balloon is visible.\n                this.editor.keystrokes.set('Esc', function (data, cancel) {\n                    if (_this4._isUIVisible) {\n                        _this4._hideUI();\n                        cancel();\n                    }\n                });\n                // Close on click outside of balloon panel element.\n                clickOutsideHandler({\n                    emitter: this.formView,\n                    activator: function activator() {\n                        return _this4._isUIInPanel;\n                    },\n                    contextElements: [this._balloon.view.element],\n                    callback: function callback() {\n                        return _this4._hideUI();\n                    }\n                });\n            }    /**\n     * Adds the {@link #actionsView} to the {@link #_balloon}.\n     *\n     * @protected\n     */\n        },\n        {\n            key: '_addActionsView',\n            value: function _addActionsView() {\n                if (this._areActionsInPanel) {\n                    return;\n                }\n                this._balloon.add({\n                    view: this.actionsView,\n                    position: this._getBalloonPositionData()\n                });\n            }    /**\n     * Adds the {@link #formView} to the {@link #_balloon}.\n     *\n     * @protected\n     */\n        },\n        {\n            key: '_addFormView',\n            value: function _addFormView() {\n                if (this._isFormInPanel) {\n                    return;\n                }\n                var editor = this.editor;\n                var linkCommand = editor.commands.get('link');\n                this._balloon.add({\n                    view: this.formView,\n                    position: this._getBalloonPositionData()\n                });\n                // Select input when form view is currently visible.\n                if (this._balloon.visibleView === this.formView) {\n                    this.formView.urlInputView.select();\n                }\n                // Make sure that each time the panel shows up, the URL field remains in sync with the value of\n                // the command. If the user typed in the input, then canceled the balloon (`urlInputView#value` stays\n                // unaltered) and re-opened it without changing the value of the link command (e.g. because they\n                // clicked the same link), they would see the old value instead of the actual value of the command.\n                // https://github.com/ckeditor/ckeditor5-link/issues/78\n                // https://github.com/ckeditor/ckeditor5-link/issues/123\n                this.formView.urlInputView.inputView.element.value = linkCommand.value || '';\n            }    /**\n     * Closes the form view. Decides whether the balloon should be hidden completely or if the action view should be shown. This is\n     * decided upon the link command value (which has a value if the document selection is in the link).\n     *\n     * Additionally, if any {@link module:link/link~LinkConfig#decorators} are defined in the editor configuration, the state of\n     * switch buttons responsible for manual decorator handling is restored.\n     *\n     * @private\n     */\n        },\n        {\n            key: '_closeFormView',\n            value: function _closeFormView() {\n                var linkCommand = this.editor.commands.get('link');\n                // Restore manual decorator states to represent the current model state. This case is important to reset the switch buttons\n                // when the user cancels the editing form.\n                linkCommand.restoreManualDecoratorStates();\n                if (linkCommand.value !== undefined) {\n                    this._removeFormView();\n                } else {\n                    this._hideUI();\n                }\n            }    /**\n     * Removes the {@link #formView} from the {@link #_balloon}.\n     *\n     * @protected\n     */\n        },\n        {\n            key: '_removeFormView',\n            value: function _removeFormView() {\n                if (this._isFormInPanel) {\n                    // Blur the input element before removing it from DOM to prevent issues in some browsers.\n                    // See https://github.com/ckeditor/ckeditor5/issues/1501.\n                    this.formView.saveButtonView.focus();\n                    this._balloon.remove(this.formView);\n                    // Because the form has an input which has focus, the focus must be brought back\n                    // to the editor. Otherwise, it would be lost.\n                    this.editor.editing.view.focus();\n                }\n            }    /**\n     * Shows the correct UI type for the current state of the command. It is either\n     * {@link #formView} or {@link #actionsView}.\n     *\n     * @param {Boolean} forceVisible\n     * @private\n     */\n        },\n        {\n            key: '_showUI',\n            value: function _showUI() {\n                var forceVisible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n                var editor = this.editor;\n                var linkCommand = editor.commands.get('link');\n                if (!linkCommand.isEnabled) {\n                    return;\n                }\n                // When there's no link under the selection, go straight to the editing UI.\n                if (!this._getSelectedLinkElement()) {\n                    this._addActionsView();\n                    // Be sure panel with link is visible.\n                    if (forceVisible) {\n                        this._balloon.showStack('main');\n                    }\n                    this._addFormView();\n                }    // If there's a link under the selection...\n                else {\n                    // Go to the editing UI if actions are already visible.\n                    if (this._areActionsVisible) {\n                        this._addFormView();\n                    }    // Otherwise display just the actions UI.\n                    else {\n                        this._addActionsView();\n                    }\n                    // Be sure panel with link is visible.\n                    if (forceVisible) {\n                        this._balloon.showStack('main');\n                    }\n                }\n                // Begin responding to ui#update once the UI is added.\n                this._startUpdatingUI();\n            }    /**\n     * Removes the {@link #formView} from the {@link #_balloon}.\n     *\n     * See {@link #_addFormView}, {@link #_addActionsView}.\n     *\n     * @protected\n     */\n        },\n        {\n            key: '_hideUI',\n            value: function _hideUI() {\n                if (!this._isUIInPanel) {\n                    return;\n                }\n                var editor = this.editor;\n                this.stopListening(editor.ui, 'update');\n                this.stopListening(this._balloon, 'change:visibleView');\n                // Make sure the focus always gets back to the editable _before_ removing the focused form view.\n                // Doing otherwise causes issues in some browsers. See https://github.com/ckeditor/ckeditor5-link/issues/193.\n                editor.editing.view.focus();\n                // Remove form first because it's on top of the stack.\n                this._removeFormView();\n                // Then remove the actions view because it's beneath the form.\n                this._balloon.remove(this.actionsView);\n            }    /**\n     * Makes the UI react to the {@link module:core/editor/editorui~EditorUI#event:update} event to\n     * reposition itself when the editor UI should be refreshed.\n     *\n     * See: {@link #_hideUI} to learn when the UI stops reacting to the `update` event.\n     *\n     * @protected\n     */\n        },\n        {\n            key: '_startUpdatingUI',\n            value: function _startUpdatingUI() {\n                var _this5 = this;\n                var editor = this.editor;\n                var viewDocument = editor.editing.view.document;\n                var prevSelectedLink = this._getSelectedLinkElement();\n                var prevSelectionParent = getSelectionParent();\n                var update = function update() {\n                    var selectedLink = _this5._getSelectedLinkElement();\n                    var selectionParent = getSelectionParent();\n                    // Hide the panel if:\n                    //\n                    // * the selection went out of the EXISTING link element. E.g. user moved the caret out\n                    //   of the link,\n                    // * the selection went to a different parent when creating a NEW link. E.g. someone\n                    //   else modified the document.\n                    // * the selection has expanded (e.g. displaying link actions then pressing SHIFT+Right arrow).\n                    //\n                    // Note: #_getSelectedLinkElement will return a link for a non-collapsed selection only\n                    // when fully selected.\n                    if (prevSelectedLink && !selectedLink || !prevSelectedLink && selectionParent !== prevSelectionParent) {\n                        _this5._hideUI();\n                    }    // Update the position of the panel when:\n                         //  * link panel is in the visible stack\n                         //  * the selection remains in the original link element,\n                         //  * there was no link element in the first place, i.e. creating a new link\n                    else if (_this5._isUIVisible) {\n                        // If still in a link element, simply update the position of the balloon.\n                        // If there was no link (e.g. inserting one), the balloon must be moved\n                        // to the new position in the editing view (a new native DOM range).\n                        _this5._balloon.updatePosition(_this5._getBalloonPositionData());\n                    }\n                    prevSelectedLink = selectedLink;\n                    prevSelectionParent = selectionParent;\n                };\n                function getSelectionParent() {\n                    return viewDocument.selection.focus.getAncestors().reverse().find(function (node) {\n                        return node.is('element');\n                    });\n                }\n                this.listenTo(editor.ui, 'update', update);\n                this.listenTo(this._balloon, 'change:visibleView', update);\n            }    /**\n     * Returns `true` when {@link #formView} is in the {@link #_balloon}.\n     *\n     * @readonly\n     * @protected\n     * @type {Boolean}\n     */\n        },\n        {\n            key: '_isFormInPanel',\n            get: function get() {\n                return this._balloon.hasView(this.formView);\n            }    /**\n     * Returns `true` when {@link #actionsView} is in the {@link #_balloon}.\n     *\n     * @readonly\n     * @protected\n     * @type {Boolean}\n     */\n        },\n        {\n            key: '_areActionsInPanel',\n            get: function get() {\n                return this._balloon.hasView(this.actionsView);\n            }    /**\n     * Returns `true` when {@link #actionsView} is in the {@link #_balloon} and it is\n     * currently visible.\n     *\n     * @readonly\n     * @protected\n     * @type {Boolean}\n     */\n        },\n        {\n            key: '_areActionsVisible',\n            get: function get() {\n                return this._balloon.visibleView === this.actionsView;\n            }    /**\n     * Returns `true` when {@link #actionsView} or {@link #formView} is in the {@link #_balloon}.\n     *\n     * @readonly\n     * @protected\n     * @type {Boolean}\n     */\n        },\n        {\n            key: '_isUIInPanel',\n            get: function get() {\n                return this._isFormInPanel || this._areActionsInPanel;\n            }    /**\n     * Returns `true` when {@link #actionsView} or {@link #formView} is in the {@link #_balloon} and it is\n     * currently visible.\n     *\n     * @readonly\n     * @protected\n     * @type {Boolean}\n     */\n        },\n        {\n            key: '_isUIVisible',\n            get: function get() {\n                var visibleView = this._balloon.visibleView;\n                return visibleView == this.formView || this._areActionsVisible;\n            }    /**\n     * Returns positioning options for the {@link #_balloon}. They control the way the balloon is attached\n     * to the target element or selection.\n     *\n     * If the selection is collapsed and inside a link element, the panel will be attached to the\n     * entire link element. Otherwise, it will be attached to the selection.\n     *\n     * @private\n     * @returns {module:utils/dom/position~Options}\n     */\n        },\n        {\n            key: '_getBalloonPositionData',\n            value: function _getBalloonPositionData() {\n                var view = this.editor.editing.view;\n                var viewDocument = view.document;\n                var targetLink = this._getSelectedLinkElement();\n                var target = targetLink ? // When selection is inside link element, then attach panel to this element.\n                view.domConverter.mapViewToDom(targetLink) : // Otherwise attach panel to the selection.\n                view.domConverter.viewRangeToDom(viewDocument.selection.getFirstRange());\n                return { target: target };\n            }    /**\n     * Returns the link {@link module:engine/view/attributeelement~AttributeElement} under\n     * the {@link module:engine/view/document~Document editing view's} selection or `null`\n     * if there is none.\n     *\n     * **Note**: For a non–collapsed selection, the link element is only returned when **fully**\n     * selected and the **only** element within the selection boundaries.\n     *\n     * @private\n     * @returns {module:engine/view/attributeelement~AttributeElement|null}\n     */\n        },\n        {\n            key: '_getSelectedLinkElement',\n            value: function _getSelectedLinkElement() {\n                var view = this.editor.editing.view;\n                var selection = view.document.selection;\n                if (selection.isCollapsed) {\n                    return findLinkElementAncestor(selection.getFirstPosition());\n                } else {\n                    // The range for fully selected link is usually anchored in adjacent text nodes.\n                    // Trim it to get closer to the actual link element.\n                    var range = selection.getFirstRange().getTrimmed();\n                    var startLink = findLinkElementAncestor(range.start);\n                    var endLink = findLinkElementAncestor(range.end);\n                    if (!startLink || startLink != endLink) {\n                        return null;\n                    }\n                    // Check if the link element is fully selected.\n                    if (view.createRangeIn(startLink).getTrimmed().isEqual(range)) {\n                        return startLink;\n                    } else {\n                        return null;\n                    }\n                }\n            }\n        }\n    ], [\n        {\n            key: 'requires',\n            get: /**\n     * @inheritDoc\n     */\n            function get() {\n                return [ContextualBalloon];\n            }    /**\n     * @inheritDoc\n     */\n        },\n        {\n            key: 'pluginName',\n            get: function get() {\n                return 'LinkUI';\n            }\n        }\n    ]);\n}(Plugin);\n// Returns a link element if there's one among the ancestors of the provided `Position`.\n//\n// @private\n// @param {module:engine/view/position~Position} View position to analyze.\n// @returns {module:engine/view/attributeelement~AttributeElement|null} Link element at the position or null.\nexport {\n    LinkUI as default\n};\nfunction findLinkElementAncestor(position) {\n    return position.getAncestors().find(function (ancestor) {\n        return isLinkElement(ancestor);\n    });\n}","import _classCallCheck from '/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js';\nimport _createClass from '/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js';\nimport _callSuper from '/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js';\nimport _superPropGet from '/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js';\nimport _inherits from '/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js';\nimport 'core-js/modules/es.object.to-string.js';\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module link/ui/linkactionsview\n */\nimport View from '@ckeditor/ckeditor5-ui/src/view';\nimport ViewCollection from '@ckeditor/ckeditor5-ui/src/viewcollection';\nimport ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview';\nimport FocusTracker from '@ckeditor/ckeditor5-utils/src/focustracker';\nimport FocusCycler from '@ckeditor/ckeditor5-ui/src/focuscycler';\nimport KeystrokeHandler from '@ckeditor/ckeditor5-utils/src/keystrokehandler';\nimport { ensureSafeUrl } from '../utils';\nimport unlinkIcon from '../../theme/icons/unlink.svg';\nimport pencilIcon from '@ckeditor/ckeditor5-core/theme/icons/pencil.svg';\nimport '../../theme/linkactions.css';\n/**\n * The link actions view class. This view displays the link preview, allows\n * unlinking or editing the link.\n *\n * @extends module:ui/view~View\n */\nvar LinkActionsView = /*#__PURE__*/\nfunction (_View) {\n    /**\n   * @inheritDoc\n   */\n    function LinkActionsView(locale) {\n        var _this;\n        _classCallCheck(this, LinkActionsView);\n        _this = _callSuper(this, LinkActionsView, [locale]);\n        var t = locale.t;\n        /**\n     * Tracks information about DOM focus in the actions.\n     *\n     * @readonly\n     * @member {module:utils/focustracker~FocusTracker}\n     */\n        _this.focusTracker = new FocusTracker();\n        /**\n     * An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.\n     *\n     * @readonly\n     * @member {module:utils/keystrokehandler~KeystrokeHandler}\n     */\n        _this.keystrokes = new KeystrokeHandler();\n        /**\n     * The href preview view.\n     *\n     * @member {module:ui/view~View}\n     */\n        _this.previewButtonView = _this._createPreviewButton();\n        /**\n     * The unlink button view.\n     *\n     * @member {module:ui/button/buttonview~ButtonView}\n     */\n        _this.unlinkButtonView = _this._createButton(t('Unlink'), unlinkIcon, 'unlink');\n        /**\n     * The edit link button view.\n     *\n     * @member {module:ui/button/buttonview~ButtonView}\n     */\n        _this.editButtonView = _this._createButton(t('Edit link'), pencilIcon, 'edit');\n        /**\n     * The value of the \"href\" attribute of the link to use in the {@link #previewButtonView}.\n     *\n     * @observable\n     * @member {String}\n     */\n        _this.set('href');\n        /**\n     * A collection of views that can be focused in the view.\n     *\n     * @readonly\n     * @protected\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n        _this._focusables = new ViewCollection();\n        /**\n     * Helps cycling over {@link #_focusables} in the view.\n     *\n     * @readonly\n     * @protected\n     * @member {module:ui/focuscycler~FocusCycler}\n     */\n        _this._focusCycler = new FocusCycler({\n            focusables: _this._focusables,\n            focusTracker: _this.focusTracker,\n            keystrokeHandler: _this.keystrokes,\n            actions: {\n                // Navigate fields backwards using the Shift + Tab keystroke.\n                focusPrevious: 'shift + tab',\n                // Navigate fields forwards using the Tab key.\n                focusNext: 'tab'\n            }\n        });\n        _this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-link-actions'\n                ],\n                // https://github.com/ckeditor/ckeditor5-link/issues/90\n                tabindex: '-1'\n            },\n            children: [\n                _this.previewButtonView,\n                _this.editButtonView,\n                _this.unlinkButtonView\n            ]\n        });\n        return _this;\n    }\n    /**\n   * @inheritDoc\n   */\n    _inherits(LinkActionsView, _View);\n    return _createClass(LinkActionsView, [\n        {\n            key: 'render',\n            value: function render() {\n                var _this2 = this;\n                _superPropGet(LinkActionsView, 'render', this, 3)([]);\n                var childViews = [\n                    this.previewButtonView,\n                    this.editButtonView,\n                    this.unlinkButtonView\n                ];\n                childViews.forEach(function (v) {\n                    // Register the view as focusable.\n                    _this2._focusables.add(v);\n                    // Register the view in the focus tracker.\n                    _this2.focusTracker.add(v.element);\n                });\n                // Start listening for the keystrokes coming from #element.\n                this.keystrokes.listenTo(this.element);\n            }    /**\n     * Focuses the fist {@link #_focusables} in the actions.\n     */\n        },\n        {\n            key: 'focus',\n            value: function focus() {\n                this._focusCycler.focusFirst();\n            }    /**\n     * Creates a button view.\n     *\n     * @private\n     * @param {String} label The button label.\n     * @param {String} icon The button icon.\n     * @param {String} [eventName] An event name that the `ButtonView#execute` event will be delegated to.\n     * @returns {module:ui/button/buttonview~ButtonView} The button view instance.\n     */\n        },\n        {\n            key: '_createButton',\n            value: function _createButton(label, icon, eventName) {\n                var button = new ButtonView(this.locale);\n                button.set({\n                    label: label,\n                    icon: icon,\n                    tooltip: true\n                });\n                button.delegate('execute').to(this, eventName);\n                return button;\n            }    /**\n     * Creates a link href preview button.\n     *\n     * @private\n     * @returns {module:ui/button/buttonview~ButtonView} The button view instance.\n     */\n        },\n        {\n            key: '_createPreviewButton',\n            value: function _createPreviewButton() {\n                var button = new ButtonView(this.locale);\n                var bind = this.bindTemplate;\n                var t = this.t;\n                button.set({\n                    withText: true,\n                    tooltip: t('Open link in new tab')\n                });\n                button.extendTemplate({\n                    attributes: {\n                        class: [\n                            'ck',\n                            'ck-link-actions__preview'\n                        ],\n                        href: bind.to('href', function (href) {\n                            return href && ensureSafeUrl(href);\n                        }),\n                        target: '_blank'\n                    }\n                });\n                button.bind('label').to(this, 'href', function (href) {\n                    return href || t('This link has no URL');\n                });\n                button.bind('isEnabled').to(this, 'href', function (href) {\n                    return !!href;\n                });\n                button.template.tag = 'a';\n                button.template.eventListeners = {};\n                return button;\n            }\n        }\n    ]);\n}(View);\n/**\n * Fired when the {@link #editButtonView} is clicked.\n *\n * @event edit\n */\n/**\n * Fired when the {@link #unlinkButtonView} is clicked.\n *\n * @event unlink\n */\nexport {\n    LinkActionsView as default\n};","import _createForOfIteratorHelper from '/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js';\nimport _toConsumableArray from '/github/workspace/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js';\nimport _classCallCheck from '/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js';\nimport _createClass from '/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js';\nimport _callSuper from '/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js';\nimport _superPropGet from '/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js';\nimport _inherits from '/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js';\nimport 'core-js/modules/es.array.concat.js';\nimport 'core-js/modules/es.array.from.js';\nimport 'core-js/modules/es.array.map.js';\nimport 'core-js/modules/es.array.push.js';\nimport 'core-js/modules/es.array.reduce.js';\nimport 'core-js/modules/es.function.name.js';\nimport 'core-js/modules/es.iterator.constructor.js';\nimport 'core-js/modules/es.iterator.for-each.js';\nimport 'core-js/modules/es.iterator.map.js';\nimport 'core-js/modules/es.iterator.reduce.js';\nimport 'core-js/modules/es.object.to-string.js';\nimport 'core-js/modules/es.string.iterator.js';\nimport 'core-js/modules/web.dom-collections.for-each.js';\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module link/ui/linkformview\n */\nimport View from '@ckeditor/ckeditor5-ui/src/view';\nimport ViewCollection from '@ckeditor/ckeditor5-ui/src/viewcollection';\nimport ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview';\nimport SwitchButtonView from '@ckeditor/ckeditor5-ui/src/button/switchbuttonview';\nimport LabeledInputView from '@ckeditor/ckeditor5-ui/src/labeledinput/labeledinputview';\nimport InputTextView from '@ckeditor/ckeditor5-ui/src/inputtext/inputtextview';\nimport submitHandler from '@ckeditor/ckeditor5-ui/src/bindings/submithandler';\nimport FocusTracker from '@ckeditor/ckeditor5-utils/src/focustracker';\nimport FocusCycler from '@ckeditor/ckeditor5-ui/src/focuscycler';\nimport KeystrokeHandler from '@ckeditor/ckeditor5-utils/src/keystrokehandler';\nimport checkIcon from '@ckeditor/ckeditor5-core/theme/icons/check.svg';\nimport cancelIcon from '@ckeditor/ckeditor5-core/theme/icons/cancel.svg';\nimport '../../theme/linkform.css';\n/**\n * The link form view controller class.\n *\n * See {@link module:link/ui/linkformview~LinkFormView}.\n *\n * @extends module:ui/view~View\n */\nvar LinkFormView = /*#__PURE__*/\nfunction (_View) {\n    /**\n   * Creates an instance of the {@link module:link/ui/linkformview~LinkFormView} class.\n   *\n   * Also see {@link #render}.\n   *\n   * @param {module:utils/locale~Locale} [locale] The localization services instance.\n   * @param {module:utils/collection~Collection} [manualDecorators] Reference to manual decorators in\n   * {@link module:link/linkcommand~LinkCommand#manualDecorators}.\n   */\n    function LinkFormView(locale) {\n        var _this;\n        var manualDecorators = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n        _classCallCheck(this, LinkFormView);\n        _this = _callSuper(this, LinkFormView, [locale]);\n        var t = locale.t;\n        /**\n     * Tracks information about DOM focus in the form.\n     *\n     * @readonly\n     * @member {module:utils/focustracker~FocusTracker}\n     */\n        _this.focusTracker = new FocusTracker();\n        /**\n     * An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.\n     *\n     * @readonly\n     * @member {module:utils/keystrokehandler~KeystrokeHandler}\n     */\n        _this.keystrokes = new KeystrokeHandler();\n        /**\n     * The URL input view.\n     *\n     * @member {module:ui/labeledinput/labeledinputview~LabeledInputView}\n     */\n        _this.urlInputView = _this._createUrlInput();\n        /**\n     * The Save button view.\n     *\n     * @member {module:ui/button/buttonview~ButtonView}\n     */\n        _this.saveButtonView = _this._createButton(t('Save'), checkIcon, 'ck-button-save');\n        _this.saveButtonView.type = 'submit';\n        /**\n     * The Cancel button view.\n     *\n     * @member {module:ui/button/buttonview~ButtonView}\n     */\n        _this.cancelButtonView = _this._createButton(t('Cancel'), cancelIcon, 'ck-button-cancel', 'cancel');\n        /**\n     * A collection of {@link module:ui/button/switchbuttonview~SwitchButtonView},\n     * which corresponds to {@link module:link/linkcommand~LinkCommand#manualDecorators manual decorators}\n     * configured in the editor.\n     *\n     * @private\n     * @readonly\n     * @type {module:ui/viewcollection~ViewCollection}\n     */\n        _this._manualDecoratorSwitches = _this._createManualDecoratorSwitches(manualDecorators);\n        /**\n     * A collection of child views in the form.\n     *\n     * @readonly\n     * @type {module:ui/viewcollection~ViewCollection}\n     */\n        _this.children = _this._createFormChildren(manualDecorators);\n        /**\n     * A collection of views that can be focused in the form.\n     *\n     * @readonly\n     * @protected\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n        _this._focusables = new ViewCollection();\n        /**\n     * Helps cycling over {@link #_focusables} in the form.\n     *\n     * @readonly\n     * @protected\n     * @member {module:ui/focuscycler~FocusCycler}\n     */\n        _this._focusCycler = new FocusCycler({\n            focusables: _this._focusables,\n            focusTracker: _this.focusTracker,\n            keystrokeHandler: _this.keystrokes,\n            actions: {\n                // Navigate form fields backwards using the Shift + Tab keystroke.\n                focusPrevious: 'shift + tab',\n                // Navigate form fields forwards using the Tab key.\n                focusNext: 'tab'\n            }\n        });\n        var classList = [\n            'ck',\n            'ck-link-form'\n        ];\n        if (manualDecorators.length) {\n            classList.push('ck-link-form_layout-vertical');\n        }\n        _this.setTemplate({\n            tag: 'form',\n            attributes: {\n                class: classList,\n                // https://github.com/ckeditor/ckeditor5-link/issues/90\n                tabindex: '-1'\n            },\n            children: _this.children\n        });\n        return _this;\n    }\n    /**\n   * Obtains the state of the {@link module:ui/button/switchbuttonview~SwitchButtonView switch buttons} representing\n   * {@link module:link/linkcommand~LinkCommand#manualDecorators manual link decorators}\n   * in the {@link module:link/ui/linkformview~LinkFormView}.\n   *\n   * @returns {Object.<String,Boolean>} Key-value pairs, where the key is the name of the decorator and the value is\n   * its state.\n   */\n    _inherits(LinkFormView, _View);\n    return _createClass(LinkFormView, [\n        {\n            key: 'getDecoratorSwitchesState',\n            value: function getDecoratorSwitchesState() {\n                return Array.from(this._manualDecoratorSwitches).reduce(function (accumulator, switchButton) {\n                    accumulator[switchButton.name] = switchButton.isOn;\n                    return accumulator;\n                }, {});\n            }    /**\n     * @inheritDoc\n     */\n        },\n        {\n            key: 'render',\n            value: function render() {\n                var _this2 = this;\n                _superPropGet(LinkFormView, 'render', this, 3)([]);\n                submitHandler({ view: this });\n                var childViews = [this.urlInputView].concat(_toConsumableArray(this._manualDecoratorSwitches), [\n                    this.saveButtonView,\n                    this.cancelButtonView\n                ]);\n                childViews.forEach(function (v) {\n                    // Register the view as focusable.\n                    _this2._focusables.add(v);\n                    // Register the view in the focus tracker.\n                    _this2.focusTracker.add(v.element);\n                });\n                // Start listening for the keystrokes coming from #element.\n                this.keystrokes.listenTo(this.element);\n            }    /**\n     * Focuses the fist {@link #_focusables} in the form.\n     */\n        },\n        {\n            key: 'focus',\n            value: function focus() {\n                this._focusCycler.focusFirst();\n            }    /**\n     * Creates a labeled input view.\n     *\n     * @private\n     * @returns {module:ui/labeledinput/labeledinputview~LabeledInputView} Labeled input view instance.\n     */\n        },\n        {\n            key: '_createUrlInput',\n            value: function _createUrlInput() {\n                var t = this.locale.t;\n                var labeledInput = new LabeledInputView(this.locale, InputTextView);\n                labeledInput.label = t('Link URL');\n                labeledInput.inputView.placeholder = 'https://example.com';\n                return labeledInput;\n            }    /**\n     * Creates a button view.\n     *\n     * @private\n     * @param {String} label The button label.\n     * @param {String} icon The button icon.\n     * @param {String} className The additional button CSS class name.\n     * @param {String} [eventName] An event name that the `ButtonView#execute` event will be delegated to.\n     * @returns {module:ui/button/buttonview~ButtonView} The button view instance.\n     */\n        },\n        {\n            key: '_createButton',\n            value: function _createButton(label, icon, className, eventName) {\n                var button = new ButtonView(this.locale);\n                button.set({\n                    label: label,\n                    icon: icon,\n                    tooltip: true\n                });\n                button.extendTemplate({ attributes: { class: className } });\n                if (eventName) {\n                    button.delegate('execute').to(this, eventName);\n                }\n                return button;\n            }    /**\n     * Populates {@link module:ui/viewcollection~ViewCollection} of {@link module:ui/button/switchbuttonview~SwitchButtonView}\n     * made based on {@link module:link/linkcommand~LinkCommand#manualDecorators}.\n     *\n     * @private\n     * @param {module:utils/collection~Collection} manualDecorators A reference to the\n     * collection of manual decorators stored in the link command.\n     * @returns {module:ui/viewcollection~ViewCollection} of switch buttons.\n     */\n        },\n        {\n            key: '_createManualDecoratorSwitches',\n            value: function _createManualDecoratorSwitches(manualDecorators) {\n                var _this3 = this;\n                var switches = this.createCollection();\n                var _iterator = _createForOfIteratorHelper(manualDecorators), _step;\n                try {\n                    var _loop = function _loop() {\n                        var manualDecorator = _step.value;\n                        var switchButton = new SwitchButtonView(_this3.locale);\n                        switchButton.set({\n                            name: manualDecorator.id,\n                            label: manualDecorator.label,\n                            withText: true\n                        });\n                        switchButton.bind('isOn').to(manualDecorator, 'value');\n                        switchButton.on('execute', function () {\n                            manualDecorator.set('value', !switchButton.isOn);\n                        });\n                        switches.add(switchButton);\n                    };\n                    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n                        _loop();\n                    }\n                } catch (err) {\n                    _iterator.e(err);\n                } finally {\n                    _iterator.f();\n                }\n                return switches;\n            }    /**\n     * Populates the {@link #children} collection of the form.\n     *\n     * If {@link module:link/linkcommand~LinkCommand#manualDecorators manual decorators} are configured in the editor, it creates an\n     * additional `View` wrapping all {@link #_manualDecoratorSwitches} switch buttons corresponding\n     * to these decorators.\n     *\n     * @private\n     * @param {module:utils/collection~Collection} manualDecorators A reference to\n     * the collection of manual decorators stored in the link command.\n     * @returns {module:ui/viewcollection~ViewCollection} The children of link form view.\n     */\n        },\n        {\n            key: '_createFormChildren',\n            value: function _createFormChildren(manualDecorators) {\n                var children = this.createCollection();\n                children.add(this.urlInputView);\n                if (manualDecorators.length) {\n                    var additionalButtonsView = new View();\n                    additionalButtonsView.setTemplate({\n                        tag: 'ul',\n                        children: this._manualDecoratorSwitches.map(function (switchButton) {\n                            return {\n                                tag: 'li',\n                                children: [switchButton],\n                                attributes: {\n                                    class: [\n                                        'ck',\n                                        'ck-list__item'\n                                    ]\n                                }\n                            };\n                        }),\n                        attributes: {\n                            class: [\n                                'ck',\n                                'ck-reset',\n                                'ck-list'\n                            ]\n                        }\n                    });\n                    children.add(additionalButtonsView);\n                }\n                children.add(this.saveButtonView);\n                children.add(this.cancelButtonView);\n                return children;\n            }\n        }\n    ]);\n}(View);\n/**\n * Fired when the form view is submitted (when one of the children triggered the submit event),\n * for example with a click on {@link #saveButtonView}.\n *\n * @event submit\n */\n/**\n * Fired when the form view is canceled, for example with a click on {@link #cancelButtonView}.\n *\n * @event cancel\n */\nexport {\n    LinkFormView as default\n};","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module link/unlinkcommand\n */\n\nimport Command from '@ckeditor/ckeditor5-core/src/command';\nimport findLinkRange from './findlinkrange';\n\n/**\n * The unlink command. It is used by the {@link module:link/link~Link link plugin}.\n *\n * @extends module:core/command~Command\n */\nvar UnlinkCommand = /*#__PURE__*/function (_Command) {\n  function UnlinkCommand() {\n    _classCallCheck(this, UnlinkCommand);\n    return _callSuper(this, UnlinkCommand, arguments);\n  }\n  _inherits(UnlinkCommand, _Command);\n  return _createClass(UnlinkCommand, [{\n    key: \"refresh\",\n    value:\n    /**\n     * @inheritDoc\n     */\n    function refresh() {\n      this.isEnabled = this.editor.model.document.selection.hasAttribute('linkHref');\n    }\n\n    /**\n     * Executes the command.\n     *\n     * When the selection is collapsed, it removes the `linkHref` attribute from each node with the same `linkHref` attribute value.\n     * When the selection is non-collapsed, it removes the `linkHref` attribute from each node in selected ranges.\n     *\n     * # Decorators\n     *\n     * If {@link module:link/link~LinkConfig#decorators `config.link.decorators`} is specified,\n     * all configured decorators are removed together with the `linkHref` attribute.\n     *\n     * @fires execute\n     */\n  }, {\n    key: \"execute\",\n    value: function execute() {\n      var editor = this.editor;\n      var model = this.editor.model;\n      var selection = model.document.selection;\n      var linkCommand = editor.commands.get('link');\n      model.change(function (writer) {\n        // Get ranges to unlink.\n        var rangesToUnlink = selection.isCollapsed ? [findLinkRange(selection.getFirstPosition(), selection.getAttribute('linkHref'), model)] : selection.getRanges();\n\n        // Remove `linkHref` attribute from specified ranges.\n        var _iterator = _createForOfIteratorHelper(rangesToUnlink),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var range = _step.value;\n            writer.removeAttribute('linkHref', range);\n            // If there are registered custom attributes, then remove them during unlink.\n            if (linkCommand) {\n              var _iterator2 = _createForOfIteratorHelper(linkCommand.manualDecorators),\n                _step2;\n              try {\n                for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n                  var manualDecorator = _step2.value;\n                  writer.removeAttribute(manualDecorator.id, range);\n                }\n              } catch (err) {\n                _iterator2.e(err);\n              } finally {\n                _iterator2.f();\n              }\n            }\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      });\n    }\n  }]);\n}(Command);\nexport { UnlinkCommand as default };","import _slicedToArray from '/github/workspace/node_modules/@babel/runtime/helpers/esm/slicedToArray.js';\nimport 'core-js/modules/es.array.push.js';\nimport 'core-js/modules/es.iterator.constructor.js';\nimport 'core-js/modules/es.iterator.for-each.js';\nimport 'core-js/modules/es.object.entries.js';\nimport 'core-js/modules/es.object.to-string.js';\nimport 'core-js/modules/es.regexp.exec.js';\nimport 'core-js/modules/es.string.match.js';\nimport 'core-js/modules/es.string.replace.js';\nimport 'core-js/modules/web.dom-collections.for-each.js';\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module link/utils\n */\nimport { upperFirst } from 'lodash-es';\nvar ATTRIBUTE_WHITESPACES = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g;\n// eslint-disable-line no-control-regex\nvar SAFE_URL = /^(?:(?:https?|ftps?|mailto):|[^a-z]|[a-z+.-]+(?:[^a-z+.:-]|$))/i;\n/**\n * Returns `true` if a given view node is the link element.\n *\n * @param {module:engine/view/node~Node} node\n * @returns {Boolean}\n */\nexport function isLinkElement(node) {\n    return node.is('attributeElement') && !!node.getCustomProperty('link');\n}\n/**\n * Creates link {@link module:engine/view/attributeelement~AttributeElement} with the provided `href` attribute.\n *\n * @param {String} href\n * @returns {module:engine/view/attributeelement~AttributeElement}\n */\nexport function createLinkElement(href, writer) {\n    // Priority 5 - https://github.com/ckeditor/ckeditor5-link/issues/121.\n    var linkElement = writer.createAttributeElement('a', { href: href }, { priority: 5 });\n    writer.setCustomProperty('link', true, linkElement);\n    return linkElement;\n}\n/**\n * Returns a safe URL based on a given value.\n *\n * A URL is considered safe if it is safe for the user (does not contain any malicious code).\n *\n * If a URL is considered unsafe, a simple `\"#\"` is returned.\n *\n * @protected\n * @param {*} url\n * @returns {String} Safe URL.\n */\nexport function ensureSafeUrl(url) {\n    url = String(url);\n    return isSafeUrl(url) ? url : '#';\n}\n// Checks whether the given URL is safe for the user (does not contain any malicious code).\n//\n// @param {String} url URL to check.\nfunction isSafeUrl(url) {\n    var normalizedUrl = url.replace(ATTRIBUTE_WHITESPACES, '');\n    return normalizedUrl.match(SAFE_URL);\n}\n/**\n * Returns the {@link module:link/link~LinkConfig#decorators `config.link.decorators`} configuration processed\n * to respect the locale of the editor, i.e. to display the {@link module:link/link~LinkDecoratorManualDefinition label}\n * in the correct language.\n *\n * **Note**: Only the few most commonly used labels are translated automatically. Other labels should be manually\n * translated in the {@link module:link/link~LinkConfig#decorators `config.link.decorators`} configuration.\n *\n * @param {module:utils/locale~Locale#t} t shorthand for {@link module:utils/locale~Locale#t Locale#t}\n * @param {Array.<module:link/link~LinkDecoratorDefinition>} The decorator reference\n * where the label values should be localized.\n * @returns {Array.<module:link/link~LinkDecoratorDefinition>}\n */\nexport function getLocalizedDecorators(t, decorators) {\n    var localizedDecoratorsLabels = {\n        'Open in a new tab': t('Open in a new tab'),\n        'Downloadable': t('Downloadable')\n    };\n    decorators.forEach(function (decorator) {\n        if (decorator.label && localizedDecoratorsLabels[decorator.label]) {\n            decorator.label = localizedDecoratorsLabels[decorator.label];\n        }\n        return decorator;\n    });\n    return decorators;\n}\n/**\n * Converts an object with defined decorators to a normalized array of decorators. The `id` key is added for each decorator and\n * is used as the attribute's name in the model.\n *\n * @param {Object.<String, module:link/link~LinkDecoratorDefinition>} decorators\n * @returns {Array.<module:link/link~LinkDecoratorDefinition>}\n */\nexport function normalizeDecorators(decorators) {\n    var retArray = [];\n    if (decorators) {\n        for (var _i = 0, _Object$entries = Object.entries(decorators); _i < _Object$entries.length; _i++) {\n            var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2), key = _Object$entries$_i[0], value = _Object$entries$_i[1];\n            var decorator = Object.assign({}, value, { id: 'link'.concat(upperFirst(key)) });\n            retArray.push(decorator);\n        }\n    }\n    return retArray;\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.regexp.test.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md.\n */\n/**\n * @module link/utils\n */\n/**\n * Helper class that ties together all {@link module:link/link~LinkDecoratorAutomaticDefinition} and provides\n * a {@link module:engine/conversion/downcasthelpers~DowncastHelpers#attributeToElement downcast dispatcher} for them.\n */\nvar AutomaticDecorators = /*#__PURE__*/function () {\n  function AutomaticDecorators() {\n    _classCallCheck(this, AutomaticDecorators);\n    /**\n     * Stores the definition of {@link module:link/link~LinkDecoratorAutomaticDefinition automatic decorators}.\n     * This data is used as a source for a downcast dispatcher to create a proper conversion to output data.\n     *\n     * @private\n     * @type {Set}\n     */\n    this._definitions = new Set();\n  }\n\n  /**\n   * Gives information about the number of decorators stored in the {@link module:link/utils~AutomaticDecorators} instance.\n   *\n   * @readonly\n   * @protected\n   * @type {Number}\n   */\n  return _createClass(AutomaticDecorators, [{\n    key: \"length\",\n    get: function get() {\n      return this._definitions.size;\n    }\n\n    /**\n     * Adds automatic decorator objects or an array with them to be used during downcasting.\n     *\n     * @param {module:link/link~LinkDecoratorAutomaticDefinition|Array.<module:link/link~LinkDecoratorAutomaticDefinition>} item\n     * A configuration object of automatic rules for decorating links. It might also be an array of such objects.\n     */\n  }, {\n    key: \"add\",\n    value: function add(item) {\n      var _this = this;\n      if (Array.isArray(item)) {\n        item.forEach(function (item) {\n          return _this._definitions.add(item);\n        });\n      } else {\n        this._definitions.add(item);\n      }\n    }\n\n    /**\n     * Provides the conversion helper used in the {@link module:engine/conversion/downcasthelpers~DowncastHelpers#add} method.\n     *\n     * @returns {Function} A dispatcher function used as conversion helper\n     * in {@link module:engine/conversion/downcasthelpers~DowncastHelpers#add}.\n     */\n  }, {\n    key: \"getDispatcher\",\n    value: function getDispatcher() {\n      var _this2 = this;\n      return function (dispatcher) {\n        dispatcher.on('attribute:linkHref', function (evt, data, conversionApi) {\n          // There is only test as this behavior decorates links and\n          // it is run before dispatcher which actually consumes this node.\n          // This allows on writing own dispatcher with highest priority,\n          // which blocks both native converter and this additional decoration.\n          if (!conversionApi.consumable.test(data.item, 'attribute:linkHref')) {\n            return;\n          }\n          var viewWriter = conversionApi.writer;\n          var viewSelection = viewWriter.document.selection;\n          var _iterator = _createForOfIteratorHelper(_this2._definitions),\n            _step;\n          try {\n            for (_iterator.s(); !(_step = _iterator.n()).done;) {\n              var item = _step.value;\n              var viewElement = viewWriter.createAttributeElement('a', item.attributes, {\n                priority: 5\n              });\n              viewWriter.setCustomProperty('link', true, viewElement);\n              if (item.callback(data.attributeNewValue)) {\n                if (data.item.is('selection')) {\n                  viewWriter.wrap(viewSelection.getFirstRange(), viewElement);\n                } else {\n                  viewWriter.wrap(conversionApi.mapper.toViewRange(data.range), viewElement);\n                }\n              } else {\n                viewWriter.unwrap(conversionApi.mapper.toViewRange(data.range), viewElement);\n              }\n            }\n          } catch (err) {\n            _iterator.e(err);\n          } finally {\n            _iterator.f();\n          }\n        }, {\n          priority: 'high'\n        });\n      };\n    }\n  }]);\n}();\nexport { AutomaticDecorators as default };","import _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module link/utils\n */\n\nimport ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\n\n/**\n * Helper class that stores manual decorators with observable {@link module:link/utils~ManualDecorator#value}\n * to support integration with the UI state. An instance of this class is a model with the state of individual manual decorators.\n * These decorators are kept as collections in {@link module:link/linkcommand~LinkCommand#manualDecorators}.\n *\n * @mixes module:utils/observablemixin~ObservableMixin\n */\nvar ManualDecorator = /*#__PURE__*/_createClass(\n/**\n * Creates a new instance of {@link module:link/utils~ManualDecorator}.\n *\n * @param {Object} config\n * @param {String} config.id The name of the attribute used in the model that represents a given manual decorator.\n * For example: `'linkIsExternal'`.\n * @param {String} config.label The label used in the user interface to toggle the manual decorator.\n * @param {Object} config.attributes A set of attributes added to output data when the decorator is active for a specific link.\n * Attributes should keep the format of attributes defined in {@link module:engine/view/elementdefinition~ElementDefinition}.\n */\nfunction ManualDecorator(_ref) {\n  var id = _ref.id,\n    label = _ref.label,\n    attributes = _ref.attributes;\n  _classCallCheck(this, ManualDecorator);\n  /**\n   * An ID of a manual decorator which is the name of the attribute in the model, for example: 'linkManualDecorator0'.\n   *\n   * @type {String}\n   */\n  this.id = id;\n\n  /**\n   * The value of the current manual decorator. It reflects its state from the UI.\n   *\n   * @observable\n   * @member {Boolean} module:link/utils~ManualDecorator#value\n   */\n  this.set('value');\n\n  /**\n   * The label used in the user interface to toggle the manual decorator.\n   *\n   * @type {String}\n   */\n  this.label = label;\n\n  /**\n   * A set of attributes added to downcasted data when the decorator is activated for a specific link.\n   * Attributes should be added in a form of attributes defined in {@link module:engine/view/elementdefinition~ElementDefinition}.\n   *\n   * @type {Object}\n   */\n  this.attributes = attributes;\n});\nexport { ManualDecorator as default };\nmix(ManualDecorator, ObservableMixin);","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M11.077 15l.991-1.416a.75.75 0 1 1 1.229.86l-1.148 1.64a.748.748 0 0 1-.217.206 5.251 5.251 0 0 1-8.503-5.955.741.741 0 0 1 .12-.274l1.147-1.639a.75.75 0 1 1 1.228.86L4.933 10.7l.006.003a3.75 3.75 0 0 0 6.132 4.294l.006.004zm5.494-5.335a.748.748 0 0 1-.12.274l-1.147 1.639a.75.75 0 1 1-1.228-.86l.86-1.23a3.75 3.75 0 0 0-6.144-4.301l-.86 1.229a.75.75 0 0 1-1.229-.86l1.148-1.64a.748.748 0 0 1 .217-.206 5.251 5.251 0 0 1 8.503 5.955zm-4.563-2.532a.75.75 0 0 1 .184 1.045l-3.155 4.505a.75.75 0 1 1-1.229-.86l3.155-4.506a.75.75 0 0 1 1.045-.184z\\\"/></svg>\"","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M11.077 15l.991-1.416a.75.75 0 1 1 1.229.86l-1.148 1.64a.748.748 0 0 1-.217.206 5.251 5.251 0 0 1-8.503-5.955.741.741 0 0 1 .12-.274l1.147-1.639a.75.75 0 1 1 1.228.86L4.933 10.7l.006.003a3.75 3.75 0 0 0 6.132 4.294l.006.004zm5.494-5.335a.748.748 0 0 1-.12.274l-1.147 1.639a.75.75 0 1 1-1.228-.86l.86-1.23a3.75 3.75 0 0 0-6.144-4.301l-.86 1.229a.75.75 0 0 1-1.229-.86l1.148-1.64a.748.748 0 0 1 .217-.206 5.251 5.251 0 0 1 8.503 5.955zm-4.563-2.532a.75.75 0 0 1 .184 1.045l-3.155 4.505a.75.75 0 1 1-1.229-.86l3.155-4.506a.75.75 0 0 1 1.045-.184zm4.919 10.562l-1.414 1.414a.75.75 0 1 1-1.06-1.06l1.414-1.415-1.415-1.414a.75.75 0 0 1 1.061-1.06l1.414 1.414 1.414-1.415a.75.75 0 0 1 1.061 1.061l-1.414 1.414 1.414 1.415a.75.75 0 0 1-1.06 1.06l-1.415-1.414z\\\"/></svg>\"","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../postcss-loader/src/index.js??ref--16-0!./link.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"0950db1c\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../postcss-loader/src/index.js??ref--16-0!./link.css\", function() {\n     var newContent = require(\"!!../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../postcss-loader/src/index.js??ref--16-0!./link.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../postcss-loader/src/index.js??ref--16-0!./linkactions.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"5795f0fe\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../postcss-loader/src/index.js??ref--16-0!./linkactions.css\", function() {\n     var newContent = require(\"!!../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../postcss-loader/src/index.js??ref--16-0!./linkactions.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../postcss-loader/src/index.js??ref--16-0!./linkform.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"0331b99c\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../postcss-loader/src/index.js??ref--16-0!./linkform.css\", function() {\n     var newContent = require(\"!!../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../postcss-loader/src/index.js??ref--16-0!./linkform.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","import _slicedToArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport _toConsumableArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.find.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.regexp.test.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module list/converters\n */\n\nimport { generateLiInUl, injectViewList, mergeViewLists, getSiblingListItem, positionAfterUiElements } from './utils';\nimport TreeWalker from '@ckeditor/ckeditor5-engine/src/model/treewalker';\n\n/**\n * A model-to-view converter for the `listItem` model element insertion.\n *\n * It creates a `<ul><li></li><ul>` (or `<ol>`) view structure out of a `listItem` model element, inserts it at the correct\n * position, and merges the list with surrounding lists (if available).\n *\n * @see module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:insert\n * @param {module:engine/model/model~Model} model Model instance.\n * @returns {Function} Returns a conversion callback.\n */\nexport function modelViewInsertion(model) {\n  return function (evt, data, conversionApi) {\n    var consumable = conversionApi.consumable;\n    if (!consumable.test(data.item, 'insert') || !consumable.test(data.item, 'attribute:listType') || !consumable.test(data.item, 'attribute:listIndent')) {\n      return;\n    }\n    consumable.consume(data.item, 'insert');\n    consumable.consume(data.item, 'attribute:listType');\n    consumable.consume(data.item, 'attribute:listIndent');\n    var modelItem = data.item;\n    var viewItem = generateLiInUl(modelItem, conversionApi);\n    injectViewList(modelItem, viewItem, conversionApi, model);\n  };\n}\n\n/**\n * A model-to-view converter for the `listItem` model element removal.\n *\n * @see module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:remove\n * @param {module:engine/model/model~Model} model Model instance.\n * @returns {Function} Returns a conversion callback.\n */\nexport function modelViewRemove(model) {\n  return function (evt, data, conversionApi) {\n    var viewStart = conversionApi.mapper.toViewPosition(data.position).getLastMatchingPosition(function (value) {\n      return !value.item.is('li');\n    });\n    var viewItem = viewStart.nodeAfter;\n    var viewWriter = conversionApi.writer;\n\n    // 1. Break the container after and before the list item.\n    // This will create a view list with one view list item - the one to remove.\n    viewWriter.breakContainer(viewWriter.createPositionBefore(viewItem));\n    viewWriter.breakContainer(viewWriter.createPositionAfter(viewItem));\n\n    // 2. Remove the list with the item to remove.\n    var viewList = viewItem.parent;\n    var viewListPrev = viewList.previousSibling;\n    var removeRange = viewWriter.createRangeOn(viewList);\n    var removed = viewWriter.remove(removeRange);\n\n    // 3. Merge the whole created by breaking and removing the list.\n    if (viewListPrev && viewListPrev.nextSibling) {\n      mergeViewLists(viewWriter, viewListPrev, viewListPrev.nextSibling);\n    }\n\n    // 4. Bring back nested list that was in the removed <li>.\n    var modelItem = conversionApi.mapper.toModelElement(viewItem);\n    hoistNestedLists(modelItem.getAttribute('listIndent') + 1, data.position, removeRange.start, viewItem, conversionApi, model);\n\n    // 5. Unbind removed view item and all children.\n    var _iterator = _createForOfIteratorHelper(viewWriter.createRangeIn(removed).getItems()),\n      _step;\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var child = _step.value;\n        conversionApi.mapper.unbindViewElement(child);\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n    evt.stop();\n  };\n}\n\n/**\n * A model-to-view converter for the `type` attribute change on the `listItem` model element.\n *\n * This change means that the `<li>` element parent changes from `<ul>` to `<ol>` (or vice versa). This is accomplished\n * by breaking view elements and changing their name. The next {@link module:list/converters~modelViewMergeAfterChangeType}\n * converter will attempt to merge split nodes.\n *\n * Splitting this conversion into 2 steps makes it possible to add an additional conversion in the middle.\n * Check {@link module:list/todolistconverters~modelViewChangeType} to see an example of it.\n *\n * @see module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:attribute\n * @param {module:utils/eventinfo~EventInfo} evt An object containing information about the fired event.\n * @param {Object} data Additional information about the change.\n * @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi Conversion interface.\n */\nexport function modelViewChangeType(evt, data, conversionApi) {\n  if (!conversionApi.consumable.consume(data.item, 'attribute:listType')) {\n    return;\n  }\n  var viewItem = conversionApi.mapper.toViewElement(data.item);\n  var viewWriter = conversionApi.writer;\n\n  // Break the container after and before the list item.\n  // This will create a view list with one view list item -- the one that changed type.\n  viewWriter.breakContainer(viewWriter.createPositionBefore(viewItem));\n  viewWriter.breakContainer(viewWriter.createPositionAfter(viewItem));\n\n  // Change name of the view list that holds the changed view item.\n  // We cannot just change name property, because that would not render properly.\n  var viewList = viewItem.parent;\n  var listName = data.attributeNewValue == 'numbered' ? 'ol' : 'ul';\n  viewWriter.rename(listName, viewList);\n}\n\n/**\n * A model-to-view converter that attempts to merge nodes split by {@link module:list/converters~modelViewChangeType}.\n *\n * @see module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:attribute\n * @param {module:utils/eventinfo~EventInfo} evt An object containing information about the fired event.\n * @param {Object} data Additional information about the change.\n * @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi Conversion interface.\n */\nexport function modelViewMergeAfterChangeType(evt, data, conversionApi) {\n  var viewItem = conversionApi.mapper.toViewElement(data.item);\n  var viewList = viewItem.parent;\n  var viewWriter = conversionApi.writer;\n\n  // Merge the changed view list with other lists, if possible.\n  mergeViewLists(viewWriter, viewList, viewList.nextSibling);\n  mergeViewLists(viewWriter, viewList.previousSibling, viewList);\n\n  // Consumable insertion of children inside the item. They are already handled by re-building the item in view.\n  var _iterator2 = _createForOfIteratorHelper(data.item.getChildren()),\n    _step2;\n  try {\n    for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n      var child = _step2.value;\n      conversionApi.consumable.consume(child, 'insert');\n    }\n  } catch (err) {\n    _iterator2.e(err);\n  } finally {\n    _iterator2.f();\n  }\n}\n\n/**\n * A model-to-view converter for the `listIndent` attribute change on the `listItem` model element.\n *\n * @see module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:attribute\n * @param {module:engine/model/model~Model} model Model instance.\n * @returns {Function} Returns a conversion callback.\n */\nexport function modelViewChangeIndent(model) {\n  return function (evt, data, conversionApi) {\n    if (!conversionApi.consumable.consume(data.item, 'attribute:listIndent')) {\n      return;\n    }\n    var viewItem = conversionApi.mapper.toViewElement(data.item);\n    var viewWriter = conversionApi.writer;\n\n    // 1. Break the container after and before the list item.\n    // This will create a view list with one view list item -- the one that changed type.\n    viewWriter.breakContainer(viewWriter.createPositionBefore(viewItem));\n    viewWriter.breakContainer(viewWriter.createPositionAfter(viewItem));\n\n    // 2. Extract view list with changed view list item and merge \"hole\" possibly created by breaking and removing elements.\n    var viewList = viewItem.parent;\n    var viewListPrev = viewList.previousSibling;\n    var removeRange = viewWriter.createRangeOn(viewList);\n    viewWriter.remove(removeRange);\n    if (viewListPrev && viewListPrev.nextSibling) {\n      mergeViewLists(viewWriter, viewListPrev, viewListPrev.nextSibling);\n    }\n\n    // 3. Bring back nested list that was in the removed <li>.\n    hoistNestedLists(data.attributeOldValue + 1, data.range.start, removeRange.start, viewItem, conversionApi, model);\n\n    // 4. Inject view list like it is newly inserted.\n    injectViewList(data.item, viewItem, conversionApi, model);\n\n    // 5. Consume insertion of children inside the item. They are already handled by re-building the item in view.\n    var _iterator3 = _createForOfIteratorHelper(data.item.getChildren()),\n      _step3;\n    try {\n      for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n        var child = _step3.value;\n        conversionApi.consumable.consume(child, 'insert');\n      }\n    } catch (err) {\n      _iterator3.e(err);\n    } finally {\n      _iterator3.f();\n    }\n  };\n}\n\n/**\n * A special model-to-view converter introduced by the {@link module:list/list~List list feature}. This converter is fired for\n * insert change of every model item, and should be fired before the actual converter. The converter checks whether the inserted\n * model item is a non-`listItem` element. If it is, and it is inserted inside a view list, the converter breaks the\n * list so the model element is inserted to the view parent element corresponding to its model parent element.\n *\n * The converter prevents such situations:\n *\n *\t\t// Model:                        // View:\n *\t\t<listItem>foo</listItem>         <ul>\n *\t\t<listItem>bar</listItem>             <li>foo</li>\n *\t\t                                     <li>bar</li>\n *\t\t                                 </ul>\n *\n *\t\t// After change:                 // Correct view guaranteed by this converter:\n *\t\t<listItem>foo</listItem>         <ul><li>foo</li></ul><p>xxx</p><ul><li>bar</li></ul>\n *\t\t<paragraph>xxx</paragraph>       // Instead of this wrong view state:\n *\t\t<listItem>bar</listItem>         <ul><li>foo</li><p>xxx</p><li>bar</li></ul>\n *\n * @see module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:insert\n * @param {module:utils/eventinfo~EventInfo} evt An object containing information about the fired event.\n * @param {Object} data Additional information about the change.\n * @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi Conversion interface.\n */\nexport function modelViewSplitOnInsert(evt, data, conversionApi) {\n  if (data.item.name != 'listItem') {\n    var viewPosition = conversionApi.mapper.toViewPosition(data.range.start);\n    var viewWriter = conversionApi.writer;\n    var lists = [];\n\n    // Break multiple ULs/OLs if there are.\n    //\n    // Imagine following list:\n    //\n    // 1 --------\n    //   1.1 --------\n    //     1.1.1 --------\n    //     1.1.2 --------\n    //     1.1.3 --------\n    //       1.1.3.1 --------\n    //   1.2 --------\n    //     1.2.1 --------\n    // 2 --------\n    //\n    // Insert paragraph after item 1.1.1:\n    //\n    // 1 --------\n    //   1.1 --------\n    //     1.1.1 --------\n    //\n    // Lorem ipsum.\n    //\n    //     1.1.2 --------\n    //     1.1.3 --------\n    //       1.1.3.1 --------\n    //   1.2 --------\n    //     1.2.1 --------\n    // 2 --------\n    //\n    // In this case 1.1.2 has to become beginning of a new list.\n    // We need to break list before 1.1.2 (obvious), then we need to break list also before 1.2.\n    // Then we need to move those broken pieces one after another and merge:\n    //\n    // 1 --------\n    //   1.1 --------\n    //     1.1.1 --------\n    //\n    // Lorem ipsum.\n    //\n    // 1.1.2 --------\n    //   1.1.3 --------\n    //     1.1.3.1 --------\n    // 1.2 --------\n    //   1.2.1 --------\n    // 2 --------\n    //\n    while (viewPosition.parent.name == 'ul' || viewPosition.parent.name == 'ol') {\n      viewPosition = viewWriter.breakContainer(viewPosition);\n      if (viewPosition.parent.name != 'li') {\n        break;\n      }\n\n      // Remove lists that are after inserted element.\n      // They will be brought back later, below the inserted element.\n      var removeStart = viewPosition;\n      var removeEnd = viewWriter.createPositionAt(viewPosition.parent, 'end');\n\n      // Don't remove if there is nothing to remove.\n      if (!removeStart.isEqual(removeEnd)) {\n        var removed = viewWriter.remove(viewWriter.createRange(removeStart, removeEnd));\n        lists.push(removed);\n      }\n      viewPosition = viewWriter.createPositionAfter(viewPosition.parent);\n    }\n\n    // Bring back removed lists.\n    if (lists.length > 0) {\n      for (var i = 0; i < lists.length; i++) {\n        var previousList = viewPosition.nodeBefore;\n        var insertedRange = viewWriter.insert(viewPosition, lists[i]);\n        viewPosition = insertedRange.end;\n\n        // Don't merge first list! We want a split in that place (this is why this converter is introduced).\n        if (i > 0) {\n          var mergePos = mergeViewLists(viewWriter, previousList, previousList.nextSibling);\n\n          // If `mergePos` is in `previousList` it means that the lists got merged.\n          // In this case, we need to fix insert position.\n          if (mergePos && mergePos.parent == previousList) {\n            viewPosition.offset--;\n          }\n        }\n      }\n\n      // Merge last inserted list with element after it.\n      mergeViewLists(viewWriter, viewPosition.nodeBefore, viewPosition.nodeAfter);\n    }\n  }\n}\n\n/**\n * A special model-to-view converter introduced by the {@link module:list/list~List list feature}. This converter takes care of\n * merging view lists after something is removed or moved from near them.\n *\n * Example:\n *\n *\t\t// Model:                        // View:\n *\t\t<listItem>foo</listItem>         <ul><li>foo</li></ul>\n *\t\t<paragraph>xxx</paragraph>       <p>xxx</p>\n *\t\t<listItem>bar</listItem>         <ul><li>bar</li></ul>\n *\n *\t\t// After change:                 // Correct view guaranteed by this converter:\n *\t\t<listItem>foo</listItem>         <ul>\n *\t\t<listItem>bar</listItem>             <li>foo</li>\n *\t\t                                     <li>bar</li>\n *\t\t                                 </ul>\n *\n * @see module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:remove\n * @param {module:utils/eventinfo~EventInfo} evt An object containing information about the fired event.\n * @param {Object} data Additional information about the change.\n * @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi Conversion interface.\n */\nexport function modelViewMergeAfter(evt, data, conversionApi) {\n  var viewPosition = conversionApi.mapper.toViewPosition(data.position);\n  var viewItemPrev = viewPosition.nodeBefore;\n  var viewItemNext = viewPosition.nodeAfter;\n\n  // Merge lists if something (remove, move) was done from inside of list.\n  // Merging will be done only if both items are view lists of the same type.\n  // The check is done inside the helper function.\n  mergeViewLists(conversionApi.writer, viewItemPrev, viewItemNext);\n}\n\n/**\n * A view-to-model converter that converts the `<li>` view elements into the `listItem` model elements.\n *\n * To set correct values of the `listType` and `listIndent` attributes the converter:\n * * checks `<li>`'s parent,\n * * stores and increases the `conversionApi.store.indent` value when `<li>`'s sub-items are converted.\n *\n * @see module:engine/conversion/upcastdispatcher~UpcastDispatcher#event:element\n * @param {module:utils/eventinfo~EventInfo} evt An object containing information about the fired event.\n * @param {Object} data An object containing conversion input and a placeholder for conversion output and possibly other values.\n * @param {module:engine/conversion/upcastdispatcher~UpcastConversionApi} conversionApi Conversion interface to be used by the callback.\n */\nexport function viewModelConverter(evt, data, conversionApi) {\n  if (conversionApi.consumable.consume(data.viewItem, {\n    name: true\n  })) {\n    var writer = conversionApi.writer;\n\n    // 1. Create `listItem` model element.\n    var listItem = writer.createElement('listItem');\n\n    // 2. Handle `listItem` model element attributes.\n    var indent = getIndent(data.viewItem);\n    writer.setAttribute('listIndent', indent, listItem);\n\n    // Set 'bulleted' as default. If this item is pasted into a context,\n    var type = data.viewItem.parent && data.viewItem.parent.name == 'ol' ? 'numbered' : 'bulleted';\n    writer.setAttribute('listType', type, listItem);\n\n    // Try to find allowed parent for list item.\n    var splitResult = conversionApi.splitToAllowedParent(listItem, data.modelCursor);\n\n    // When there is no allowed parent it means that list item cannot be converted at current model position\n    // and in any of position ancestors.\n    if (!splitResult) {\n      return;\n    }\n    writer.insert(listItem, splitResult.position);\n    var nextPosition = viewToModelListItemChildrenConverter(listItem, data.viewItem.getChildren(), conversionApi);\n\n    // Result range starts before the first item and ends after the last.\n    data.modelRange = writer.createRange(data.modelCursor, nextPosition);\n\n    // When `data.modelCursor` parent had to be split to insert list item...\n    if (splitResult.cursorParent) {\n      // Continue conversion in the split element.\n      data.modelCursor = writer.createPositionAt(splitResult.cursorParent, 0);\n    } else {\n      // Otherwise continue conversion after the last list item.\n      data.modelCursor = data.modelRange.end;\n    }\n  }\n}\n\n/**\n * A view-to-model converter for the `<ul>` and `<ol>` view elements that cleans the input view of garbage.\n * This is mostly to clean whitespaces from between the `<li>` view elements inside the view list element, however, also\n * incorrect data can be cleared if the view was incorrect.\n *\n * @see module:engine/conversion/upcastdispatcher~UpcastDispatcher#event:element\n * @param {module:utils/eventinfo~EventInfo} evt An object containing information about the fired event.\n * @param {Object} data An object containing conversion input and a placeholder for conversion output and possibly other values.\n * @param {module:engine/conversion/upcastdispatcher~UpcastConversionApi} conversionApi Conversion interface to be used by the callback.\n */\nexport function cleanList(evt, data, conversionApi) {\n  if (conversionApi.consumable.test(data.viewItem, {\n    name: true\n  })) {\n    // Caching children because when we start removing them iterating fails.\n    var children = Array.from(data.viewItem.getChildren());\n    for (var _i = 0, _children = children; _i < _children.length; _i++) {\n      var child = _children[_i];\n      var isWrongElement = !(child.is('li') || isList(child));\n      if (isWrongElement) {\n        child._remove();\n      }\n    }\n  }\n}\n\n/**\n * A view-to-model converter for the `<li>` elements that cleans whitespace formatting from the input view.\n *\n * @see module:engine/conversion/upcastdispatcher~UpcastDispatcher#event:element\n * @param {module:utils/eventinfo~EventInfo} evt An object containing information about the fired event.\n * @param {Object} data An object containing conversion input and a placeholder for conversion output and possibly other values.\n * @param {module:engine/conversion/upcastdispatcher~UpcastConversionApi} conversionApi Conversion interface to be used by the callback.\n */\nexport function cleanListItem(evt, data, conversionApi) {\n  if (conversionApi.consumable.test(data.viewItem, {\n    name: true\n  })) {\n    if (data.viewItem.childCount === 0) {\n      return;\n    }\n    var children = _toConsumableArray(data.viewItem.getChildren());\n    var foundList = false;\n    var firstNode = true;\n    var _iterator4 = _createForOfIteratorHelper(children),\n      _step4;\n    try {\n      for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n        var child = _step4.value;\n        if (foundList && !isList(child)) {\n          child._remove();\n        }\n        if (child.is('text')) {\n          // If this is the first node and it's a text node, left-trim it.\n          if (firstNode) {\n            child._data = child.data.replace(/^\\s+/, '');\n          }\n\n          // If this is the last text node before <ul> or <ol>, right-trim it.\n          if (!child.nextSibling || isList(child.nextSibling)) {\n            child._data = child.data.replace(/\\s+$/, '');\n          }\n        } else if (isList(child)) {\n          // If this is a <ul> or <ol>, do not process it, just mark that we already visited list element.\n          foundList = true;\n        }\n        firstNode = false;\n      }\n    } catch (err) {\n      _iterator4.e(err);\n    } finally {\n      _iterator4.f();\n    }\n  }\n}\n\n/**\n * Returns a callback for model position to view position mapping for {@link module:engine/conversion/mapper~Mapper}. The callback fixes\n * positions between the `listItem` elements that would be incorrectly mapped because of how list items are represented in the model\n * and in the view.\n *\n * @see module:engine/conversion/mapper~Mapper#event:modelToViewPosition\n * @param {module:engine/view/view~View} view A view instance.\n * @returns {Function}\n */\nexport function modelToViewPosition(view) {\n  return function (evt, data) {\n    if (data.isPhantom) {\n      return;\n    }\n    var modelItem = data.modelPosition.nodeBefore;\n    if (modelItem && modelItem.is('listItem')) {\n      var viewItem = data.mapper.toViewElement(modelItem);\n      var topmostViewList = viewItem.getAncestors().find(isList);\n      var walker = view.createPositionAt(viewItem, 0).getWalker();\n      var _iterator5 = _createForOfIteratorHelper(walker),\n        _step5;\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var value = _step5.value;\n          if (value.type == 'elementStart' && value.item.is('li')) {\n            data.viewPosition = value.previousPosition;\n            break;\n          } else if (value.type == 'elementEnd' && value.item == topmostViewList) {\n            data.viewPosition = value.nextPosition;\n            break;\n          }\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n    }\n  };\n}\n\n/**\n * The callback for view position to model position mapping for {@link module:engine/conversion/mapper~Mapper}. The callback fixes\n * positions between the `<li>` elements that would be incorrectly mapped because of how list items are represented in the model\n * and in the view.\n *\n * @see module:engine/conversion/mapper~Mapper#event:viewToModelPosition\n * @param {module:engine/model/model~Model} model Model instance.\n * @returns {Function} Returns a conversion callback.\n */\nexport function viewToModelPosition(model) {\n  return function (evt, data) {\n    var viewPos = data.viewPosition;\n    var viewParent = viewPos.parent;\n    var mapper = data.mapper;\n    if (viewParent.name == 'ul' || viewParent.name == 'ol') {\n      // Position is directly in <ul> or <ol>.\n      if (!viewPos.isAtEnd) {\n        // If position is not at the end, it must be before <li>.\n        // Get that <li>, map it to `listItem` and set model position before that `listItem`.\n        var modelNode = mapper.toModelElement(viewPos.nodeAfter);\n        data.modelPosition = model.createPositionBefore(modelNode);\n      } else {\n        // Position is at the end of <ul> or <ol>, so there is no <li> after it to be mapped.\n        // There is <li> before the position, but we cannot just map it to `listItem` and set model position after it,\n        // because that <li> may contain nested items.\n        // We will check \"model length\" of that <li>, in other words - how many `listItem`s are in that <li>.\n        var _modelNode = mapper.toModelElement(viewPos.nodeBefore);\n        var modelLength = mapper.getModelLength(viewPos.nodeBefore);\n\n        // Then we get model position before mapped `listItem` and shift it accordingly.\n        data.modelPosition = model.createPositionBefore(_modelNode).getShiftedBy(modelLength);\n      }\n      evt.stop();\n    } else if (viewParent.name == 'li' && viewPos.nodeBefore && (viewPos.nodeBefore.name == 'ul' || viewPos.nodeBefore.name == 'ol')) {\n      // In most cases when view position is in <li> it is in text and this is a correct position.\n      // However, if position is after <ul> or <ol> we have to fix it -- because in model <ul>/<ol> are not in the `listItem`.\n      var _modelNode2 = mapper.toModelElement(viewParent);\n\n      // Check all <ul>s and <ol>s that are in the <li> but before mapped position.\n      // Get model length of those elements and then add it to the offset of `listItem` mapped to the original <li>.\n      var _modelLength = 1; // Starts from 1 because the original <li> has to be counted in too.\n      var viewList = viewPos.nodeBefore;\n      while (viewList && isList(viewList)) {\n        _modelLength += mapper.getModelLength(viewList);\n        viewList = viewList.previousSibling;\n      }\n      data.modelPosition = model.createPositionBefore(_modelNode2).getShiftedBy(_modelLength);\n      evt.stop();\n    }\n  };\n}\n\n/**\n * Post-fixer that reacts to changes on document and fixes incorrect model states.\n *\n * In the example below, there is a correct list structure.\n * Then the middle element is removed so the list structure will become incorrect:\n *\n *\t\t<listItem listType=\"bulleted\" listIndent=0>Item 1</listItem>\n *\t\t<listItem listType=\"bulleted\" listIndent=1>Item 2</listItem>   <--- this is removed.\n *\t\t<listItem listType=\"bulleted\" listIndent=2>Item 3</listItem>\n *\n * The list structure after the middle element is removed:\n *\n * \t\t<listItem listType=\"bulleted\" listIndent=0>Item 1</listItem>\n *\t\t<listItem listType=\"bulleted\" listIndent=2>Item 3</listItem>\n *\n * Should become:\n *\n *\t\t<listItem listType=\"bulleted\" listIndent=0>Item 1</listItem>\n *\t\t<listItem listType=\"bulleted\" listIndent=1>Item 3</listItem>   <--- note that indent got post-fixed.\n *\n * @param {module:engine/model/model~Model} model The data model.\n * @param {module:engine/model/writer~Writer} writer The writer to do changes with.\n * @returns {Boolean} `true` if any change has been applied, `false` otherwise.\n */\nexport function modelChangePostFixer(model, writer) {\n  var changes = model.document.differ.getChanges();\n  var itemToListHead = new Map();\n  var applied = false;\n  var _iterator6 = _createForOfIteratorHelper(changes),\n    _step6;\n  try {\n    for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n      var entry = _step6.value;\n      if (entry.type == 'insert' && entry.name == 'listItem') {\n        _addListToFix(entry.position);\n      } else if (entry.type == 'insert' && entry.name != 'listItem') {\n        if (entry.name != '$text') {\n          // In case of renamed element.\n          var item = entry.position.nodeAfter;\n          if (item.hasAttribute('listIndent')) {\n            writer.removeAttribute('listIndent', item);\n            applied = true;\n          }\n          if (item.hasAttribute('listType')) {\n            writer.removeAttribute('listType', item);\n            applied = true;\n          }\n          var _iterator8 = _createForOfIteratorHelper(Array.from(model.createRangeIn(item)).filter(function (e) {\n              return e.item.is('listItem');\n            })),\n            _step8;\n          try {\n            for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n              var innerItem = _step8.value;\n              _addListToFix(innerItem.previousPosition);\n            }\n          } catch (err) {\n            _iterator8.e(err);\n          } finally {\n            _iterator8.f();\n          }\n        }\n        var posAfter = entry.position.getShiftedBy(entry.length);\n        _addListToFix(posAfter);\n      } else if (entry.type == 'remove' && entry.name == 'listItem') {\n        _addListToFix(entry.position);\n      } else if (entry.type == 'attribute' && entry.attributeKey == 'listIndent') {\n        _addListToFix(entry.range.start);\n      } else if (entry.type == 'attribute' && entry.attributeKey == 'listType') {\n        _addListToFix(entry.range.start);\n      }\n    }\n  } catch (err) {\n    _iterator6.e(err);\n  } finally {\n    _iterator6.f();\n  }\n  var _iterator7 = _createForOfIteratorHelper(itemToListHead.values()),\n    _step7;\n  try {\n    for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n      var listHead = _step7.value;\n      _fixListIndents(listHead);\n      _fixListTypes(listHead);\n    }\n  } catch (err) {\n    _iterator7.e(err);\n  } finally {\n    _iterator7.f();\n  }\n  return applied;\n  function _addListToFix(position) {\n    var prev = position.nodeBefore;\n    if (!prev || !prev.is('listItem')) {\n      var item = position.nodeAfter;\n      if (item && item.is('listItem')) {\n        itemToListHead.set(item, item);\n      }\n    } else {\n      var listHead = prev;\n      if (itemToListHead.has(listHead)) {\n        return;\n      }\n      while (listHead.previousSibling && listHead.previousSibling.is('listItem')) {\n        listHead = listHead.previousSibling;\n        if (itemToListHead.has(listHead)) {\n          return;\n        }\n      }\n      itemToListHead.set(position.nodeBefore, listHead);\n    }\n  }\n  function _fixListIndents(item) {\n    var maxIndent = 0;\n    var fixBy = null;\n    while (item && item.is('listItem')) {\n      var itemIndent = item.getAttribute('listIndent');\n      if (itemIndent > maxIndent) {\n        var newIndent = void 0;\n        if (fixBy === null) {\n          fixBy = itemIndent - maxIndent;\n          newIndent = maxIndent;\n        } else {\n          if (fixBy > itemIndent) {\n            fixBy = itemIndent;\n          }\n          newIndent = itemIndent - fixBy;\n        }\n        writer.setAttribute('listIndent', newIndent, item);\n        applied = true;\n      } else {\n        fixBy = null;\n        maxIndent = item.getAttribute('listIndent') + 1;\n      }\n      item = item.nextSibling;\n    }\n  }\n  function _fixListTypes(item) {\n    var typesStack = [];\n    var prev = null;\n    while (item && item.is('listItem')) {\n      var itemIndent = item.getAttribute('listIndent');\n      if (prev && prev.getAttribute('listIndent') > itemIndent) {\n        typesStack = typesStack.slice(0, itemIndent + 1);\n      }\n      if (itemIndent != 0) {\n        if (typesStack[itemIndent]) {\n          var type = typesStack[itemIndent];\n          if (item.getAttribute('listType') != type) {\n            writer.setAttribute('listType', type, item);\n            applied = true;\n          }\n        } else {\n          typesStack[itemIndent] = item.getAttribute('listType');\n        }\n      }\n      prev = item;\n      item = item.nextSibling;\n    }\n  }\n}\n\n/**\n * A fixer for pasted content that includes list items.\n *\n * It fixes indentation of pasted list items so the pasted items match correctly to the context they are pasted into.\n *\n * Example:\n *\n *\t\t<listItem listType=\"bulleted\" listIndent=0>A</listItem>\n *\t\t<listItem listType=\"bulleted\" listIndent=1>B^</listItem>\n *\t\t// At ^ paste:  <listItem listType=\"bulleted\" listIndent=4>X</listItem>\n *\t\t//              <listItem listType=\"bulleted\" listIndent=5>Y</listItem>\n *\t\t<listItem listType=\"bulleted\" listIndent=2>C</listItem>\n *\n * Should become:\n *\n *\t\t<listItem listType=\"bulleted\" listIndent=0>A</listItem>\n *\t\t<listItem listType=\"bulleted\" listIndent=1>BX</listItem>\n *\t\t<listItem listType=\"bulleted\" listIndent=2>Y/listItem>\n *\t\t<listItem listType=\"bulleted\" listIndent=2>C</listItem>\n *\n * @param {module:utils/eventinfo~EventInfo} evt An object containing information about the fired event.\n * @param {Array} args Arguments of {@link module:engine/model/model~Model#insertContent}.\n */\nexport function modelIndentPasteFixer(evt, _ref) {\n  var _ref2 = _slicedToArray(_ref, 2),\n    content = _ref2[0],\n    selectable = _ref2[1];\n  // Check whether inserted content starts from a `listItem`. If it does not, it means that there are some other\n  // elements before it and there is no need to fix indents, because even if we insert that content into a list,\n  // that list will be broken.\n  // Note: we also need to handle singular elements because inserting item with indent 0 into 0,1,[],2\n  // would create incorrect model.\n  var item = content.is('documentFragment') ? content.getChild(0) : content;\n  var selection;\n  if (!selectable) {\n    selection = this.document.selection;\n  } else {\n    selection = this.createSelection(selectable);\n  }\n  if (item && item.is('listItem')) {\n    // Get a reference list item. Inserted list items will be fixed according to that item.\n    var pos = selection.getFirstPosition();\n    var refItem = null;\n    if (pos.parent.is('listItem')) {\n      refItem = pos.parent;\n    } else if (pos.nodeBefore && pos.nodeBefore.is('listItem')) {\n      refItem = pos.nodeBefore;\n    }\n\n    // If there is `refItem` it means that we do insert list items into an existing list.\n    if (refItem) {\n      // First list item in `data` has indent equal to 0 (it is a first list item). It should have indent equal\n      // to the indent of reference item. We have to fix the first item and all of it's children and following siblings.\n      // Indent of all those items has to be adjusted to reference item.\n      var indentChange = refItem.getAttribute('listIndent');\n\n      // Fix only if there is anything to fix.\n      if (indentChange > 0) {\n        // Adjust indent of all \"first\" list items in inserted data.\n        while (item && item.is('listItem')) {\n          item._setAttribute('listIndent', item.getAttribute('listIndent') + indentChange);\n          item = item.nextSibling;\n        }\n      }\n    }\n  }\n}\n\n// Helper function that converts children of a given `<li>` view element into corresponding model elements.\n// The function maintains proper order of elements if model `listItem` is split during the conversion\n// due to block children conversion.\n//\n// @param {module:engine/model/element~Element} listItemModel List item model element to which converted children will be inserted.\n// @param {Iterable.<module:engine/view/node~Node>} viewChildren View elements which will be converted.\n// @param {module:engine/conversion/upcastdispatcher~UpcastConversionApi} conversionApi Conversion interface to be used by the callback.\n// @returns {module:engine/model/position~Position} Position on which next elements should be inserted after children conversion.\nfunction viewToModelListItemChildrenConverter(listItemModel, viewChildren, conversionApi) {\n  var writer = conversionApi.writer,\n    schema = conversionApi.schema;\n\n  // A position after the last inserted `listItem`.\n  var nextPosition = writer.createPositionAfter(listItemModel);\n\n  // Check all children of the converted `<li>`. At this point we assume there are no \"whitespace\" view text nodes\n  // in view list, between view list items. This should be handled by `<ul>` and `<ol>` converters.\n  var _iterator9 = _createForOfIteratorHelper(viewChildren),\n    _step9;\n  try {\n    for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n      var child = _step9.value;\n      if (child.name == 'ul' || child.name == 'ol') {\n        // If the children is a list, we will insert its conversion result after currently handled `listItem`.\n        // Then, next insertion position will be set after all the new list items (and maybe other elements if\n        // something split list item).\n        //\n        // If this is a list, we expect that some `listItem`s and possibly other blocks will be inserted, however `.modelCursor`\n        // should be set after last `listItem` (or block). This is why it feels safe to use it as `nextPosition`\n        nextPosition = conversionApi.convertItem(child, nextPosition).modelCursor;\n      } else {\n        // If this is not a list, try inserting content at the end of the currently handled `listItem`.\n        var result = conversionApi.convertItem(child, writer.createPositionAt(listItemModel, 'end'));\n\n        // It may end up that the current `listItem` becomes split (if that content cannot be inside `listItem`). For example:\n        //\n        // <li><p>Foo</p></li>\n        //\n        // will be converted to:\n        //\n        // <listItem></listItem><paragraph>Foo</paragraph><listItem></listItem>\n        //\n        var convertedChild = result.modelRange.start.nodeAfter;\n        var wasSplit = convertedChild && convertedChild.is('element') && !schema.checkChild(listItemModel, convertedChild.name);\n        if (wasSplit) {\n          // As `lastListItem` got split, we need to update it to the second part of the split `listItem` element.\n          //\n          // `modelCursor` should be set to a position where the conversion should continue. There are multiple possible scenarios\n          // that may happen. Usually, `modelCursor` (marked as `#` below) would point to the second list item after conversion:\n          //\n          //\t\t`<li><p>Foo</p></li>` -> `<listItem></listItem><paragraph>Foo</paragraph><listItem>#</listItem>`\n          //\n          // However, in some cases, like auto-paragraphing, the position is placed at the end of the block element:\n          //\n          //\t\t`<li><div>Foo</div></li>` -> `<listItem></listItem><paragraph>Foo#</paragraph><listItem></listItem>`\n          //\n          // or after an element if another element broken auto-paragraphed element:\n          //\n          //\t\t`<li><div><h2>Foo</h2></div></li>` -> `<listItem></listItem><heading1>Foo</heading1>#<listItem></listItem>`\n          //\n          // We need to check for such cases and use proper list item and position based on it.\n          //\n          if (result.modelCursor.parent.is('listItem')) {\n            // (1).\n            listItemModel = result.modelCursor.parent;\n          } else {\n            // (2), (3).\n            listItemModel = findNextListItem(result.modelCursor);\n          }\n          nextPosition = writer.createPositionAfter(listItemModel);\n        }\n      }\n    }\n  } catch (err) {\n    _iterator9.e(err);\n  } finally {\n    _iterator9.f();\n  }\n  return nextPosition;\n}\n\n// Helper function that seeks for a next list item starting from given `startPosition`.\nfunction findNextListItem(startPosition) {\n  var treeWalker = new TreeWalker({\n    startPosition: startPosition\n  });\n  var value;\n  do {\n    value = treeWalker.next();\n  } while (!value.value.item.is('listItem'));\n  return value.value.item;\n}\n\n// Helper function that takes all children of given `viewRemovedItem` and moves them in a correct place, according\n// to other given parameters.\nfunction hoistNestedLists(nextIndent, modelRemoveStartPosition, viewRemoveStartPosition, viewRemovedItem, conversionApi, model) {\n  // Find correct previous model list item element.\n  // The element has to have either same or smaller indent than given reference indent.\n  // This will be the model element which will get nested items (if it has smaller indent) or sibling items (if it has same indent).\n  // Keep in mind that such element might not be found, if removed item was the first item.\n  var prevModelItem = getSiblingListItem(modelRemoveStartPosition.nodeBefore, {\n    sameIndent: true,\n    smallerIndent: true,\n    listIndent: nextIndent,\n    foo: 'b'\n  });\n  var mapper = conversionApi.mapper;\n  var viewWriter = conversionApi.writer;\n\n  // Indent of found element or `null` if the element has not been found.\n  var prevIndent = prevModelItem ? prevModelItem.getAttribute('listIndent') : null;\n  var insertPosition;\n  if (!prevModelItem) {\n    // If element has not been found, simply insert lists at the position where the removed item was:\n    //\n    // Lorem ipsum.\n    // 1 --------           <--- this is removed, no previous list item, put nested items in place of removed item.\n    //   1.1 --------       <--- this is reference indent.\n    //     1.1.1 --------\n    //     1.1.2 --------\n    //   1.2 --------\n    //\n    // Becomes:\n    //\n    // Lorem ipsum.\n    // 1.1 --------\n    //   1.1.1 --------\n    //   1.1.2 --------\n    // 1.2 --------\n    insertPosition = viewRemoveStartPosition;\n  } else if (prevIndent == nextIndent) {\n    // If element has been found and has same indent as reference indent it means that nested items should\n    // become siblings of found element:\n    //\n    // 1 --------\n    //   1.1 --------\n    //   1.2 --------       <--- this is `prevModelItem`.\n    // 2 --------           <--- this is removed, previous list item has indent same as reference indent.\n    //   2.1 --------       <--- this is reference indent, this and 2.2 should become siblings of 1.2.\n    //   2.2 --------\n    //\n    // Becomes:\n    //\n    // 1 --------\n    //   1.1 --------\n    //   1.2 --------\n    //   2.1 --------\n    //   2.2 --------\n    var prevViewList = mapper.toViewElement(prevModelItem).parent;\n    insertPosition = viewWriter.createPositionAfter(prevViewList);\n  } else {\n    // If element has been found and has smaller indent as reference indent it means that nested items\n    // should become nested items of found item:\n    //\n    // 1 --------           <--- this is `prevModelItem`.\n    //   1.1 --------       <--- this is removed, previous list item has indent smaller than reference indent.\n    //     1.1.1 --------   <--- this is reference indent, this and 1.1.1 should become nested items of 1.\n    //     1.1.2 --------\n    //   1.2 --------\n    //\n    // Becomes:\n    //\n    // 1 --------\n    //   1.1.1 --------\n    //   1.1.2 --------\n    //   1.2 --------\n    //\n    // Note: in this case 1.1.1 have indent 2 while 1 have indent 0. In model that should not be possible,\n    // because following item may have indent bigger only by one. But this is fixed by postfixer.\n    var modelPosition = model.createPositionAt(prevModelItem, 'end');\n    insertPosition = mapper.toViewPosition(modelPosition);\n  }\n  insertPosition = positionAfterUiElements(insertPosition);\n\n  // Handle multiple lists. This happens if list item has nested numbered and bulleted lists. Following lists\n  // are inserted after the first list (no need to recalculate insertion position for them).\n  for (var _i2 = 0, _arr = _toConsumableArray(viewRemovedItem.getChildren()); _i2 < _arr.length; _i2++) {\n    var child = _arr[_i2];\n    if (isList(child)) {\n      insertPosition = viewWriter.move(viewWriter.createRangeOn(child), insertPosition).end;\n      mergeViewLists(viewWriter, child, child.nextSibling);\n      mergeViewLists(viewWriter, child.previousSibling, child);\n    }\n  }\n}\n\n// Checks if view element is a list type (ul or ol).\n//\n// @param {module:engine/view/element~Element} viewElement\n// @returns {Boolean}\nfunction isList(viewElement) {\n  return viewElement.is('ol') || viewElement.is('ul');\n}\n\n// Calculates the indent value for a list item. Handles HTML compliant and non-compliant lists.\n//\n// Also, fixes non HTML compliant lists indents:\n//\n//\t\tbefore:                                     fixed list:\n//\t\tOL                                          OL\n//\t\t|-> LI (parent LIs: 0)                      |-> LI     (indent: 0)\n//\t\t    |-> OL                                  |-> OL\n//\t\t        |-> OL                                  |\n//\t\t        |   |-> OL                              |\n//\t\t        |       |-> OL                          |\n//\t\t        |           |-> LI (parent LIs: 1)      |-> LI (indent: 1)\n//\t\t        |-> LI (parent LIs: 1)                  |-> LI (indent: 1)\n//\n//\t\tbefore:                                     fixed list:\n//\t\tOL                                          OL\n//\t\t|-> OL                                      |\n//\t\t    |-> OL                                  |\n//\t\t         |-> OL                             |\n//\t\t             |-> LI (parent LIs: 0)         |-> LI        (indent: 0)\n//\n//\t\tbefore:                                     fixed list:\n//\t\tOL                                          OL\n//\t\t|-> LI (parent LIs: 0)                      |-> LI         (indent: 0)\n//\t\t|-> OL                                          |-> OL\n//\t\t    |-> LI (parent LIs: 0)                          |-> LI (indent: 1)\n//\n// @param {module:engine/view/element~Element} listItem\n// @param {Object} conversionStore\n// @returns {Number}\nfunction getIndent(listItem) {\n  var indent = 0;\n  var parent = listItem.parent;\n  while (parent) {\n    // Each LI in the tree will result in an increased indent for HTML compliant lists.\n    if (parent.is('li')) {\n      indent++;\n    } else {\n      // If however the list is nested in other list we should check previous sibling of any of the list elements...\n      var previousSibling = parent.previousSibling;\n\n      // ...because the we might need increase its indent:\n      //\t\tbefore:                           fixed list:\n      //\t\tOL                                OL\n      //\t\t|-> LI (parent LIs: 0)            |-> LI         (indent: 0)\n      //\t\t|-> OL                                |-> OL\n      //\t\t    |-> LI (parent LIs: 0)                |-> LI (indent: 1)\n      if (previousSibling && previousSibling.is('li')) {\n        indent++;\n      }\n    }\n    parent = parent.parent;\n  }\n  return indent;\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.string.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module list/indentcommand\n */\n\nimport Command from '@ckeditor/ckeditor5-core/src/command';\nimport first from '@ckeditor/ckeditor5-utils/src/first';\n\n/**\n * The list indent command. It is used by the {@link module:list/list~List list feature}.\n *\n * @extends module:core/command~Command\n */\nvar IndentCommand = /*#__PURE__*/function (_Command) {\n  /**\n   * Creates an instance of the command.\n   *\n   * @param {module:core/editor/editor~Editor} editor The editor instance.\n   * @param {'forward'|'backward'} indentDirection The direction of indent. If it is equal to `backward`, the command\n   * will outdent a list item.\n   */\n  function IndentCommand(editor, indentDirection) {\n    var _this;\n    _classCallCheck(this, IndentCommand);\n    _this = _callSuper(this, IndentCommand, [editor]);\n\n    /**\n     * Determines by how much the command will change the list item's indent attribute.\n     *\n     * @readonly\n     * @private\n     * @member {Number}\n     */\n    _this._indentBy = indentDirection == 'forward' ? 1 : -1;\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(IndentCommand, _Command);\n  return _createClass(IndentCommand, [{\n    key: \"refresh\",\n    value: function refresh() {\n      this.isEnabled = this._checkEnabled();\n    }\n\n    /**\n     * Indents or outdents (depending on the {@link #constructor}'s `indentDirection` parameter) selected list items.\n     *\n     * @fires execute\n     */\n  }, {\n    key: \"execute\",\n    value: function execute() {\n      var _this2 = this;\n      var model = this.editor.model;\n      var doc = model.document;\n      var itemsToChange = Array.from(doc.selection.getSelectedBlocks());\n      model.change(function (writer) {\n        var lastItem = itemsToChange[itemsToChange.length - 1];\n\n        // Indenting a list item should also indent all the items that are already sub-items of indented item.\n        var next = lastItem.nextSibling;\n\n        // Check all items after last indented item, as long as their indent is bigger than indent of that item.\n        while (next && next.name == 'listItem' && next.getAttribute('listIndent') > lastItem.getAttribute('listIndent')) {\n          itemsToChange.push(next);\n          next = next.nextSibling;\n        }\n\n        // We need to be sure to keep model in correct state after each small change, because converters\n        // bases on that state and assumes that model is correct.\n        // Because of that, if the command outdents items, we will outdent them starting from the last item, as\n        // it is safer.\n        if (_this2._indentBy < 0) {\n          itemsToChange = itemsToChange.reverse();\n        }\n        var _iterator = _createForOfIteratorHelper(itemsToChange),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var item = _step.value;\n            var indent = item.getAttribute('listIndent') + _this2._indentBy;\n\n            // If indent is lower than 0, it means that the item got outdented when it was not indented.\n            // This means that we need to convert that list item to paragraph.\n            if (indent < 0) {\n              // To keep the model as correct as possible, first rename listItem, then remove attributes,\n              // as listItem without attributes is very incorrect and will cause problems in converters.\n              // No need to remove attributes, will be removed by post fixer.\n              writer.rename(item, 'paragraph');\n            }\n            // If indent is >= 0, change the attribute value.\n            else {\n              writer.setAttribute('listIndent', indent, item);\n            }\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      });\n    }\n\n    /**\n     * Checks whether the command can be enabled in the current context.\n     *\n     * @private\n     * @returns {Boolean} Whether the command should be enabled.\n     */\n  }, {\n    key: \"_checkEnabled\",\n    value: function _checkEnabled() {\n      // Check whether any of position's ancestor is a list item.\n      var listItem = first(this.editor.model.document.selection.getSelectedBlocks());\n\n      // If selection is not in a list item, the command is disabled.\n      if (!listItem || !listItem.is('listItem')) {\n        return false;\n      }\n      if (this._indentBy > 0) {\n        // Cannot indent first item in it's list. Check if before `listItem` is a list item that is in same list.\n        // To be in the same list, the item has to have same attributes and cannot be \"split\" by an item with lower indent.\n        var indent = listItem.getAttribute('listIndent');\n        var type = listItem.getAttribute('listType');\n        var prev = listItem.previousSibling;\n        while (prev && prev.is('listItem') && prev.getAttribute('listIndent') >= indent) {\n          if (prev.getAttribute('listIndent') == indent) {\n            // The item is on the same level.\n            // If it has same type, it means that we found a preceding sibling from the same list.\n            // If it does not have same type, it means that `listItem` is on different list (this can happen only\n            // on top level lists, though).\n            return prev.getAttribute('listType') == type;\n          }\n          prev = prev.previousSibling;\n        }\n\n        // Could not find similar list item, this means that `listItem` is first in its list.\n        return false;\n      }\n\n      // If we are outdenting it is enough to be in list item. Every list item can always be outdented.\n      return true;\n    }\n  }]);\n}(Command);\nexport { IndentCommand as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module list/list\n */\n\nimport ListEditing from './listediting';\nimport ListUI from './listui';\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\n\n/**\n * The list feature.\n *\n * This is a \"glue\" plugin that loads the {@link module:list/listediting~ListEditing list editing feature}\n * and {@link module:list/listui~ListUI list UI feature}.\n *\n * @extends module:core/plugin~Plugin\n */\nvar List = /*#__PURE__*/function (_Plugin) {\n  function List() {\n    _classCallCheck(this, List);\n    return _callSuper(this, List, arguments);\n  }\n  _inherits(List, _Plugin);\n  return _createClass(List, null, [{\n    key: \"requires\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return [ListEditing, ListUI];\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"pluginName\",\n    get: function get() {\n      return 'List';\n    }\n  }]);\n}(Plugin);\nexport { List as default };","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module list/listcommand\n */\n\nimport Command from '@ckeditor/ckeditor5-core/src/command';\nimport first from '@ckeditor/ckeditor5-utils/src/first';\n\n/**\n * The list command. It is used by the {@link module:list/list~List list feature}.\n *\n * @extends module:core/command~Command\n */\nvar ListCommand = /*#__PURE__*/function (_Command) {\n  /**\n   * Creates an instance of the command.\n   *\n   * @param {module:core/editor/editor~Editor} editor The editor instance.\n   * @param {'numbered'|'bulleted'} type List type that will be handled by this command.\n   */\n  function ListCommand(editor, type) {\n    var _this;\n    _classCallCheck(this, ListCommand);\n    _this = _callSuper(this, ListCommand, [editor]);\n\n    /**\n     * The type of the list created by the command.\n     *\n     * @readonly\n     * @member {'numbered'|'bulleted'|'todo'}\n     */\n    _this.type = type;\n\n    /**\n     * A flag indicating whether the command is active, which means that the selection starts in a list of the same type.\n     *\n     * @observable\n     * @readonly\n     * @member {Boolean} #value\n     */\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(ListCommand, _Command);\n  return _createClass(ListCommand, [{\n    key: \"refresh\",\n    value: function refresh() {\n      this.value = this._getValue();\n      this.isEnabled = this._checkEnabled();\n    }\n\n    /**\n     * Executes the command.\n     *\n     * @protected\n     */\n  }, {\n    key: \"execute\",\n    value: function execute() {\n      var _this2 = this;\n      var model = this.editor.model;\n      var document = model.document;\n      var blocks = Array.from(document.selection.getSelectedBlocks()).filter(function (block) {\n        return checkCanBecomeListItem(block, model.schema);\n      });\n\n      // Whether we are turning off some items.\n      var turnOff = this.value === true;\n      // If we are turning off items, we are going to rename them to paragraphs.\n\n      model.change(function (writer) {\n        // If part of a list got turned off, we need to handle (outdent) all of sub-items of the last turned-off item.\n        // To be sure that model is all the time in a good state, we first fix items below turned-off item.\n        if (turnOff) {\n          // Start from the model item that is just after the last turned-off item.\n          var next = blocks[blocks.length - 1].nextSibling;\n          var currentIndent = Number.POSITIVE_INFINITY;\n          var changes = [];\n\n          // Correct indent of all items after the last turned off item.\n          // Rules that should be followed:\n          // 1. All direct sub-items of turned-off item should become indent 0, because the first item after it\n          //    will be the first item of a new list. Other items are at the same level, so should have same 0 index.\n          // 2. All items with indent lower than indent of turned-off item should become indent 0, because they\n          //    should not end up as a child of any of list items that they were not children of before.\n          // 3. All other items should have their indent changed relatively to it's parent.\n          //\n          // For example:\n          // 1  * --------\n          // 2     * --------\n          // 3        * --------\t\t\t<-- this is turned off.\n          // 4           * --------\t\t<-- this has to become indent = 0, because it will be first item on a new list.\n          // 5              * --------\t<-- this should be still be a child of item above, so indent = 1.\n          // 6        * --------\t\t\t<-- this has to become indent = 0, because it should not be a child of any of items above.\n          // 7           * --------\t\t<-- this should be still be a child of item above, so indent = 1.\n          // 8     * --------\t\t\t\t<-- this has to become indent = 0.\n          // 9        * --------\t\t\t<-- this should still be a child of item above, so indent = 1.\n          // 10          * --------\t\t<-- this should still be a child of item above, so indent = 2.\n          // 11          * --------\t\t<-- this should still be at the same level as item above, so indent = 2.\n          // 12 * --------\t\t\t\t<-- this and all below are left unchanged.\n          // 13    * --------\n          // 14       * --------\n          //\n          // After turning off 3 the list becomes:\n          //\n          // 1  * --------\n          // 2     * --------\n          //\n          // 3  --------\n          //\n          // 4  * --------\n          // 5     * --------\n          // 6  * --------\n          // 7     * --------\n          // 8  * --------\n          // 9     * --------\n          // 10       * --------\n          // 11       * --------\n          // 12 * --------\n          // 13    * --------\n          // 14       * --------\n          //\n          // Thanks to this algorithm no lists are mismatched and no items get unexpected children/parent, while\n          // those parent-child connection which are possible to maintain are still maintained. It's worth noting\n          // that this is the same effect that we would be get by multiple use of outdent command. However doing\n          // it like this is much more efficient because it's less operation (less memory usage, easier OT) and\n          // less conversion (faster).\n          while (next && next.name == 'listItem' && next.getAttribute('listIndent') !== 0) {\n            // Check each next list item, as long as its indent is bigger than 0.\n            // If the indent is 0 we are not going to change anything anyway.\n            var indent = next.getAttribute('listIndent');\n\n            // We check if that's item indent is lower as current relative indent.\n            if (indent < currentIndent) {\n              // If it is, current relative indent becomes that indent.\n              currentIndent = indent;\n            }\n\n            // Fix indent relatively to current relative indent.\n            // Note, that if we just changed the current relative indent, the newIndent will be equal to 0.\n            var newIndent = indent - currentIndent;\n\n            // Save the entry in changes array. We do not apply it at the moment, because we will need to\n            // reverse the changes so the last item is changed first.\n            // This is to keep model in correct state all the time.\n            changes.push({\n              element: next,\n              listIndent: newIndent\n            });\n\n            // Find next item.\n            next = next.nextSibling;\n          }\n          changes = changes.reverse();\n          var _iterator = _createForOfIteratorHelper(changes),\n            _step;\n          try {\n            for (_iterator.s(); !(_step = _iterator.n()).done;) {\n              var item = _step.value;\n              writer.setAttribute('listIndent', item.listIndent, item.element);\n            }\n          } catch (err) {\n            _iterator.e(err);\n          } finally {\n            _iterator.f();\n          }\n        }\n\n        // If we are turning on, we might change some items that are already `listItem`s but with different type.\n        // Changing one nested list item to other type should also trigger changing all its siblings so the\n        // whole nested list is of the same type.\n        // Example (assume changing to numbered list):\n        // * ------\t\t\t\t<-- do not fix, top level item\n        //   * ------\t\t\t<-- fix, because latter list item of this item's list is changed\n        //      * ------\t\t<-- do not fix, item is not affected (different list)\n        //   * ------\t\t\t<-- fix, because latter list item of this item's list is changed\n        //      * ------\t\t<-- fix, because latter list item of this item's list is changed\n        //      * ---[--\t\t<-- already in selection\n        //   * ------\t\t\t<-- already in selection\n        //   * ------\t\t\t<-- already in selection\n        // * ------\t\t\t\t<-- already in selection, but does not cause other list items to change because is top-level\n        //   * ---]--\t\t\t<-- already in selection\n        //   * ------\t\t\t<-- fix, because preceding list item of this item's list is changed\n        //      * ------\t\t<-- do not fix, item is not affected (different list)\n        // * ------\t\t\t\t<-- do not fix, top level item\n        if (!turnOff) {\n          // Find lowest indent among selected items. This will be indicator what is the indent of\n          // top-most list affected by the command.\n          var lowestIndent = Number.POSITIVE_INFINITY;\n          var _iterator2 = _createForOfIteratorHelper(blocks),\n            _step2;\n          try {\n            for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n              var _item = _step2.value;\n              if (_item.is('listItem') && _item.getAttribute('listIndent') < lowestIndent) {\n                lowestIndent = _item.getAttribute('listIndent');\n              }\n            }\n\n            // Do not execute the fix for top-level lists.\n          } catch (err) {\n            _iterator2.e(err);\n          } finally {\n            _iterator2.f();\n          }\n          lowestIndent = lowestIndent === 0 ? 1 : lowestIndent;\n\n          // Fix types of list items that are \"before\" the selected blocks.\n          _fixType(blocks, true, lowestIndent);\n\n          // Fix types of list items that are \"after\" the selected blocks.\n          _fixType(blocks, false, lowestIndent);\n        }\n\n        // Phew! Now it will be easier :).\n        // For each block element that was in the selection, we will either: turn it to list item,\n        // turn it to paragraph, or change it's type. Or leave it as it is.\n        // Do it in reverse as there might be multiple blocks (same as with changing indents).\n        var _iterator3 = _createForOfIteratorHelper(blocks.reverse()),\n          _step3;\n        try {\n          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n            var element = _step3.value;\n            if (turnOff && element.name == 'listItem') {\n              // We are turning off and the element is a `listItem` - it should be converted to `paragraph`.\n              // List item specific attributes are removed by post fixer.\n              writer.rename(element, 'paragraph');\n            } else if (!turnOff && element.name != 'listItem') {\n              // We are turning on and the element is not a `listItem` - it should be converted to `listItem`.\n              // The order of operations is important to keep model in correct state.\n              writer.setAttributes({\n                listType: _this2.type,\n                listIndent: 0\n              }, element);\n              writer.rename(element, 'listItem');\n            } else if (!turnOff && element.name == 'listItem' && element.getAttribute('listType') != _this2.type) {\n              // We are turning on and the element is a `listItem` but has different type - change it's type and\n              // type of it's all siblings that have same indent.\n              writer.setAttribute('listType', _this2.type, element);\n            }\n          }\n        } catch (err) {\n          _iterator3.e(err);\n        } finally {\n          _iterator3.f();\n        }\n      });\n    }\n\n    /**\n     * Checks the command's {@link #value}.\n     *\n     * @private\n     * @returns {Boolean} The current value.\n     */\n  }, {\n    key: \"_getValue\",\n    value: function _getValue() {\n      // Check whether closest `listItem` ancestor of the position has a correct type.\n      var listItem = first(this.editor.model.document.selection.getSelectedBlocks());\n      return !!listItem && listItem.is('listItem') && listItem.getAttribute('listType') == this.type;\n    }\n\n    /**\n     * Checks whether the command can be enabled in the current context.\n     *\n     * @private\n     * @returns {Boolean} Whether the command should be enabled.\n     */\n  }, {\n    key: \"_checkEnabled\",\n    value: function _checkEnabled() {\n      // If command value is true it means that we are in list item, so the command should be enabled.\n      if (this.value) {\n        return true;\n      }\n      var selection = this.editor.model.document.selection;\n      var schema = this.editor.model.schema;\n      var firstBlock = first(selection.getSelectedBlocks());\n      if (!firstBlock) {\n        return false;\n      }\n\n      // Otherwise, check if list item can be inserted at the position start.\n      return checkCanBecomeListItem(firstBlock, schema);\n    }\n  }]);\n}(Command); // Helper function used when one or more list item have their type changed. Fixes type of other list items\n// that are affected by the change (are in same lists) but are not directly in selection. The function got extracted\n// not to duplicated code, as same fix has to be performed before and after selection.\n//\n// @param {Array.<module:engine/model/node~Node>} blocks Blocks that are in selection.\n// @param {Boolean} isBackward Specified whether fix will be applied for blocks before first selected block (`true`)\n// or blocks after last selected block (`false`).\n// @param {Number} lowestIndent Lowest indent among selected blocks.\nexport { ListCommand as default };\nfunction _fixType(blocks, isBackward, lowestIndent) {\n  // We need to check previous sibling of first changed item and next siblings of last changed item.\n  var startingItem = isBackward ? blocks[0] : blocks[blocks.length - 1];\n  if (startingItem.is('listItem')) {\n    var item = startingItem[isBackward ? 'previousSibling' : 'nextSibling'];\n    // During processing items, keeps the lowest indent of already processed items.\n    // This saves us from changing too many items.\n    // Following example is for going forward as it is easier to read, however same applies to going backward.\n    // * ------\n    //   * ------\n    //     * --[---\n    //   * ------\t\t<-- `lowestIndent` should be 1\n    //     * --]---\t\t<-- `startingItem`, `currentIndent` = 2, `lowestIndent` == 1\n    //     * ------\t\t<-- should be fixed, `indent` == 2 == `currentIndent`\n    //   * ------\t\t<-- should be fixed, set `currentIndent` to 1, `indent` == 1 == `currentIndent`\n    //     * ------\t\t<-- should not be fixed, item is in different list, `indent` = 2, `indent` != `currentIndent`\n    //   * ------\t\t<-- should be fixed, `indent` == 1 == `currentIndent`\n    // * ------\t\t\t<-- break loop (`indent` < `lowestIndent`)\n    var currentIndent = startingItem.getAttribute('listIndent');\n\n    // Look back until a list item with indent lower than reference `lowestIndent`.\n    // That would be the parent of nested sublist which contains item having `lowestIndent`.\n    while (item && item.is('listItem') && item.getAttribute('listIndent') >= lowestIndent) {\n      if (currentIndent > item.getAttribute('listIndent')) {\n        currentIndent = item.getAttribute('listIndent');\n      }\n\n      // Found an item that is in the same nested sublist.\n      if (item.getAttribute('listIndent') == currentIndent) {\n        // Just add the item to selected blocks like it was selected by the user.\n        blocks[isBackward ? 'unshift' : 'push'](item);\n      }\n      item = item[isBackward ? 'previousSibling' : 'nextSibling'];\n    }\n  }\n}\n\n// Checks whether the given block can be replaced by a listItem.\n//\n// @private\n// @param {module:engine/model/element~Element} block A block to be tested.\n// @param {module:engine/model/schema~Schema} schema The schema of the document.\n// @returns {Boolean}\nfunction checkCanBecomeListItem(block, schema) {\n  return schema.checkChild(block.parent, 'listItem') && !schema.isObject(block);\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.function.name.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module list/listediting\n */\n\nimport ListCommand from './listcommand';\nimport IndentCommand from './indentcommand';\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';\nimport { cleanList, cleanListItem, modelViewInsertion, modelViewChangeType, modelViewMergeAfterChangeType, modelViewMergeAfter, modelViewRemove, modelViewSplitOnInsert, modelViewChangeIndent, modelChangePostFixer, modelIndentPasteFixer, viewModelConverter, modelToViewPosition, viewToModelPosition } from './converters';\n\n/**\n * The engine of the list feature. It handles creating, editing and removing lists and list items.\n *\n * It registers the `'numberedList'`, `'bulletedList'`, `'indentList'` and `'outdentList'` commands.\n *\n * @extends module:core/plugin~Plugin\n */\nvar ListEditing = /*#__PURE__*/function (_Plugin) {\n  function ListEditing() {\n    _classCallCheck(this, ListEditing);\n    return _callSuper(this, ListEditing, arguments);\n  }\n  _inherits(ListEditing, _Plugin);\n  return _createClass(ListEditing, [{\n    key: \"init\",\n    value:\n    /**\n     * @inheritDoc\n     */\n    function init() {\n      var _this = this;\n      var editor = this.editor;\n\n      // Schema.\n      // Note: in case `$block` will ever be allowed in `listItem`, keep in mind that this feature\n      // uses `Selection#getSelectedBlocks()` without any additional processing to obtain all selected list items.\n      // If there are blocks allowed inside list item, algorithms using `getSelectedBlocks()` will have to be modified.\n      editor.model.schema.register('listItem', {\n        inheritAllFrom: '$block',\n        allowAttributes: ['listType', 'listIndent']\n      });\n\n      // Converters.\n      var data = editor.data;\n      var editing = editor.editing;\n      editor.model.document.registerPostFixer(function (writer) {\n        return modelChangePostFixer(editor.model, writer);\n      });\n      editing.mapper.registerViewToModelLength('li', getViewListItemLength);\n      data.mapper.registerViewToModelLength('li', getViewListItemLength);\n      editing.mapper.on('modelToViewPosition', modelToViewPosition(editing.view));\n      editing.mapper.on('viewToModelPosition', viewToModelPosition(editor.model));\n      data.mapper.on('modelToViewPosition', modelToViewPosition(editing.view));\n      editing.downcastDispatcher.on('insert', modelViewSplitOnInsert, {\n        priority: 'high'\n      });\n      editing.downcastDispatcher.on('insert:listItem', modelViewInsertion(editor.model));\n      data.downcastDispatcher.on('insert', modelViewSplitOnInsert, {\n        priority: 'high'\n      });\n      data.downcastDispatcher.on('insert:listItem', modelViewInsertion(editor.model));\n      editing.downcastDispatcher.on('attribute:listType:listItem', modelViewChangeType, {\n        priority: 'high'\n      });\n      editing.downcastDispatcher.on('attribute:listType:listItem', modelViewMergeAfterChangeType, {\n        priority: 'low'\n      });\n      editing.downcastDispatcher.on('attribute:listIndent:listItem', modelViewChangeIndent(editor.model));\n      editing.downcastDispatcher.on('remove:listItem', modelViewRemove(editor.model));\n      editing.downcastDispatcher.on('remove', modelViewMergeAfter, {\n        priority: 'low'\n      });\n      data.upcastDispatcher.on('element:ul', cleanList, {\n        priority: 'high'\n      });\n      data.upcastDispatcher.on('element:ol', cleanList, {\n        priority: 'high'\n      });\n      data.upcastDispatcher.on('element:li', cleanListItem, {\n        priority: 'high'\n      });\n      data.upcastDispatcher.on('element:li', viewModelConverter);\n\n      // Fix indentation of pasted items.\n      editor.model.on('insertContent', modelIndentPasteFixer, {\n        priority: 'high'\n      });\n\n      // Register commands for numbered and bulleted list.\n      editor.commands.add('numberedList', new ListCommand(editor, 'numbered'));\n      editor.commands.add('bulletedList', new ListCommand(editor, 'bulleted'));\n\n      // Register commands for indenting.\n      editor.commands.add('indentList', new IndentCommand(editor, 'forward'));\n      editor.commands.add('outdentList', new IndentCommand(editor, 'backward'));\n      var viewDocument = editing.view.document;\n\n      // Overwrite default Enter key behavior.\n      // If Enter key is pressed with selection collapsed in empty list item, outdent it instead of breaking it.\n      this.listenTo(viewDocument, 'enter', function (evt, data) {\n        var doc = _this.editor.model.document;\n        var positionParent = doc.selection.getLastPosition().parent;\n        if (doc.selection.isCollapsed && positionParent.name == 'listItem' && positionParent.isEmpty) {\n          _this.editor.execute('outdentList');\n          data.preventDefault();\n          evt.stop();\n        }\n      });\n\n      // Overwrite default Backspace key behavior.\n      // If Backspace key is pressed with selection collapsed on first position in first list item, outdent it. #83\n      this.listenTo(viewDocument, 'delete', function (evt, data) {\n        // Check conditions from those that require less computations like those immediately available.\n        if (data.direction !== 'backward') {\n          return;\n        }\n        var selection = _this.editor.model.document.selection;\n        if (!selection.isCollapsed) {\n          return;\n        }\n        var firstPosition = selection.getFirstPosition();\n        if (!firstPosition.isAtStart) {\n          return;\n        }\n        var positionParent = firstPosition.parent;\n        if (positionParent.name !== 'listItem') {\n          return;\n        }\n        var previousIsAListItem = positionParent.previousSibling && positionParent.previousSibling.name === 'listItem';\n        if (previousIsAListItem) {\n          return;\n        }\n        _this.editor.execute('outdentList');\n        data.preventDefault();\n        evt.stop();\n      }, {\n        priority: 'high'\n      });\n      var getCommandExecuter = function getCommandExecuter(commandName) {\n        return function (data, cancel) {\n          var command = _this.editor.commands.get(commandName);\n          if (command.isEnabled) {\n            _this.editor.execute(commandName);\n            cancel();\n          }\n        };\n      };\n      editor.keystrokes.set('Tab', getCommandExecuter('indentList'));\n      editor.keystrokes.set('Shift+Tab', getCommandExecuter('outdentList'));\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"afterInit\",\n    value: function afterInit() {\n      var commands = this.editor.commands;\n      var indent = commands.get('indent');\n      var outdent = commands.get('outdent');\n      if (indent) {\n        indent.registerChildCommand(commands.get('indentList'));\n      }\n      if (outdent) {\n        outdent.registerChildCommand(commands.get('outdentList'));\n      }\n    }\n  }], [{\n    key: \"pluginName\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return 'ListEditing';\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"requires\",\n    get: function get() {\n      return [Paragraph];\n    }\n  }]);\n}(Plugin);\nexport { ListEditing as default };\nfunction getViewListItemLength(element) {\n  var length = 1;\n  var _iterator = _createForOfIteratorHelper(element.getChildren()),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var child = _step.value;\n      if (child.name == 'ul' || child.name == 'ol') {\n        var _iterator2 = _createForOfIteratorHelper(child.getChildren()),\n          _step2;\n        try {\n          for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n            var item = _step2.value;\n            length += getViewListItemLength(item);\n          }\n        } catch (err) {\n          _iterator2.e(err);\n        } finally {\n          _iterator2.f();\n        }\n      }\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  return length;\n}","import _classCallCheck from '/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js';\nimport _createClass from '/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js';\nimport _callSuper from '/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js';\nimport _inherits from '/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js';\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module list/listui\n */\nimport { createUIComponent } from './utils';\nimport numberedListIcon from '../theme/icons/numberedlist.svg';\nimport bulletedListIcon from '../theme/icons/bulletedlist.svg';\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\n/**\n * The list UI feature. It introduces the `'numberedList'` and `'bulletedList'` buttons that\n * allow to convert paragraphs to and from list items and indent or outdent them.\n *\n * @extends module:core/plugin~Plugin\n */\nvar ListUI = /*#__PURE__*/\nfunction (_Plugin) {\n    function ListUI() {\n        _classCallCheck(this, ListUI);\n        return _callSuper(this, ListUI, arguments);\n    }\n    _inherits(ListUI, _Plugin);\n    return _createClass(ListUI, [{\n            key: 'init',\n            value: /**\n     * @inheritDoc\n     */\n            function init() {\n                var t = this.editor.t;\n                // Create two buttons and link them with numberedList and bulletedList commands.\n                createUIComponent(this.editor, 'numberedList', t('Numbered List'), numberedListIcon);\n                createUIComponent(this.editor, 'bulletedList', t('Bulleted List'), bulletedListIcon);\n            }\n        }]);\n}(Plugin);\nexport {\n    ListUI as default\n};","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport \"core-js/modules/es.function.name.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module list/utils\n */\n\nimport { getFillerOffset } from '@ckeditor/ckeditor5-engine/src/view/containerelement';\nimport ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview';\n\n/**\n * Creates a list item {@link module:engine/view/containerelement~ContainerElement}.\n *\n * @param {module:engine/view/downcastwriter~DowncastWriter} writer The writer instance.\n * @returns {module:engine/view/containerelement~ContainerElement}\n */\nexport function createViewListItemElement(writer) {\n  var viewItem = writer.createContainerElement('li');\n  viewItem.getFillerOffset = getListItemFillerOffset;\n  return viewItem;\n}\n\n/**\n * Helper function that creates a `<ul><li></li></ul>` or (`<ol>`) structure out of the given `modelItem` model `listItem` element.\n * Then, it binds the created view list item (<li>) with the model `listItem` element.\n * The function then returns the created view list item (<li>).\n *\n * @param {module:engine/model/item~Item} modelItem Model list item.\n * @param {module:engine/conversion/upcastdispatcher~UpcastConversionApi} conversionApi Conversion interface.\n * @returns {module:engine/view/containerelement~ContainerElement} View list element.\n */\nexport function generateLiInUl(modelItem, conversionApi) {\n  var mapper = conversionApi.mapper;\n  var viewWriter = conversionApi.writer;\n  var listType = modelItem.getAttribute('listType') == 'numbered' ? 'ol' : 'ul';\n  var viewItem = createViewListItemElement(viewWriter);\n  var viewList = viewWriter.createContainerElement(listType, null);\n  viewWriter.insert(viewWriter.createPositionAt(viewList, 0), viewItem);\n  mapper.bindElements(modelItem, viewItem);\n  return viewItem;\n}\n\n/**\n * Helper function that inserts a view list at a correct place and merges it with its siblings.\n * It takes a model list item element (`modelItem`) and a corresponding view list item element (`injectedItem`). The view list item\n * should be in a view list element (`<ul>` or `<ol>`) and should be its only child.\n * See comments below to better understand the algorithm.\n *\n * @param {module:engine/view/item~Item} modelItem Model list item.\n * @param {module:engine/view/containerelement~ContainerElement} injectedItem\n * @param {module:engine/conversion/upcastdispatcher~UpcastConversionApi} conversionApi Conversion interface.\n * @param {module:engine/model/model~Model} model The model instance.\n */\nexport function injectViewList(modelItem, injectedItem, conversionApi, model) {\n  var injectedList = injectedItem.parent;\n  var mapper = conversionApi.mapper;\n  var viewWriter = conversionApi.writer;\n\n  // The position where the view list will be inserted.\n  var insertPosition = mapper.toViewPosition(model.createPositionBefore(modelItem));\n\n  // 1. Find the previous list item that has the same or smaller indent. Basically we are looking for the first model item\n  // that is a \"parent\" or \"sibling\" of the injected model item.\n  // If there is no such list item, it means that the injected list item is the first item in \"its list\".\n  var refItem = getSiblingListItem(modelItem.previousSibling, {\n    sameIndent: true,\n    smallerIndent: true,\n    listIndent: modelItem.getAttribute('listIndent')\n  });\n  var prevItem = modelItem.previousSibling;\n  if (refItem && refItem.getAttribute('listIndent') == modelItem.getAttribute('listIndent')) {\n    // There is a list item with the same indent - we found the same-level sibling.\n    // Break the list after it. The inserted view item will be added in the broken space.\n    var viewItem = mapper.toViewElement(refItem);\n    insertPosition = viewWriter.breakContainer(viewWriter.createPositionAfter(viewItem));\n  } else {\n    // There is no list item with the same indent. Check the previous model item.\n    if (prevItem && prevItem.name == 'listItem') {\n      // If it is a list item, it has to have a lower indent.\n      // It means that the inserted item should be added to it as its nested item.\n      insertPosition = mapper.toViewPosition(model.createPositionAt(prevItem, 'end'));\n    } else {\n      // The previous item is not a list item (or does not exist at all).\n      // Just map the position and insert the view item at the mapped position.\n      insertPosition = mapper.toViewPosition(model.createPositionBefore(modelItem));\n    }\n  }\n  insertPosition = positionAfterUiElements(insertPosition);\n\n  // Insert the view item.\n  viewWriter.insert(insertPosition, injectedList);\n\n  // 2. Handle possible children of the injected model item.\n  if (prevItem && prevItem.name == 'listItem') {\n    var prevView = mapper.toViewElement(prevItem);\n    var walkerBoundaries = viewWriter.createRange(viewWriter.createPositionAt(prevView, 0), insertPosition);\n    var walker = walkerBoundaries.getWalker({\n      ignoreElementEnd: true\n    });\n    var _iterator = _createForOfIteratorHelper(walker),\n      _step;\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var value = _step.value;\n        if (value.item.is('li')) {\n          var breakPosition = viewWriter.breakContainer(viewWriter.createPositionBefore(value.item));\n          var viewList = value.item.parent;\n          var targetPosition = viewWriter.createPositionAt(injectedItem, 'end');\n          mergeViewLists(viewWriter, targetPosition.nodeBefore, targetPosition.nodeAfter);\n          viewWriter.move(viewWriter.createRangeOn(viewList), targetPosition);\n          walker.position = breakPosition;\n        }\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n  } else {\n    var nextViewList = injectedList.nextSibling;\n    if (nextViewList && (nextViewList.is('ul') || nextViewList.is('ol'))) {\n      var lastSubChild = null;\n      var _iterator2 = _createForOfIteratorHelper(nextViewList.getChildren()),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var child = _step2.value;\n          var modelChild = mapper.toModelElement(child);\n          if (modelChild && modelChild.getAttribute('listIndent') > modelItem.getAttribute('listIndent')) {\n            lastSubChild = child;\n          } else {\n            break;\n          }\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      if (lastSubChild) {\n        viewWriter.breakContainer(viewWriter.createPositionAfter(lastSubChild));\n        viewWriter.move(viewWriter.createRangeOn(lastSubChild.parent), viewWriter.createPositionAt(injectedItem, 'end'));\n      }\n    }\n  }\n\n  // Merge the inserted view list with its possible neighbor lists.\n  mergeViewLists(viewWriter, injectedList, injectedList.nextSibling);\n  mergeViewLists(viewWriter, injectedList.previousSibling, injectedList);\n}\n\n/**\n * Helper function that takes two parameters that are expected to be view list elements, and merges them.\n * The merge happens only if both parameters are list elements of the same type (the same element name and the same class attributes).\n *\n * @param {module:engine/view/downcastwriter~DowncastWriter} viewWriter The writer instance.\n * @param {module:engine/view/item~Item} firstList The first element to compare.\n * @param {module:engine/view/item~Item} secondList The second element to compare.\n * @returns {module:engine/view/position~Position|null} The position after merge or `null` when there was no merge.\n */\nexport function mergeViewLists(viewWriter, firstList, secondList) {\n  // Check if two lists are going to be merged.\n  if (!firstList || !secondList || firstList.name != 'ul' && firstList.name != 'ol') {\n    return null;\n  }\n\n  // Both parameters are list elements, so compare types now.\n  if (firstList.name != secondList.name || firstList.getAttribute('class') !== secondList.getAttribute('class')) {\n    return null;\n  }\n  return viewWriter.mergeContainers(viewWriter.createPositionAfter(firstList));\n}\n\n/**\n * Helper function that for a given `view.Position`, returns a `view.Position` that is after all `view.UIElement`s that\n * are after the given position.\n *\n * For example:\n * `<container:p>foo^<ui:span></ui:span><ui:span></ui:span>bar</container:p>`\n * For position ^, the position before \"bar\" will be returned.\n *\n * @param {module:engine/view/position~Position} viewPosition\n * @returns {module:engine/view/position~Position}\n */\nexport function positionAfterUiElements(viewPosition) {\n  return viewPosition.getLastMatchingPosition(function (value) {\n    return value.item.is('uiElement');\n  });\n}\n\n/**\n * Helper function that searches for a previous list item sibling of a given model item that meets the given criteria\n * passed by the options object.\n *\n * @param {module:engine/model/item~Item} modelItem\n * @param {Object} options Search criteria.\n * @param {Boolean} [options.sameIndent=false] Whether the sought sibling should have the same indentation.\n * @param {Boolean} [options.smallerIndent=false] Whether the sought sibling should have a smaller indentation.\n * @param {Number} [options.listIndent] The reference indentation.\n * @returns {module:engine/model/item~Item|null}\n */\nexport function getSiblingListItem(modelItem, options) {\n  var sameIndent = !!options.sameIndent;\n  var smallerIndent = !!options.smallerIndent;\n  var indent = options.listIndent;\n  var item = modelItem;\n  while (item && item.name == 'listItem') {\n    var itemIndent = item.getAttribute('listIndent');\n    if (sameIndent && indent == itemIndent || smallerIndent && indent > itemIndent) {\n      return item;\n    }\n    item = item.previousSibling;\n  }\n  return null;\n}\n\n/**\n * Helper method for creating a UI button and linking it with an appropriate command.\n *\n * @private\n * @param {module:core/editor/editor~Editor} editor The editor instance to which the UI component will be added.\n * @param {String} commandName The name of the command.\n * @param {Object} label The button label.\n * @param {String} icon The source of the icon.\n */\nexport function createUIComponent(editor, commandName, label, icon) {\n  editor.ui.componentFactory.add(commandName, function (locale) {\n    var command = editor.commands.get(commandName);\n    var buttonView = new ButtonView(locale);\n    buttonView.set({\n      label: label,\n      icon: icon,\n      tooltip: true,\n      isToggleable: true\n    });\n\n    // Bind button model to command.\n    buttonView.bind('isOn', 'isEnabled').to(command, 'value', 'isEnabled');\n\n    // Execute command.\n    buttonView.on('execute', function () {\n      return editor.execute(commandName);\n    });\n    return buttonView;\n  });\n}\n\n// Implementation of getFillerOffset for view list item element.\n//\n// @returns {Number|null} Block filler offset or `null` if block filler is not needed.\nfunction getListItemFillerOffset() {\n  var hasOnlyLists = !this.isEmpty && (this.getChild(0).name == 'ul' || this.getChild(0).name == 'ol');\n  if (this.isEmpty || hasOnlyLists) {\n    return 0;\n  }\n  return getFillerOffset.call(this);\n}","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M7 5.75c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zm-6 0C1 4.784 1.777 4 2.75 4c.966 0 1.75.777 1.75 1.75 0 .966-.777 1.75-1.75 1.75C1.784 7.5 1 6.723 1 5.75zm6 9c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zm-6 0c0-.966.777-1.75 1.75-1.75.966 0 1.75.777 1.75 1.75 0 .966-.777 1.75-1.75 1.75-.966 0-1.75-.777-1.75-1.75z\\\"/></svg>\"","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M7 5.75c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zM3.5 3v5H2V3.7H1v-1h2.5V3zM.343 17.857l2.59-3.257H2.92a.6.6 0 1 0-1.04 0H.302a2 2 0 1 1 3.995 0h-.001c-.048.405-.16.734-.333.988-.175.254-.59.692-1.244 1.312H4.3v1h-4l.043-.043zM7 14.75a.75.75 0 0 1 .75-.75h9.5a.75.75 0 1 1 0 1.5h-9.5a.75.75 0 0 1-.75-.75z\\\"/></svg>\"","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.regexp.test.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module paragraph/paragraph\n */\n\nimport ParagraphCommand from './paragraphcommand';\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\n\n/**\n * The paragraph feature for the editor.\n *\n * It introduces the `<paragraph>` element in the model which renders as a `<p>` element in the DOM and data.\n *\n * @extends module:core/plugin~Plugin\n */\nvar Paragraph = /*#__PURE__*/function (_Plugin) {\n  function Paragraph() {\n    _classCallCheck(this, Paragraph);\n    return _callSuper(this, Paragraph, arguments);\n  }\n  _inherits(Paragraph, _Plugin);\n  return _createClass(Paragraph, [{\n    key: \"init\",\n    value:\n    /**\n     * @inheritDoc\n     */\n    function init() {\n      var _this = this;\n      var editor = this.editor;\n      var model = editor.model;\n      var data = editor.data;\n      editor.commands.add('paragraph', new ParagraphCommand(editor));\n\n      // Schema.\n      model.schema.register('paragraph', {\n        inheritAllFrom: '$block'\n      });\n      editor.conversion.elementToElement({\n        model: 'paragraph',\n        view: 'p'\n      });\n\n      // Content autoparagraphing. --------------------------------------------------\n\n      // Handles element which has not been converted by any plugin and checks if it would be converted if\n      // we wrap it in a paragraph or change it to a paragraph.\n      editor.conversion.for('upcast').elementToElement({\n        model: function model(viewElement, modelWriter) {\n          if (!Paragraph.paragraphLikeElements.has(viewElement.name)) {\n            return null;\n          }\n\n          // Do not auto-paragraph empty elements.\n          if (viewElement.isEmpty) {\n            return null;\n          }\n          return modelWriter.createElement('paragraph');\n        },\n        converterPriority: 'low'\n      });\n      data.upcastDispatcher.on('element', function (evt, data, conversionApi) {\n        // Do not try auto-paragraphing if the element was already converted.\n        if (!conversionApi.consumable.test(data.viewItem, {\n          name: data.viewItem.name\n        })) {\n          return;\n        }\n\n        // If the element is not paragraph-like try wrapping it in a paragraph.\n        if (isParagraphable(data.viewItem, data.modelCursor, conversionApi.schema)) {\n          Object.assign(data, wrapInParagraph(data.viewItem, data.modelCursor, conversionApi));\n        }\n      }, {\n        priority: 'low'\n      });\n\n      // Handles not converted text nodes and checks if would be converted if we wraps then by a paragraph.\n      data.upcastDispatcher.on('text', function (evt, data, conversionApi) {\n        // When node is already converted then do nothing.\n        if (data.modelRange) {\n          return;\n        }\n        if (isParagraphable(data.viewItem, data.modelCursor, conversionApi.schema)) {\n          Object.assign(data, wrapInParagraph(data.viewItem, data.modelCursor, conversionApi));\n        }\n      }, {\n        priority: 'lowest'\n      });\n\n      // Empty roots autoparagraphing. -----------------------------------------------\n\n      // Post-fixer which takes care of adding empty paragraph elements to empty roots.\n      // Besides fixing content on #changesDone we also need to handle editor.data#ready event because\n      // if initial data is empty or setData() wasn't even called there will be no #change fired.\n      model.document.registerPostFixer(function (writer) {\n        return _this._autoparagraphEmptyRoots(writer);\n      });\n      editor.data.on('ready', function () {\n        model.enqueueChange('transparent', function (writer) {\n          return _this._autoparagraphEmptyRoots(writer);\n        });\n      }, {\n        priority: 'lowest'\n      });\n    }\n\n    /**\n     * Fixes all empty roots.\n     *\n     * @private\n     * @returns {Boolean} `true` if any change has been applied, `false` otherwise.\n     */\n  }, {\n    key: \"_autoparagraphEmptyRoots\",\n    value: function _autoparagraphEmptyRoots(writer) {\n      var model = this.editor.model;\n      var _iterator = _createForOfIteratorHelper(model.document.getRootNames()),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var rootName = _step.value;\n          var root = model.document.getRoot(rootName);\n          if (root.isEmpty && root.rootName != '$graveyard') {\n            // If paragraph element is allowed in the root, create paragraph element.\n            if (model.schema.checkChild(root, 'paragraph')) {\n              writer.insertElement('paragraph', root);\n              return true;\n            }\n          }\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n  }], [{\n    key: \"pluginName\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return 'Paragraph';\n    }\n  }]);\n}(Plugin);\n/**\n * A list of element names which should be treated by the autoparagraphing algorithms as\n * paragraph-like. This means that e.g. the following content:\n *\n *\t\t<h1>Foo</h1>\n *\t\t<table>\n *\t\t\t<tr>\n *\t\t\t\t<td>X</td>\n *\t\t\t\t<td>\n *\t\t\t\t\t<ul>\n *\t\t\t\t\t\t<li>Y</li>\n *\t\t\t\t\t\t<li>Z</li>\n *\t\t\t\t\t</ul>\n *\t\t\t\t</td>\n *\t\t\t</tr>\n *\t\t</table>\n *\n * contains five paragraph-like elements: `<h1>`, two `<td>`s and two `<li>`s.\n * Hence, if none of the features is going to convert those elements the above content will be automatically handled\n * by the paragraph feature and converted to:\n *\n *\t\t<p>Foo</p>\n *\t\t<p>X</p>\n *\t\t<p>Y</p>\n *\t\t<p>Z</p>\n *\n * Note: The `<td>` containing two `<li>` elements was ignored as the innermost paragraph-like elements\n * have a priority upon conversion.\n *\n * @member {Set.<String>} module:paragraph/paragraph~Paragraph.paragraphLikeElements\n */\nexport { Paragraph as default };\nParagraph.paragraphLikeElements = new Set(['blockquote', 'dd', 'div', 'dt', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'li', 'p', 'td']);\nfunction wrapInParagraph(input, position, conversionApi) {\n  var paragraph = conversionApi.writer.createElement('paragraph');\n  conversionApi.writer.insert(paragraph, position);\n  return conversionApi.convertItem(input, conversionApi.writer.createPositionAt(paragraph, 0));\n}\nfunction isParagraphable(node, position, schema) {\n  var context = schema.createContext(position);\n\n  // When paragraph is allowed in this context...\n  if (!schema.checkChild(context, 'paragraph')) {\n    return false;\n  }\n\n  // And a node would be allowed in this paragraph...\n  if (!schema.checkChild(context.push('paragraph'), node)) {\n    return false;\n  }\n  return true;\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module paragraph/paragraphcommand\n */\n\nimport Command from '@ckeditor/ckeditor5-core/src/command';\nimport first from '@ckeditor/ckeditor5-utils/src/first';\n\n/**\n * The paragraph command.\n *\n * @extends module:core/command~Command\n */\nvar ParagraphCommand = /*#__PURE__*/function (_Command) {\n  function ParagraphCommand() {\n    _classCallCheck(this, ParagraphCommand);\n    return _callSuper(this, ParagraphCommand, arguments);\n  }\n  _inherits(ParagraphCommand, _Command);\n  return _createClass(ParagraphCommand, [{\n    key: \"refresh\",\n    value:\n    /**\n     * The value of the command. Indicates whether the selection start is placed in a paragraph.\n     *\n     * @readonly\n     * @observable\n     * @member {Boolean} #value\n     */\n\n    /**\n     * @inheritDoc\n     */\n    function refresh() {\n      var model = this.editor.model;\n      var document = model.document;\n      var block = first(document.selection.getSelectedBlocks());\n      this.value = !!block && block.is('paragraph');\n      this.isEnabled = !!block && checkCanBecomeParagraph(block, model.schema);\n    }\n\n    /**\n     * Executes the command. All the blocks (see {@link module:engine/model/schema~Schema}) in the selection\n     * will be turned to paragraphs.\n     *\n     * @fires execute\n     * @param {Object} [options] Options for the executed command.\n     * @param {module:engine/model/selection~Selection|module:engine/model/documentselection~DocumentSelection} [options.selection]\n     * The selection that the command should be applied to.\n     * By default, if not provided, the command is applied to the {@link module:engine/model/document~Document#selection}.\n     */\n  }, {\n    key: \"execute\",\n    value: function execute() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var model = this.editor.model;\n      var document = model.document;\n      model.change(function (writer) {\n        var blocks = (options.selection || document.selection).getSelectedBlocks();\n        var _iterator = _createForOfIteratorHelper(blocks),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var block = _step.value;\n            if (!block.is('paragraph') && checkCanBecomeParagraph(block, model.schema)) {\n              writer.rename(block, 'paragraph');\n            }\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      });\n    }\n  }]);\n}(Command); // Checks whether the given block can be replaced by a paragraph.\n//\n// @private\n// @param {module:engine/model/element~Element} block A block to be tested.\n// @param {module:engine/model/schema~Schema} schema The schema of the document.\n// @returns {Boolean}\nexport { ParagraphCommand as default };\nfunction checkCanBecomeParagraph(block, schema) {\n  return schema.checkChild(block.parent, 'paragraph') && !schema.isObject(block);\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module remove-format/removeformat\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport RemoveFormatUI from './removeformatui';\nimport RemoveFormatEditing from './removeformatediting';\n\n/**\n * The remove format plugin.\n *\n * This is a \"glue\" plugin which loads the {@link module:remove-format/removeformatediting~RemoveFormatEditing}\n * and {@link module:remove-format/removeformatui~RemoveFormatUI} plugins.\n *\n * For a detailed overview, check out the {@glink features/remove-format remove format} feature documentation.\n *\n * @extends module:core/plugin~Plugin\n */\nvar RemoveFormat = /*#__PURE__*/function (_Plugin) {\n  function RemoveFormat() {\n    _classCallCheck(this, RemoveFormat);\n    return _callSuper(this, RemoveFormat, arguments);\n  }\n  _inherits(RemoveFormat, _Plugin);\n  return _createClass(RemoveFormat, null, [{\n    key: \"requires\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return [RemoveFormatEditing, RemoveFormatUI];\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"pluginName\",\n    get: function get() {\n      return 'RemoveFormat';\n    }\n  }]);\n}(Plugin);\nexport { RemoveFormat as default };","import _slicedToArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport _regenerator from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regenerator.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module remove-format/removeformatcommand\n */\n\nimport Command from '@ckeditor/ckeditor5-core/src/command';\nimport first from '@ckeditor/ckeditor5-utils/src/first';\n\n/**\n * The remove format command.\n *\n * It is used by the {@link module:remove-format/removeformat~RemoveFormat remove format feature}\n * to clear the formatting in the selection.\n *\n *\t\teditor.execute( 'removeFormat' );\n *\n * @extends module:core/command~Command\n */\nvar RemoveFormatCommand = /*#__PURE__*/function (_Command) {\n  function RemoveFormatCommand() {\n    _classCallCheck(this, RemoveFormatCommand);\n    return _callSuper(this, RemoveFormatCommand, arguments);\n  }\n  _inherits(RemoveFormatCommand, _Command);\n  return _createClass(RemoveFormatCommand, [{\n    key: \"refresh\",\n    value:\n    /**\n     * @inheritDoc\n     */\n    function refresh() {\n      var model = this.editor.model;\n      this.isEnabled = !!first(this._getFormattingItems(model.document.selection, model.schema));\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"execute\",\n    value: function execute() {\n      var _this = this;\n      var model = this.editor.model;\n      var schema = model.schema;\n      model.change(function (writer) {\n        var _iterator = _createForOfIteratorHelper(_this._getFormattingItems(model.document.selection, schema)),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var item = _step.value;\n            if (item.is('selection')) {\n              var _iterator2 = _createForOfIteratorHelper(_this._getFormattingAttributes(item, schema)),\n                _step2;\n              try {\n                for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n                  var attributeName = _step2.value;\n                  writer.removeSelectionAttribute(attributeName);\n                }\n              } catch (err) {\n                _iterator2.e(err);\n              } finally {\n                _iterator2.f();\n              }\n            } else {\n              // Workaround for items with multiple removable attributes. See\n              // https://github.com/ckeditor/ckeditor5-remove-format/pull/1#pullrequestreview-220515609\n              var itemRange = writer.createRangeOn(item);\n              var _iterator3 = _createForOfIteratorHelper(_this._getFormattingAttributes(item, schema)),\n                _step3;\n              try {\n                for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n                  var _attributeName = _step3.value;\n                  writer.removeAttribute(_attributeName, itemRange);\n                }\n              } catch (err) {\n                _iterator3.e(err);\n              } finally {\n                _iterator3.f();\n              }\n            }\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      });\n    }\n\n    /**\n     * Returns an iterable of items in a selection (including the selection itself) that have formatting model\n     * attributes to be removed by the feature.\n     *\n     * @protected\n     * @param {module:engine/model/documentselection~DocumentSelection} selection\n     * @param {module:engine/model/schema~Schema} schema The schema describing the item.\n     * @returns {Iterable.<module:engine/model/item~Item>|Iterable.<module:engine/model/documentselection~DocumentSelection>}\n     */\n  }, {\n    key: \"_getFormattingItems\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function _getFormattingItems(selection, schema) {\n      var _this2 = this;\n      var itemHasRemovableFormatting, _iterator4, _step4, curRange, _iterator5, _step5, item, _t, _t2;\n      return _regenerator().w(function (_context) {\n        while (1) switch (_context.p = _context.n) {\n          case 0:\n            itemHasRemovableFormatting = function itemHasRemovableFormatting(item) {\n              return !!first(_this2._getFormattingAttributes(item, schema));\n            };\n            _iterator4 = _createForOfIteratorHelper(selection.getRanges());\n            _context.p = 1;\n            _iterator4.s();\n          case 2:\n            if ((_step4 = _iterator4.n()).done) {\n              _context.n = 10;\n              break;\n            }\n            curRange = _step4.value;\n            _iterator5 = _createForOfIteratorHelper(curRange.getItems());\n            _context.p = 3;\n            _iterator5.s();\n          case 4:\n            if ((_step5 = _iterator5.n()).done) {\n              _context.n = 6;\n              break;\n            }\n            item = _step5.value;\n            if (!itemHasRemovableFormatting(item)) {\n              _context.n = 5;\n              break;\n            }\n            _context.n = 5;\n            return item;\n          case 5:\n            _context.n = 4;\n            break;\n          case 6:\n            _context.n = 8;\n            break;\n          case 7:\n            _context.p = 7;\n            _t = _context.v;\n            _iterator5.e(_t);\n          case 8:\n            _context.p = 8;\n            _iterator5.f();\n            return _context.f(8);\n          case 9:\n            _context.n = 2;\n            break;\n          case 10:\n            _context.n = 12;\n            break;\n          case 11:\n            _context.p = 11;\n            _t2 = _context.v;\n            _iterator4.e(_t2);\n          case 12:\n            _context.p = 12;\n            _iterator4.f();\n            return _context.f(12);\n          case 13:\n            if (!itemHasRemovableFormatting(selection)) {\n              _context.n = 14;\n              break;\n            }\n            _context.n = 14;\n            return selection;\n          case 14:\n            return _context.a(2);\n        }\n      }, _getFormattingItems, null, [[3, 7, 8, 9], [1, 11, 12, 13]]);\n    })\n    /**\n     * Returns an iterable of formatting attributes of a given model item.\n     *\n     * **Note:** Formatting items have the `isFormatting` property set to `true`.\n     *\n     * @protected\n     * @param {module:engine/model/item~Item|module:engine/model/documentselection~DocumentSelection} item\n     * @param {module:engine/model/schema~Schema} schema The schema describing the item.\n     * @returns {Iterable.<String>} The names of formatting attributes found in a given item.\n     */\n  }, {\n    key: \"_getFormattingAttributes\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function _getFormattingAttributes(item, schema) {\n      var _iterator6, _step6, _step6$value, attributeName, attributeProperties, _t3;\n      return _regenerator().w(function (_context2) {\n        while (1) switch (_context2.p = _context2.n) {\n          case 0:\n            _iterator6 = _createForOfIteratorHelper(item.getAttributes());\n            _context2.p = 1;\n            _iterator6.s();\n          case 2:\n            if ((_step6 = _iterator6.n()).done) {\n              _context2.n = 4;\n              break;\n            }\n            _step6$value = _slicedToArray(_step6.value, 1), attributeName = _step6$value[0];\n            attributeProperties = schema.getAttributeProperties(attributeName);\n            if (!(attributeProperties && attributeProperties.isFormatting)) {\n              _context2.n = 3;\n              break;\n            }\n            _context2.n = 3;\n            return attributeName;\n          case 3:\n            _context2.n = 2;\n            break;\n          case 4:\n            _context2.n = 6;\n            break;\n          case 5:\n            _context2.p = 5;\n            _t3 = _context2.v;\n            _iterator6.e(_t3);\n          case 6:\n            _context2.p = 6;\n            _iterator6.f();\n            return _context2.f(6);\n          case 7:\n            return _context2.a(2);\n        }\n      }, _getFormattingAttributes, null, [[1, 5, 6, 7]]);\n    })\n  }]);\n}(Command);\nexport { RemoveFormatCommand as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module remove-format/removeformatediting\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport RemoveFormatCommand from './removeformatcommand';\n\n/**\n * The remove format editing plugin.\n *\n * It registers the {@link module:remove-format/removeformatcommand~RemoveFormatCommand removeFormat} command.\n *\n * @extends module:core/plugin~Plugin\n */\nvar RemoveFormatEditing = /*#__PURE__*/function (_Plugin) {\n  function RemoveFormatEditing() {\n    _classCallCheck(this, RemoveFormatEditing);\n    return _callSuper(this, RemoveFormatEditing, arguments);\n  }\n  _inherits(RemoveFormatEditing, _Plugin);\n  return _createClass(RemoveFormatEditing, [{\n    key: \"init\",\n    value:\n    /**\n     * @inheritDoc\n     */\n    function init() {\n      var editor = this.editor;\n      editor.commands.add('removeFormat', new RemoveFormatCommand(editor));\n    }\n  }], [{\n    key: \"pluginName\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return 'RemoveFormatEditing';\n    }\n  }]);\n}(Plugin);\nexport { RemoveFormatEditing as default };","import _classCallCheck from '/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js';\nimport _createClass from '/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js';\nimport _callSuper from '/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js';\nimport _inherits from '/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js';\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module remove-format/removeformatui\n */\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview';\nimport removeFormatIcon from '../theme/icons/remove-format.svg';\nvar REMOVE_FORMAT = 'removeFormat';\n/**\n * The remove format UI plugin. It registers the `'removeFormat'` button which can be\n * used in the toolbar.\n *\n * @extends module:core/plugin~Plugin\n */\nvar RemoveFormatUI = /*#__PURE__*/\nfunction (_Plugin) {\n    function RemoveFormatUI() {\n        _classCallCheck(this, RemoveFormatUI);\n        return _callSuper(this, RemoveFormatUI, arguments);\n    }\n    _inherits(RemoveFormatUI, _Plugin);\n    return _createClass(RemoveFormatUI, [{\n            key: 'init',\n            value: /**\n     * @inheritDoc\n     */\n            function init() {\n                var _this = this;\n                var editor = this.editor;\n                var t = editor.t;\n                editor.ui.componentFactory.add(REMOVE_FORMAT, function (locale) {\n                    var command = editor.commands.get(REMOVE_FORMAT);\n                    var view = new ButtonView(locale);\n                    view.set({\n                        label: t('Remove Format'),\n                        icon: removeFormatIcon,\n                        tooltip: true\n                    });\n                    view.bind('isOn', 'isEnabled').to(command, 'value', 'isEnabled');\n                    // Execute the command.\n                    _this.listenTo(view, 'execute', function () {\n                        return editor.execute(REMOVE_FORMAT);\n                    });\n                    return view;\n                });\n            }\n        }], [{\n            key: 'pluginName',\n            get: /**\n     * @inheritDoc\n     */\n            function get() {\n                return 'RemoveFormatUI';\n            }\n        }]);\n}(Plugin);\nexport {\n    RemoveFormatUI as default\n};","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M8.69 14.915c.053.052.173.083.36.093a.366.366 0 0 1 .345.485l-.003.01a.738.738 0 0 1-.697.497h-2.67a.374.374 0 0 1-.353-.496l.013-.038a.681.681 0 0 1 .644-.458c.197-.012.325-.043.386-.093a.28.28 0 0 0 .072-.11L9.592 4.5H6.269c-.359-.017-.609.013-.75.09-.142.078-.289.265-.442.563-.192.29-.516.464-.864.464H4.17a.43.43 0 0 1-.407-.569L4.46 3h13.08l-.62 2.043a.81.81 0 0 1-.775.574h-.114a.486.486 0 0 1-.486-.486c.001-.284-.054-.464-.167-.54-.112-.076-.367-.106-.766-.091h-3.28l-2.68 10.257c-.006.074.007.127.038.158zM3 17h8a.5.5 0 1 1 0 1H3a.5.5 0 1 1 0-1zm11.299 1.17a.75.75 0 1 1-1.06-1.06l1.414-1.415-1.415-1.414a.75.75 0 0 1 1.06-1.06l1.415 1.414 1.414-1.415a.75.75 0 1 1 1.06 1.06l-1.413 1.415 1.414 1.415a.75.75 0 0 1-1.06 1.06l-1.415-1.414-1.414 1.414z\\\"/></svg>\"","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.push.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module typing/delete\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport DeleteCommand from './deletecommand';\nimport DeleteObserver from './deleteobserver';\nimport env from '@ckeditor/ckeditor5-utils/src/env';\n\n/**\n * The delete and backspace feature. Handles the <kbd>Delete</kbd> and <kbd>Backspace</kbd> keys in the editor.\n *\n * @extends module:core/plugin~Plugin\n */\nvar Delete = /*#__PURE__*/function (_Plugin) {\n  function Delete() {\n    _classCallCheck(this, Delete);\n    return _callSuper(this, Delete, arguments);\n  }\n  _inherits(Delete, _Plugin);\n  return _createClass(Delete, [{\n    key: \"init\",\n    value: function init() {\n      var editor = this.editor;\n      var view = editor.editing.view;\n      var viewDocument = view.document;\n      view.addObserver(DeleteObserver);\n      editor.commands.add('forwardDelete', new DeleteCommand(editor, 'forward'));\n      editor.commands.add('delete', new DeleteCommand(editor, 'backward'));\n      this.listenTo(viewDocument, 'delete', function (evt, data) {\n        var deleteCommandParams = {\n          unit: data.unit,\n          sequence: data.sequence\n        };\n\n        // If a specific (view) selection to remove was set, convert it to a model selection and set as a parameter for `DeleteCommand`.\n        if (data.selectionToRemove) {\n          var modelSelection = editor.model.createSelection();\n          var ranges = [];\n          var _iterator = _createForOfIteratorHelper(data.selectionToRemove.getRanges()),\n            _step;\n          try {\n            for (_iterator.s(); !(_step = _iterator.n()).done;) {\n              var viewRange = _step.value;\n              ranges.push(editor.editing.mapper.toModelRange(viewRange));\n            }\n          } catch (err) {\n            _iterator.e(err);\n          } finally {\n            _iterator.f();\n          }\n          modelSelection.setTo(ranges);\n          deleteCommandParams.selection = modelSelection;\n        }\n        editor.execute(data.direction == 'forward' ? 'forwardDelete' : 'delete', deleteCommandParams);\n        data.preventDefault();\n        view.scrollToTheSelection();\n      });\n\n      // Android IMEs have a quirk - they change DOM selection after the input changes were performed by the browser.\n      // This happens on `keyup` event. Android doesn't know anything about our deletion and selection handling. Even if the selection\n      // was changed during input events, IME remembers the position where the selection \"should\" be placed and moves it there.\n      //\n      // To prevent incorrect selection, we save the selection after deleting here and then re-set it on `keyup`. This has to be done\n      // on DOM selection level, because on `keyup` the model selection is still the same as it was just after deletion, so it\n      // wouldn't be changed and the fix would do nothing.\n      //\n      if (env.isAndroid) {\n        var domSelectionAfterDeletion = null;\n        this.listenTo(viewDocument, 'delete', function (evt, data) {\n          var domSelection = data.domTarget.ownerDocument.defaultView.getSelection();\n          domSelectionAfterDeletion = {\n            anchorNode: domSelection.anchorNode,\n            anchorOffset: domSelection.anchorOffset,\n            focusNode: domSelection.focusNode,\n            focusOffset: domSelection.focusOffset\n          };\n        }, {\n          priority: 'lowest'\n        });\n        this.listenTo(viewDocument, 'keyup', function (evt, data) {\n          if (domSelectionAfterDeletion) {\n            var domSelection = data.domTarget.ownerDocument.defaultView.getSelection();\n            domSelection.collapse(domSelectionAfterDeletion.anchorNode, domSelectionAfterDeletion.anchorOffset);\n            domSelection.extend(domSelectionAfterDeletion.focusNode, domSelectionAfterDeletion.focusOffset);\n            domSelectionAfterDeletion = null;\n          }\n        });\n      }\n    }\n  }], [{\n    key: \"pluginName\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return 'Delete';\n    }\n  }]);\n}(Plugin);\nexport { Delete as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module typing/deletecommand\n */\n\nimport Command from '@ckeditor/ckeditor5-core/src/command';\nimport count from '@ckeditor/ckeditor5-utils/src/count';\nimport ChangeBuffer from './utils/changebuffer';\n\n/**\n * The delete command. Used by the {@link module:typing/delete~Delete delete feature} to handle the <kbd>Delete</kbd> and\n * <kbd>Backspace</kbd> keys.\n *\n * @extends module:core/command~Command\n */\nvar DeleteCommand = /*#__PURE__*/function (_Command) {\n  /**\n   * Creates an instance of the command.\n   *\n   * @param {module:core/editor/editor~Editor} editor\n   * @param {'forward'|'backward'} direction The directionality of the delete describing in what direction it\n   * should consume the content when the selection is collapsed.\n   */\n  function DeleteCommand(editor, direction) {\n    var _this;\n    _classCallCheck(this, DeleteCommand);\n    _this = _callSuper(this, DeleteCommand, [editor]);\n\n    /**\n     * The directionality of the delete describing in what direction it should\n     * consume the content when the selection is collapsed.\n     *\n     * @readonly\n     * @member {'forward'|'backward'} #direction\n     */\n    _this.direction = direction;\n\n    /**\n     * Delete's change buffer used to group subsequent changes into batches.\n     *\n     * @readonly\n     * @private\n     * @member {typing.ChangeBuffer} #buffer\n     */\n    _this._buffer = new ChangeBuffer(editor.model, editor.config.get('typing.undoStep'));\n    return _this;\n  }\n\n  /**\n   * The current change buffer.\n   *\n   * @type {module:typing/utils/changebuffer~ChangeBuffer}\n   */\n  _inherits(DeleteCommand, _Command);\n  return _createClass(DeleteCommand, [{\n    key: \"buffer\",\n    get: function get() {\n      return this._buffer;\n    }\n\n    /**\n     * Executes the delete command. Depending on whether the selection is collapsed or not, deletes its content\n     * or a piece of content in the {@link #direction defined direction}.\n     *\n     * @fires execute\n     * @param {Object} [options] The command options.\n     * @param {'character'} [options.unit='character'] See {@link module:engine/model/utils/modifyselection~modifySelection}'s options.\n     * @param {Number} [options.sequence=1] A number describing which subsequent delete event it is without the key being released.\n     * See the {@link module:engine/view/document~Document#event:delete} event data.\n     * @param {module:engine/model/selection~Selection} [options.selection] Selection to remove. If not set, current model selection\n     * will be used.\n     */\n  }, {\n    key: \"execute\",\n    value: function execute() {\n      var _this2 = this;\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var model = this.editor.model;\n      var doc = model.document;\n      model.enqueueChange(this._buffer.batch, function (writer) {\n        _this2._buffer.lock();\n        var selection = writer.createSelection(options.selection || doc.selection);\n\n        // Do not replace the whole selected content if selection was collapsed.\n        // This prevents such situation:\n        //\n        // <h1></h1><p>[]</p>\t-->  <h1>[</h1><p>]</p> \t\t-->  <p></p>\n        // starting content\t\t-->   after `modifySelection`\t-->  after `deleteContent`.\n        var doNotResetEntireContent = selection.isCollapsed;\n\n        // Try to extend the selection in the specified direction.\n        if (selection.isCollapsed) {\n          model.modifySelection(selection, {\n            direction: _this2.direction,\n            unit: options.unit\n          });\n        }\n\n        // Check if deleting in an empty editor. See #61.\n        if (_this2._shouldEntireContentBeReplacedWithParagraph(options.sequence || 1)) {\n          _this2._replaceEntireContentWithParagraph(writer);\n          return;\n        }\n\n        // If selection is still collapsed, then there's nothing to delete.\n        if (selection.isCollapsed) {\n          return;\n        }\n        var changeCount = 0;\n        selection.getFirstRange().getMinimalFlatRanges().forEach(function (range) {\n          changeCount += count(range.getWalker({\n            singleCharacters: true,\n            ignoreElementEnd: true,\n            shallow: true\n          }));\n        });\n        model.deleteContent(selection, {\n          doNotResetEntireContent: doNotResetEntireContent\n        });\n        _this2._buffer.input(changeCount);\n        writer.setSelection(selection);\n        _this2._buffer.unlock();\n      });\n    }\n\n    /**\n     * If the user keeps <kbd>Backspace</kbd> or <kbd>Delete</kbd> key pressed, the content of the current\n     * editable will be cleared. However, this will not yet lead to resetting the remaining block to a paragraph\n     * (which happens e.g. when the user does <kbd>Ctrl</kbd> + <kbd>A</kbd>, <kbd>Backspace</kbd>).\n     *\n     * But, if the user pressed the key in an empty editable for the first time,\n     * we want to replace the entire content with a paragraph if:\n     *\n     * * the current limit element is empty,\n     * * the paragraph is allowed in the limit element,\n     * * the limit doesn't already have a paragraph inside.\n     *\n     * See https://github.com/ckeditor/ckeditor5-typing/issues/61.\n     *\n     * @private\n     * @param {Number} sequence A number describing which subsequent delete event it is without the key being released.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"_shouldEntireContentBeReplacedWithParagraph\",\n    value: function _shouldEntireContentBeReplacedWithParagraph(sequence) {\n      // Does nothing if user pressed and held the \"Backspace\" or \"Delete\" key.\n      if (sequence > 1) {\n        return false;\n      }\n      var model = this.editor.model;\n      var doc = model.document;\n      var selection = doc.selection;\n      var limitElement = model.schema.getLimitElement(selection);\n\n      // If a collapsed selection contains the whole content it means that the content is empty\n      // (from the user perspective).\n      var limitElementIsEmpty = selection.isCollapsed && selection.containsEntireContent(limitElement);\n      if (!limitElementIsEmpty) {\n        return false;\n      }\n      if (!model.schema.checkChild(limitElement, 'paragraph')) {\n        return false;\n      }\n      var limitElementFirstChild = limitElement.getChild(0);\n\n      // Does nothing if the limit element already contains only a paragraph.\n      // We ignore the case when paragraph might have some inline elements (<p><inlineWidget>[]</inlineWidget></p>)\n      // because we don't support such cases yet and it's unclear whether inlineWidget shouldn't be a limit itself.\n      if (limitElementFirstChild && limitElementFirstChild.name === 'paragraph') {\n        return false;\n      }\n      return true;\n    }\n\n    /**\n     * The entire content is replaced with the paragraph. Selection is moved inside the paragraph.\n     *\n     * @private\n     */\n  }, {\n    key: \"_replaceEntireContentWithParagraph\",\n    value: function _replaceEntireContentWithParagraph(writer) {\n      var model = this.editor.model;\n      var doc = model.document;\n      var selection = doc.selection;\n      var limitElement = model.schema.getLimitElement(selection);\n      var paragraph = writer.createElement('paragraph');\n      writer.remove(writer.createRangeIn(limitElement));\n      writer.insert(paragraph, limitElement);\n      writer.setSelection(paragraph, 0);\n    }\n  }]);\n}(Command);\nexport { DeleteCommand as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.number.constructor.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module typing/deleteobserver\n */\n\nimport Observer from '@ckeditor/ckeditor5-engine/src/view/observer/observer';\nimport DomEventData from '@ckeditor/ckeditor5-engine/src/view/observer/domeventdata';\nimport { keyCodes } from '@ckeditor/ckeditor5-utils/src/keyboard';\nimport env from '@ckeditor/ckeditor5-utils/src/env';\n\n/**\n * Delete observer introduces the {@link module:engine/view/document~Document#event:delete} event.\n *\n * @extends module:engine/view/observer/observer~Observer\n */\nvar DeleteObserver = /*#__PURE__*/function (_Observer) {\n  function DeleteObserver(view) {\n    var _this;\n    _classCallCheck(this, DeleteObserver);\n    _this = _callSuper(this, DeleteObserver, [view]);\n    var document = view.document;\n    var sequence = 0;\n    document.on('keyup', function (evt, data) {\n      if (data.keyCode == keyCodes.delete || data.keyCode == keyCodes.backspace) {\n        sequence = 0;\n      }\n    });\n    document.on('keydown', function (evt, data) {\n      var deleteData = {};\n      if (data.keyCode == keyCodes.delete) {\n        deleteData.direction = 'forward';\n        deleteData.unit = 'character';\n      } else if (data.keyCode == keyCodes.backspace) {\n        deleteData.direction = 'backward';\n        deleteData.unit = 'codePoint';\n      } else {\n        return;\n      }\n      var hasWordModifier = env.isMac ? data.altKey : data.ctrlKey;\n      deleteData.unit = hasWordModifier ? 'word' : deleteData.unit;\n      deleteData.sequence = ++sequence;\n      fireViewDeleteEvent(evt, data.domEvent, deleteData);\n    });\n\n    // `beforeinput` is handled only for Android devices. Desktop Chrome and iOS are skipped because they are working fine now.\n    if (env.isAndroid) {\n      document.on('beforeinput', function (evt, data) {\n        // If event type is other than `deleteContentBackward` then this is not deleting.\n        if (data.domEvent.inputType != 'deleteContentBackward') {\n          return;\n        }\n        var deleteData = {\n          unit: 'codepoint',\n          direction: 'backward',\n          sequence: 1\n        };\n\n        // Android IMEs may change the DOM selection on `beforeinput` event so that the selection contains all the text\n        // that the IME wants to remove. We will pass this information to `delete` event so proper part of the content is removed.\n        //\n        // Sometimes it is only expanding by a one character (in case of collapsed selection). In this case we don't need to\n        // set a different selection to remove, it will work just fine.\n        var domSelection = data.domTarget.ownerDocument.defaultView.getSelection();\n        if (domSelection.anchorNode == domSelection.focusNode && domSelection.anchorOffset + 1 != domSelection.focusOffset) {\n          deleteData.selectionToRemove = view.domConverter.domSelectionToView(domSelection);\n        }\n        fireViewDeleteEvent(evt, data.domEvent, deleteData);\n      });\n    }\n    function fireViewDeleteEvent(originalEvent, domEvent, deleteData) {\n      // Save the event object to check later if it was stopped or not.\n      var event;\n      document.once('delete', function (evt) {\n        return event = evt;\n      }, {\n        priority: Number.POSITIVE_INFINITY\n      });\n      document.fire('delete', new DomEventData(document, domEvent, deleteData));\n\n      // Stop the original event if `delete` event was stopped.\n      // https://github.com/ckeditor/ckeditor5/issues/753\n      if (event && event.stop.called) {\n        originalEvent.stop();\n      }\n    }\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(DeleteObserver, _Observer);\n  return _createClass(DeleteObserver, [{\n    key: \"observe\",\n    value: function observe() {}\n  }]);\n}(Observer);\n/**\n * Event fired when the user tries to delete content (e.g. presses <kbd>Delete</kbd> or <kbd>Backspace</kbd>).\n *\n * Note: This event is fired by the {@link module:typing/deleteobserver~DeleteObserver observer}\n * (usually registered by the {@link module:typing/delete~Delete delete feature}).\n *\n * @event module:engine/view/document~Document#event:delete\n * @param {module:engine/view/observer/domeventdata~DomEventData} data\n * @param {'forward'|'delete'} data.direction The direction in which the deletion should happen.\n * @param {'character'|'word'} data.unit The \"amount\" of content that should be deleted.\n * @param {Number} data.sequence A number describing which subsequent delete event it is without the key being released.\n * If it's 2 or more it means that the key was pressed and hold.\n * @param {module:engine/view/selection~Selection} [data.selectionToRemove] View selection which content should be removed. If not set,\n * current selection should be used.\n */\nexport { DeleteObserver as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module typing/input\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport InputCommand from './inputcommand';\nimport injectUnsafeKeystrokesHandling from './utils/injectunsafekeystrokeshandling';\nimport injectTypingMutationsHandling from './utils/injecttypingmutationshandling';\n\n/**\n * Handles text input coming from the keyboard or other input methods.\n *\n * @extends module:core/plugin~Plugin\n */\nvar Input = /*#__PURE__*/function (_Plugin) {\n  function Input() {\n    _classCallCheck(this, Input);\n    return _callSuper(this, Input, arguments);\n  }\n  _inherits(Input, _Plugin);\n  return _createClass(Input, [{\n    key: \"init\",\n    value:\n    /**\n     * @inheritDoc\n     */\n    function init() {\n      var editor = this.editor;\n\n      // TODO The above default configuration value should be defined using editor.config.define() once it's fixed.\n      var inputCommand = new InputCommand(editor, editor.config.get('typing.undoStep') || 20);\n      editor.commands.add('input', inputCommand);\n      injectUnsafeKeystrokesHandling(editor);\n      injectTypingMutationsHandling(editor);\n    }\n\n    /**\n     * Checks batch if it is a result of user input - e.g. typing.\n     *\n     *\t\tconst input = editor.plugins.get( 'Input' );\n     *\n     *\t\teditor.model.document.on( 'change:data', ( evt, batch ) => {\n     *\t\t\tif ( input.isTyping( batch ) ) {\n     *\t\t\t\tconsole.log( 'The user typed something...' );\n     *\t\t\t}\n     *\t\t} );\n     *\n     * **Note:** This method checks if the batch was created using {@link module:typing/inputcommand~InputCommand 'input'}\n     * command as typing changes coming from user input are inserted to the document using that command.\n     *\n     * @param {module:engine/model/batch~Batch} batch A batch to check.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"isInput\",\n    value: function isInput(batch) {\n      var inputCommand = this.editor.commands.get('input');\n      return inputCommand._batches.has(batch);\n    }\n  }], [{\n    key: \"pluginName\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return 'Input';\n    }\n  }]);\n}(Plugin);\nexport { Input as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-set.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module typing/inputcommand\n */\n\nimport Command from '@ckeditor/ckeditor5-core/src/command';\nimport ChangeBuffer from './utils/changebuffer';\n\n/**\n * The input command. Used by the {@link module:typing/input~Input input feature} to handle typing.\n *\n * @extends module:core/command~Command\n */\nvar InputCommand = /*#__PURE__*/function (_Command) {\n  /**\n   * Creates an instance of the command.\n   *\n   * @param {module:core/editor/editor~Editor} editor\n   * @param {Number} undoStepSize The maximum number of atomic changes\n   * which can be contained in one batch in the command buffer.\n   */\n  function InputCommand(editor, undoStepSize) {\n    var _this;\n    _classCallCheck(this, InputCommand);\n    _this = _callSuper(this, InputCommand, [editor]);\n\n    /**\n     * Typing's change buffer used to group subsequent changes into batches.\n     *\n     * @readonly\n     * @private\n     * @member {module:typing/utils/changebuffer~ChangeBuffer} #_buffer\n     */\n    _this._buffer = new ChangeBuffer(editor.model, undoStepSize);\n\n    /**\n     * Stores batches created by the input command. The batches are used to differentiate input batches from other batches using\n     * {@link module:typing/input~Input#isInput} method.\n     *\n     * @type {WeakSet<module:engine/model/batch~Batch>}\n     * @protected\n     */\n    _this._batches = new WeakSet();\n    return _this;\n  }\n\n  /**\n   * The current change buffer.\n   *\n   * @type {module:typing/utils/changebuffer~ChangeBuffer}\n   */\n  _inherits(InputCommand, _Command);\n  return _createClass(InputCommand, [{\n    key: \"buffer\",\n    get: function get() {\n      return this._buffer;\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _superPropGet(InputCommand, \"destroy\", this, 3)([]);\n      this._buffer.destroy();\n    }\n\n    /**\n     * Executes the input command. It replaces the content within the given range with the given text.\n     * Replacing is a two step process, first the content within the range is removed and then the new text is inserted\n     * at the beginning of the range (which after the removal is a collapsed range).\n     *\n     * @fires execute\n     * @param {Object} [options] The command options.\n     * @param {String} [options.text=''] The text to be inserted.\n     * @param {module:engine/model/range~Range} [options.range] The range in which the text is inserted. Defaults\n     * to the first range in the current selection.\n     * @param {module:engine/model/range~Range} [options.resultRange] The range where the selection\n     * should be placed after the insertion. If not specified, the selection will be placed right after\n     * the inserted text.\n     */\n  }, {\n    key: \"execute\",\n    value: function execute() {\n      var _this2 = this;\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var model = this.editor.model;\n      var doc = model.document;\n      var text = options.text || '';\n      var textInsertions = text.length;\n      var range = options.range || doc.selection.getFirstRange();\n      var resultRange = options.resultRange;\n      model.enqueueChange(this._buffer.batch, function (writer) {\n        var isCollapsedRange = range.isCollapsed;\n        _this2._buffer.lock();\n        model.deleteContent(model.createSelection(range));\n        if (text) {\n          model.insertContent(writer.createText(text, doc.selection.getAttributes()), range.start);\n        }\n        if (resultRange) {\n          writer.setSelection(resultRange);\n        } else if (isCollapsedRange) {\n          // If range was collapsed just shift the selection by the number of inserted characters.\n          writer.setSelection(range.start.getShiftedBy(textInsertions));\n        }\n        _this2._buffer.unlock();\n        _this2._buffer.input(textInsertions);\n\n        // Store the batch as an 'input' batch for the Input.isInput( batch ) check.\n        _this2._batches.add(_this2._buffer.batch);\n      });\n    }\n  }]);\n}(Command);\nexport { InputCommand as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module typing/typing\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport Input from './input';\nimport Delete from './delete';\n\n/**\n * The typing feature. It handles typing.\n *\n * This is a \"glue\" plugin which loads the {@link module:typing/input~Input} and {@link module:typing/delete~Delete}\n * plugins.\n *\n * @extends module:core/plugin~Plugin\n */\nvar Typing = /*#__PURE__*/function (_Plugin) {\n  function Typing() {\n    _classCallCheck(this, Typing);\n    return _callSuper(this, Typing, arguments);\n  }\n  _inherits(Typing, _Plugin);\n  return _createClass(Typing, null, [{\n    key: \"requires\",\n    get: function get() {\n      return [Input, Delete];\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"pluginName\",\n    get: function get() {\n      return 'Typing';\n    }\n  }]);\n}(Plugin);\n/**\n * The configuration of the typing features. Used by the features from the `@ckeditor/ckeditor5-typing` package.\n *\n * Read more in {@link module:typing/typing~TypingConfig}.\n *\n * @member {module:typing/typing~TypingConfig} module:core/editor/editorconfig~EditorConfig#typing\n */\n/**\n * The configuration of the typing features. Used by the typing features in `@ckeditor/ckeditor5-typing` package.\n *\n *\t\tClassicEditor\n *\t\t\t.create( editorElement, {\n * \t\t\t\ttyping: ... // Typing feature options.\n *\t\t\t} )\n *\t\t\t.then( ... )\n *\t\t\t.catch( ... );\n *\n * See {@link module:core/editor/editorconfig~EditorConfig all editor options}.\n *\n * @interface TypingConfig\n */\n/**\n * The granularity of undo/redo for typing and deleting. The value `20` means (more or less) that a new undo step\n * is created every 20 characters are inserted or deleted.\n *\n * @member {Number} [module:typing/typing~TypingConfig#undoStep=20]\n */\nexport { Typing as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module typing/utils/changebuffer\n */\n/**\n * Change buffer allows to group atomic changes (like characters that have been typed) into\n * {@link module:engine/model/batch~Batch batches}.\n *\n * Batches represent single undo steps, hence changes added to one single batch are undone together.\n *\n * The buffer has a configurable limit of atomic changes that it can accommodate. After the limit was\n * exceeded (see {@link ~ChangeBuffer#input}), a new batch is created in {@link ~ChangeBuffer#batch}.\n *\n * To use the change buffer you need to let it know about the number of changes that were added to the batch:\n *\n *\t\tconst buffer = new ChangeBuffer( model, LIMIT );\n *\n *\t\t// Later on in your feature:\n *\t\tbuffer.batch.insert( pos, insertedCharacters );\n *\t\tbuffer.input( insertedCharacters.length );\n *\n */\nvar ChangeBuffer = /*#__PURE__*/function () {\n  /**\n   * Creates a new instance of the change buffer.\n   *\n   * @param {module:engine/model/model~Model} model\n   * @param {Number} [limit=20] The maximum number of atomic changes which can be contained in one batch.\n   */\n  function ChangeBuffer(model) {\n    var _this = this;\n    var limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20;\n    _classCallCheck(this, ChangeBuffer);\n    /**\n     * The model instance.\n     *\n     * @readonly\n     * @member {module:engine/model/model~Model} #model\n     */\n    this.model = model;\n\n    /**\n     * The number of atomic changes in the buffer. Once it exceeds the {@link #limit},\n     * the {@link #batch batch} is set to a new one.\n     *\n     * @readonly\n     * @member {Number} #size\n     */\n    this.size = 0;\n\n    /**\n     * The maximum number of atomic changes which can be contained in one batch.\n     *\n     * @readonly\n     * @member {Number} #limit\n     */\n    this.limit = limit;\n\n    /**\n     * Whether the buffer is locked. A locked buffer cannot be reset unless it gets unlocked.\n     *\n     * @readonly\n     * @member {Boolean} #isLocked\n     */\n    this.isLocked = false;\n\n    // The function to be called in order to notify the buffer about batches which appeared in the document.\n    // The callback will check whether it is a new batch and in that case the buffer will be flushed.\n    //\n    // The reason why the buffer needs to be flushed whenever a new batch appears is that the changes added afterwards\n    // should be added to a new batch. For instance, when the  user types, then inserts an image, and then types again,\n    // the characters typed after inserting the image should be added to a different batch than the characters typed before.\n    this._changeCallback = function (evt, batch) {\n      if (batch.type != 'transparent' && batch !== _this._batch) {\n        _this._reset(true);\n      }\n    };\n    this._selectionChangeCallback = function () {\n      _this._reset();\n    };\n    this.model.document.on('change', this._changeCallback);\n    this.model.document.selection.on('change:range', this._selectionChangeCallback);\n    this.model.document.selection.on('change:attribute', this._selectionChangeCallback);\n\n    /**\n     * The current batch instance.\n     *\n     * @private\n     * @member #_batch\n     */\n\n    /**\n     * The callback to document the change event which later needs to be removed.\n     *\n     * @private\n     * @member #_changeCallback\n     */\n\n    /**\n     * The callback to document selection `change:attribute` and `change:range` events which resets the buffer.\n     *\n     * @private\n     * @member #_selectionChangeCallback\n     */\n  }\n\n  /**\n   * The current batch to which a feature should add its operations. Once the {@link #size}\n   * is reached or exceeds the {@link #limit}, the batch is set to a new instance and the size is reset.\n   *\n   * @type {module:engine/model/batch~Batch}\n   */\n  return _createClass(ChangeBuffer, [{\n    key: \"batch\",\n    get: function get() {\n      if (!this._batch) {\n        this._batch = this.model.createBatch();\n      }\n      return this._batch;\n    }\n\n    /**\n     * The input number of changes into the buffer. Once the {@link #size} is\n     * reached or exceeds the {@link #limit}, the batch is set to a new instance and the size is reset.\n     *\n     * @param {Number} changeCount The number of atomic changes to input.\n     */\n  }, {\n    key: \"input\",\n    value: function input(changeCount) {\n      this.size += changeCount;\n      if (this.size >= this.limit) {\n        this._reset(true);\n      }\n    }\n\n    /**\n     * Locks the buffer.\n     */\n  }, {\n    key: \"lock\",\n    value: function lock() {\n      this.isLocked = true;\n    }\n\n    /**\n     * Unlocks the buffer.\n     */\n  }, {\n    key: \"unlock\",\n    value: function unlock() {\n      this.isLocked = false;\n    }\n\n    /**\n     * Destroys the buffer.\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.model.document.off('change', this._changeCallback);\n      this.model.document.selection.off('change:range', this._selectionChangeCallback);\n      this.model.document.selection.off('change:attribute', this._selectionChangeCallback);\n    }\n\n    /**\n     * Resets the change buffer.\n     *\n     * @private\n     * @param {Boolean} [ignoreLock] Whether internal lock {@link #isLocked} should be ignored.\n     */\n  }, {\n    key: \"_reset\",\n    value: function _reset(ignoreLock) {\n      if (!this.isLocked || ignoreLock) {\n        this._batch = null;\n        this.size = 0;\n      }\n    }\n  }]);\n}();\nexport { ChangeBuffer as default };","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.find.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.reduce.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.every.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module typing/utils/injecttypingmutationshandling\n */\n\nimport diff from '@ckeditor/ckeditor5-utils/src/diff';\nimport DomConverter from '@ckeditor/ckeditor5-engine/src/view/domconverter';\nimport { getSingleTextNodeChange, containerChildrenMutated } from './utils';\n\n/**\n * Handles mutations caused by normal typing.\n *\n * @param {module:core/editor/editor~Editor} editor The editor instance.\n */\nexport default function injectTypingMutationsHandling(editor) {\n  editor.editing.view.document.on('mutations', function (evt, mutations, viewSelection) {\n    new MutationHandler(editor).handle(mutations, viewSelection);\n  });\n}\n\n/**\n * Helper class for translating DOM mutations into model changes.\n *\n * @private\n */\nvar MutationHandler = /*#__PURE__*/function () {\n  /**\n   * Creates an instance of the mutation handler.\n   *\n   * @param {module:core/editor/editor~Editor} editor\n   */\n  function MutationHandler(editor) {\n    _classCallCheck(this, MutationHandler);\n    /**\n     * Editor instance for which mutations are handled.\n     *\n     * @readonly\n     * @member {module:core/editor/editor~Editor} #editor\n     */\n    this.editor = editor;\n\n    /**\n     * The editing controller.\n     *\n     * @readonly\n     * @member {module:engine/controller/editingcontroller~EditingController} #editing\n     */\n    this.editing = this.editor.editing;\n  }\n\n  /**\n   * Handles given mutations.\n   *\n   * @param {Array.<module:engine/view/observer/mutationobserver~MutatedText|\n   * module:engine/view/observer/mutationobserver~MutatedChildren>} mutations\n   * @param {module:engine/view/selection~Selection|null} viewSelection\n   */\n  return _createClass(MutationHandler, [{\n    key: \"handle\",\n    value: function handle(mutations, viewSelection) {\n      if (containerChildrenMutated(mutations)) {\n        this._handleContainerChildrenMutations(mutations, viewSelection);\n      } else {\n        var _iterator = _createForOfIteratorHelper(mutations),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var mutation = _step.value;\n            // Fortunately it will never be both.\n            this._handleTextMutation(mutation, viewSelection);\n            this._handleTextNodeInsertion(mutation);\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      }\n    }\n\n    /**\n     * Handles situations when container's children mutated during input. This can happen when\n     * the browser is trying to \"fix\" DOM in certain situations. For example, when the user starts to type\n     * in `<p><a href=\"\"><i>Link{}</i></a></p>`, the browser might change the order of elements\n     * to `<p><i><a href=\"\">Link</a>x{}</i></p>`. A similar situation happens when the spell checker\n     * replaces a word wrapped with `<strong>` with a word wrapped with a `<b>` element.\n     *\n     * To handle such situations, the common DOM ancestor of all mutations is converted to the model representation\n     * and then compared with the current model to calculate the proper text change.\n     *\n     * Note: Single text node insertion is handled in {@link #_handleTextNodeInsertion} and text node mutation is handled\n     * in {@link #_handleTextMutation}).\n     *\n     * @private\n     * @param {Array.<module:engine/view/observer/mutationobserver~MutatedText|\n     * module:engine/view/observer/mutationobserver~MutatedChildren>} mutations\n     * @param {module:engine/view/selection~Selection|null} viewSelection\n     */\n  }, {\n    key: \"_handleContainerChildrenMutations\",\n    value: function _handleContainerChildrenMutations(mutations, viewSelection) {\n      // Get common ancestor of all mutations.\n      var mutationsCommonAncestor = getMutationsContainer(mutations);\n\n      // Quit if there is no common ancestor.\n      if (!mutationsCommonAncestor) {\n        return;\n      }\n      var domConverter = this.editor.editing.view.domConverter;\n\n      // Get common ancestor in DOM.\n      var domMutationCommonAncestor = domConverter.mapViewToDom(mutationsCommonAncestor);\n\n      // Create fresh DomConverter so it will not use existing mapping and convert current DOM to model.\n      // This wouldn't be needed if DomConverter would allow to create fresh view without checking any mappings.\n      var freshDomConverter = new DomConverter();\n      var modelFromCurrentDom = this.editor.data.toModel(freshDomConverter.domToView(domMutationCommonAncestor)).getChild(0);\n\n      // Current model.\n      var currentModel = this.editor.editing.mapper.toModelElement(mutationsCommonAncestor);\n\n      // If common ancestor is not mapped, do not do anything. It probably is a parent of another view element.\n      // That means that we would need to diff model elements (see `if` below). Better return early instead of\n      // trying to get a reasonable model ancestor. It will fell into the `if` below anyway.\n      // This situation happens for example for lists. If `<ul>` is a common ancestor, `currentModel` is `undefined`\n      // because `<ul>` is not mapped (`<li>`s are).\n      // See https://github.com/ckeditor/ckeditor5/issues/718.\n      if (!currentModel) {\n        return;\n      }\n\n      // Get children from both ancestors.\n      var modelFromDomChildren = Array.from(modelFromCurrentDom.getChildren());\n      var currentModelChildren = Array.from(currentModel.getChildren());\n\n      // Remove the last `<softBreak>` from the end of `modelFromDomChildren` if there is no `<softBreak>` in current model.\n      // If the described scenario happened, it means that this is a bogus `<br />` added by a browser.\n      var lastDomChild = modelFromDomChildren[modelFromDomChildren.length - 1];\n      var lastCurrentChild = currentModelChildren[currentModelChildren.length - 1];\n      if (lastDomChild && lastDomChild.is('softBreak') && lastCurrentChild && !lastCurrentChild.is('softBreak')) {\n        modelFromDomChildren.pop();\n      }\n      var schema = this.editor.model.schema;\n\n      // Skip situations when common ancestor has any container elements.\n      if (!isSafeForTextMutation(modelFromDomChildren, schema) || !isSafeForTextMutation(currentModelChildren, schema)) {\n        return;\n      }\n\n      // Replace &nbsp; inserted by the browser with normal space. See comment in `_handleTextMutation`.\n      // Replace non-texts with any character. This is potentially dangerous but passes in manual tests. The thing is\n      // that we need to take care of proper indexes so we cannot simply remove non-text elements from the content.\n      // By inserting a character we keep all the real texts on their indexes.\n      var newText = modelFromDomChildren.map(function (item) {\n        return item.is('text') ? item.data : '@';\n      }).join('').replace(/\\u00A0/g, ' ');\n      var oldText = currentModelChildren.map(function (item) {\n        return item.is('text') ? item.data : '@';\n      }).join('').replace(/\\u00A0/g, ' ');\n\n      // Do nothing if mutations created same text.\n      if (oldText === newText) {\n        return;\n      }\n      var diffResult = diff(oldText, newText);\n      var _calculateChanges = calculateChanges(diffResult),\n        firstChangeAt = _calculateChanges.firstChangeAt,\n        insertions = _calculateChanges.insertions,\n        deletions = _calculateChanges.deletions;\n\n      // Try setting new model selection according to passed view selection.\n      var modelSelectionRange = null;\n      if (viewSelection) {\n        modelSelectionRange = this.editing.mapper.toModelRange(viewSelection.getFirstRange());\n      }\n      var insertText = newText.substr(firstChangeAt, insertions);\n      var removeRange = this.editor.model.createRange(this.editor.model.createPositionAt(currentModel, firstChangeAt), this.editor.model.createPositionAt(currentModel, firstChangeAt + deletions));\n      this.editor.execute('input', {\n        text: insertText,\n        range: removeRange,\n        resultRange: modelSelectionRange\n      });\n    }\n\n    /**\n     * @private\n     */\n  }, {\n    key: \"_handleTextMutation\",\n    value: function _handleTextMutation(mutation, viewSelection) {\n      if (mutation.type != 'text') {\n        return;\n      }\n\n      // Replace &nbsp; inserted by the browser with normal space.\n      // We want only normal spaces in the model and in the view. Renderer and DOM Converter will be then responsible\n      // for rendering consecutive spaces using &nbsp;, but the model and the view has to be clear.\n      // Other feature may introduce inserting non-breakable space on specific key stroke (for example shift + space).\n      // However then it will be handled outside of mutations, like enter key is.\n      // The replacing is here because it has to be done before `diff` and `diffToChanges` functions, as they\n      // take `newText` and compare it to (cleaned up) view.\n      // It could also be done in mutation observer too, however if any outside plugin would like to\n      // introduce additional events for mutations, they would get already cleaned up version (this may be good or not).\n      var newText = mutation.newText.replace(/\\u00A0/g, ' ');\n      // To have correct `diffResult`, we also compare view node text data with &nbsp; replaced by space.\n      var oldText = mutation.oldText.replace(/\\u00A0/g, ' ');\n\n      // Do nothing if mutations created same text.\n      if (oldText === newText) {\n        return;\n      }\n      var diffResult = diff(oldText, newText);\n      var _calculateChanges2 = calculateChanges(diffResult),\n        firstChangeAt = _calculateChanges2.firstChangeAt,\n        insertions = _calculateChanges2.insertions,\n        deletions = _calculateChanges2.deletions;\n\n      // Try setting new model selection according to passed view selection.\n      var modelSelectionRange = null;\n      if (viewSelection) {\n        modelSelectionRange = this.editing.mapper.toModelRange(viewSelection.getFirstRange());\n      }\n\n      // Get the position in view and model where the changes will happen.\n      var viewPos = this.editing.view.createPositionAt(mutation.node, firstChangeAt);\n      var modelPos = this.editing.mapper.toModelPosition(viewPos);\n      var removeRange = this.editor.model.createRange(modelPos, modelPos.getShiftedBy(deletions));\n      var insertText = newText.substr(firstChangeAt, insertions);\n      this.editor.execute('input', {\n        text: insertText,\n        range: removeRange,\n        resultRange: modelSelectionRange\n      });\n    }\n\n    /**\n     * @private\n     */\n  }, {\n    key: \"_handleTextNodeInsertion\",\n    value: function _handleTextNodeInsertion(mutation) {\n      if (mutation.type != 'children') {\n        return;\n      }\n      var change = getSingleTextNodeChange(mutation);\n      var viewPos = this.editing.view.createPositionAt(mutation.node, change.index);\n      var modelPos = this.editing.mapper.toModelPosition(viewPos);\n      var insertedText = change.values[0].data;\n      this.editor.execute('input', {\n        // Replace &nbsp; inserted by the browser with normal space.\n        // See comment in `_handleTextMutation`.\n        // In this case we don't need to do this before `diff` because we diff whole nodes.\n        // Just change &nbsp; in case there are some.\n        text: insertedText.replace(/\\u00A0/g, ' '),\n        range: this.editor.model.createRange(modelPos)\n      });\n    }\n  }]);\n}(); // Returns first common ancestor of all mutations that is either {@link module:engine/view/containerelement~ContainerElement}\n// or {@link module:engine/view/rootelement~RootElement}.\n//\n// @private\n// @param {Array.<module:engine/view/observer/mutationobserver~MutatedText|\n// module:engine/view/observer/mutationobserver~MutatedChildren>} mutations\n// @returns {module:engine/view/containerelement~ContainerElement|engine/view/rootelement~RootElement|undefined}\nfunction getMutationsContainer(mutations) {\n  var lca = mutations.map(function (mutation) {\n    return mutation.node;\n  }).reduce(function (commonAncestor, node) {\n    return commonAncestor.getCommonAncestor(node, {\n      includeSelf: true\n    });\n  });\n  if (!lca) {\n    return;\n  }\n\n  // We need to look for container and root elements only, so check all LCA's\n  // ancestors (starting from itself).\n  return lca.getAncestors({\n    includeSelf: true,\n    parentFirst: true\n  }).find(function (element) {\n    return element.is('containerElement') || element.is('rootElement');\n  });\n}\n\n// Returns true if provided array contains content that won't be problematic during diffing and text mutation handling.\n//\n// @param {Array.<module:engine/model/node~Node>} children\n// @param {module:engine/model/schema~Schema} schema\n// @returns {Boolean}\nfunction isSafeForTextMutation(children, schema) {\n  return children.every(function (child) {\n    return schema.isInline(child);\n  });\n}\n\n// Calculates first change index and number of characters that should be inserted and deleted starting from that index.\n//\n// @private\n// @param diffResult\n// @returns {{insertions: number, deletions: number, firstChangeAt: *}}\nfunction calculateChanges(diffResult) {\n  // Index where the first change happens. Used to set the position from which nodes will be removed and where will be inserted.\n  var firstChangeAt = null;\n  // Index where the last change happens. Used to properly count how many characters have to be removed and inserted.\n  var lastChangeAt = null;\n\n  // Get `firstChangeAt` and `lastChangeAt`.\n  for (var i = 0; i < diffResult.length; i++) {\n    var change = diffResult[i];\n    if (change != 'equal') {\n      firstChangeAt = firstChangeAt === null ? i : firstChangeAt;\n      lastChangeAt = i;\n    }\n  }\n\n  // How many characters, starting from `firstChangeAt`, should be removed.\n  var deletions = 0;\n  // How many characters, starting from `firstChangeAt`, should be inserted.\n  var insertions = 0;\n  for (var _i = firstChangeAt; _i <= lastChangeAt; _i++) {\n    // If there is no change (equal) or delete, the character is existing in `oldText`. We count it for removing.\n    if (diffResult[_i] != 'insert') {\n      deletions++;\n    }\n\n    // If there is no change (equal) or insert, the character is existing in `newText`. We count it for inserting.\n    if (diffResult[_i] != 'delete') {\n      insertions++;\n    }\n  }\n  return {\n    insertions: insertions,\n    deletions: deletions,\n    firstChangeAt: firstChangeAt\n  };\n}","import \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.array.push.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module typing/utils/injectunsafekeystrokeshandling\n */\n\nimport { getCode } from '@ckeditor/ckeditor5-utils/src/keyboard';\nimport env from '@ckeditor/ckeditor5-utils/src/env';\n\n/**\n * Handles keystrokes which are unsafe for typing. This handler's logic is explained\n * in https://github.com/ckeditor/ckeditor5-typing/issues/83#issuecomment-398690251.\n *\n * @param {module:core/editor/editor~Editor} editor The editor instance.\n */\nexport default function injectUnsafeKeystrokesHandling(editor) {\n  var latestCompositionSelection = null;\n  var model = editor.model;\n  var view = editor.editing.view;\n  var inputCommand = editor.commands.get('input');\n\n  // For Android, we want to handle keystrokes on `beforeinput` to be sure that code in `DeleteObserver` already had a chance to be fired.\n  if (env.isAndroid) {\n    view.document.on('beforeinput', function (evt, evtData) {\n      return handleUnsafeKeystroke(evtData);\n    }, {\n      priority: 'lowest'\n    });\n  } else {\n    view.document.on('keydown', function (evt, evtData) {\n      return handleUnsafeKeystroke(evtData);\n    }, {\n      priority: 'lowest'\n    });\n  }\n  view.document.on('compositionstart', handleCompositionStart, {\n    priority: 'lowest'\n  });\n  view.document.on('compositionend', function () {\n    latestCompositionSelection = model.createSelection(model.document.selection);\n  }, {\n    priority: 'lowest'\n  });\n\n  // Handles the keydown event. We need to guess whether such keystroke is going to result\n  // in typing. If so, then before character insertion happens, any selected content needs\n  // to be deleted. Otherwise the default browser deletion mechanism would be\n  // triggered, resulting in:\n  //\n  // * Hundreds of mutations which could not be handled.\n  // * But most importantly, loss of control over how the content is being deleted.\n  //\n  // The method is used in a low-priority listener, hence allowing other listeners (e.g. delete or enter features)\n  // to handle the event.\n  //\n  // @param {module:engine/view/observer/keyobserver~KeyEventData} evtData\n  function handleUnsafeKeystroke(evtData) {\n    var doc = model.document;\n    var isComposing = view.document.isComposing;\n    var isSelectionUnchanged = latestCompositionSelection && latestCompositionSelection.isEqual(doc.selection);\n\n    // Reset stored composition selection.\n    latestCompositionSelection = null;\n\n    // By relying on the state of the input command we allow disabling the entire input easily\n    // by just disabling the input command. We could’ve used here the delete command but that\n    // would mean requiring the delete feature which would block loading one without the other.\n    // We could also check the editor.isReadOnly property, but that wouldn't allow to block\n    // the input without blocking other features.\n    if (!inputCommand.isEnabled) {\n      return;\n    }\n    if (isSafeKeystroke(evtData) || doc.selection.isCollapsed) {\n      return;\n    }\n\n    // If during composition, deletion should be prevented as it may remove composed sequence (#83).\n    if (isComposing && evtData.keyCode === 229) {\n      return;\n    }\n\n    // If there is a `keydown` event fired with '229' keycode it might be related\n    // to recent composition. Check if selection is the same as upon ending recent composition,\n    // if so do not remove selected content as it will remove composed sequence (#83).\n    if (!isComposing && evtData.keyCode === 229 && isSelectionUnchanged) {\n      return;\n    }\n    deleteSelectionContent();\n  }\n\n  // Handles the `compositionstart` event. It is used only in special cases to remove the contents\n  // of a non-collapsed selection so composition itself does not result in complex mutations.\n  //\n  // The special case mentioned above is a situation in which the `keydown` event is fired after\n  // `compositionstart` event. In such cases {@link #handleKeydown} cannot clear current selection\n  // contents (because it is too late and will break the composition) so the composition handler takes care of it.\n  function handleCompositionStart() {\n    var doc = model.document;\n    var isFlatSelection = doc.selection.rangeCount === 1 ? doc.selection.getFirstRange().isFlat : true;\n\n    // If on `compositionstart` there is a non-collapsed selection which start and end have different parents\n    // it means the `handleKeydown()` method did not remove its contents. It happens usually because\n    // of different order of events (`compositionstart` before `keydown` - in Safari). In such cases\n    // we need to remove selection contents on composition start (#83).\n    if (doc.selection.isCollapsed || isFlatSelection) {\n      return;\n    }\n    deleteSelectionContent();\n  }\n  function deleteSelectionContent() {\n    var buffer = inputCommand.buffer;\n    buffer.lock();\n    model.enqueueChange(buffer.batch, function () {\n      model.deleteContent(model.document.selection);\n    });\n    buffer.unlock();\n  }\n}\nvar safeKeycodes = [getCode('arrowUp'), getCode('arrowRight'), getCode('arrowDown'), getCode('arrowLeft'), 9,\n// Tab\n16,\n// Shift\n17,\n// Ctrl\n18,\n// Alt\n19,\n// Pause\n20,\n// CapsLock\n27,\n// Escape\n33,\n// PageUp\n34,\n// PageDown\n35,\n// Home\n36,\n// End,\n45,\n// Insert,\n91,\n// Windows,\n93,\n// Menu key,\n144,\n// NumLock\n145,\n// ScrollLock,\n173,\n// Mute/Unmute\n174,\n// Volume up\n175,\n// Volume down,\n176,\n// Next song,\n177,\n// Previous song,\n178,\n// Stop,\n179,\n// Play/Pause,\n255 // Display brightness (increase and decrease)\n];\n\n// Function keys.\nfor (var code = 112; code <= 135; code++) {\n  safeKeycodes.push(code);\n}\n\n// Returns `true` if a keystroke should not cause any content change caused by \"typing\".\n//\n// Note: This implementation is very simple and will need to be refined with time.\n//\n// @private\n// @param {engine.view.observer.keyObserver.KeyEventData} keyData\n// @returns {Boolean}\nfunction isSafeKeystroke(keyData) {\n  // Keystrokes which contain Ctrl don't represent typing.\n  if (keyData.ctrlKey) {\n    return true;\n  }\n  return safeKeycodes.includes(keyData.keyCode);\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module typing/utils/utils\n */\n\nimport diff from '@ckeditor/ckeditor5-utils/src/diff';\nimport diffToChanges from '@ckeditor/ckeditor5-utils/src/difftochanges';\n\n/**\n * Returns true if container children have mutated or more than a single text node was changed.\n *\n * @private\n * @param {Array.<module:engine/view/observer/mutationobserver~MutatedText|\n * module:engine/view/observer/mutationobserver~MutatedChildren>} mutations\n * @returns {Boolean}\n */\nexport function containerChildrenMutated(mutations) {\n  if (mutations.length == 0) {\n    return false;\n  }\n\n  // Check if there is any mutation of `children` type or any mutation that changes more than one text node.\n  var _iterator = _createForOfIteratorHelper(mutations),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var mutation = _step.value;\n      if (mutation.type === 'children' && !getSingleTextNodeChange(mutation)) {\n        return true;\n      }\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  return false;\n}\n\n/**\n * Returns change made to a single text node.\n *\n * @private\n * @param {module:engine/view/observer/mutationobserver~MutatedText|\n * module:engine/view/observer/mutationobserver~MutatedChildren} mutation\n * @returns {Object|undefined} Change object (see {@link module:utils/difftochanges~diffToChanges} output)\n * or undefined if more than a single text node was changed.\n */\nexport function getSingleTextNodeChange(mutation) {\n  // One new node.\n  if (mutation.newChildren.length - mutation.oldChildren.length != 1) {\n    return;\n  }\n\n  // Which is text.\n  var diffResult = diff(mutation.oldChildren, mutation.newChildren, compareChildNodes);\n  var changes = diffToChanges(diffResult, mutation.newChildren);\n\n  // In case of [ delete, insert, insert ] the previous check will not exit.\n  if (changes.length > 1) {\n    return;\n  }\n  var change = changes[0];\n\n  // Which is text.\n  if (!(!!change.values[0] && change.values[0].is('text'))) {\n    return;\n  }\n  return change;\n}\n\n/**\n * Checks whether two view nodes are identical, which means they are the same object\n * or contain exactly same data (in case of text nodes).\n *\n * @private\n * @param {module:engine/view/node~Node} oldChild\n * @param {module:engine/view/node~Node} newChild\n * @returns {Boolean}\n */\nexport function compareChildNodes(oldChild, newChild) {\n  if (!!oldChild && oldChild.is('text') && !!newChild && newChild.is('text')) {\n    return oldChild.data === newChild.data;\n  } else {\n    return oldChild === newChild;\n  }\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/bindings/clickoutsidehandler\n */\n\n/* global document */\n\n/**\n * Handles clicking **outside** of a specified set of elements, then fires an action.\n *\n * **Note**: Actually, the action is executed upon `mousedown`, not `click`. It prevents\n * certain issues when the user keeps holding the mouse button and the UI cannot react\n * properly.\n *\n * @param {Object} options Configuration options.\n * @param {module:utils/dom/emittermixin~Emitter} options.emitter The emitter to which this behavior\n * should be added.\n * @param {Function} options.activator Function returning a `Boolean`, to determine whether the handler is active.\n * @param {Array.<HTMLElement>} options.contextElements HTML elements that determine the scope of the\n * handler. Clicking any of them or their descendants will **not** fire the callback.\n * @param {Function} options.callback An action executed by the handler.\n */\nexport default function clickOutsideHandler(_ref) {\n  var emitter = _ref.emitter,\n    activator = _ref.activator,\n    callback = _ref.callback,\n    contextElements = _ref.contextElements;\n  emitter.listenTo(document, 'mousedown', function (evt, _ref2) {\n    var target = _ref2.target;\n    if (!activator()) {\n      return;\n    }\n    var _iterator = _createForOfIteratorHelper(contextElements),\n      _step;\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var contextElement = _step.value;\n        if (contextElement.contains(target)) {\n          return;\n        }\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n    callback();\n  });\n}","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/bindings/preventdefault\n */\n\n/**\n * A helper which executes a native `Event.preventDefault()` if the target of an event equals the\n * {@link module:ui/view~View#element element of the view}. It shortens the definition of a\n * {@link module:ui/view~View#template template}.\n *\n *\t\t// In a class extending View.\n *\t\timport preventDefault from '@ckeditor/ckeditor5-ui/src/bindings/preventdefault';\n *\n *\t\t// ...\n *\n *\t\tthis.setTemplate( {\n *\t\t\ttag: 'div',\n *\n *\t\t\ton: {\n *\t\t\t\t// Prevent the default mousedown action on this view.\n *\t\t\t\tmousedown: preventDefault( this )\n *\t\t\t}\n *\t\t} );\n *\n * @param {module:ui/view~View} view View instance that defines the template.\n * @returns {module:ui/template~TemplateToBinding}\n */\nexport default function preventDefault(view) {\n  return view.bindTemplate.to(function (evt) {\n    if (evt.target === view.element) {\n      evt.preventDefault();\n    }\n  });\n}","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/bindings/submithandler\n */\n\n/**\n * A handler useful for {@link module:ui/view~View views} working as HTML forms. It intercepts a native DOM\n * `submit` event, prevents the default web browser behavior (navigation and page reload) and\n * fires the `submit` event on a view instead. Such a custom event can be then used by any\n * {@link module:utils/dom/emittermixin~Emitter emitter}, e.g. to serialize the form data.\n *\n *\t\timport submitHandler from '@ckeditor/ckeditor5-ui/src/bindings/submithandler';\n *\n *\t\t// ...\n *\n *\t\tclass AnyFormView extends View {\n *\t\t\tconstructor() {\n *\t\t\t\tsuper();\n *\n *\t\t\t\t// ...\n *\n *\t\t\t\tsubmitHandler( {\n *\t\t\t\t\tview: this\n *\t\t\t\t} );\n *\t\t\t}\n *\t\t}\n *\n *\t\t// ...\n *\n *\t\tconst view = new AnyFormView();\n *\n *\t\t// A sample listener attached by an emitter working with the view.\n *\t\tthis.listenTo( view, 'submit', () => {\n *\t\t\tsaveTheFormData();\n *\t\t\thideTheForm();\n *\t\t} );\n *\n * @param {Object} [options] Configuration options.\n * @param {module:ui/view~View} options.view The view which DOM `submit` events should be handled.\n */\nexport default function submitHandler(_ref) {\n  var view = _ref.view;\n  view.listenTo(view.element, 'submit', function (evt, domEvt) {\n    domEvt.preventDefault();\n    view.fire('submit');\n  }, {\n    useCapture: true\n  });\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.concat.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/button/buttonview\n */\n\nimport View from '../view';\nimport IconView from '../icon/iconview';\nimport TooltipView from '../tooltip/tooltipview';\nimport uid from '@ckeditor/ckeditor5-utils/src/uid';\nimport { getEnvKeystrokeText } from '@ckeditor/ckeditor5-utils/src/keyboard';\nimport '../../theme/components/button/button.css';\n\n/**\n * The button view class.\n *\n *\t\tconst view = new ButtonView();\n *\n *\t\tview.set( {\n *\t\t\tlabel: 'A button',\n *\t\t\tkeystroke: 'Ctrl+B',\n *\t\t\ttooltip: true,\n *\t\t\twithText: true\n *\t\t} );\n *\n *\t\tview.render();\n *\n *\t\tdocument.body.append( view.element );\n *\n * @extends module:ui/view~View\n * @implements module:ui/button/button~Button\n */\nvar ButtonView = /*#__PURE__*/function (_View) {\n  /**\n   * @inheritDoc\n   */\n  function ButtonView(locale) {\n    var _this;\n    _classCallCheck(this, ButtonView);\n    _this = _callSuper(this, ButtonView, [locale]);\n    var bind = _this.bindTemplate;\n    var ariaLabelUid = uid();\n\n    // Implement the Button interface.\n    _this.set('class');\n    _this.set('labelStyle');\n    _this.set('icon');\n    _this.set('isEnabled', true);\n    _this.set('isOn', false);\n    _this.set('isVisible', true);\n    _this.set('isToggleable', false);\n    _this.set('keystroke');\n    _this.set('label');\n    _this.set('tabindex', -1);\n    _this.set('tooltip');\n    _this.set('tooltipPosition', 's');\n    _this.set('type', 'button');\n    _this.set('withText', false);\n\n    /**\n     * Collection of the child views inside of the button {@link #element}.\n     *\n     * @readonly\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n    _this.children = _this.createCollection();\n\n    /**\n     * Tooltip of the button view. It is configurable using the {@link #tooltip tooltip attribute}.\n     *\n     * @readonly\n     * @member {module:ui/tooltip/tooltipview~TooltipView} #tooltipView\n     */\n    _this.tooltipView = _this._createTooltipView();\n\n    /**\n     * Label of the button view. It is configurable using the {@link #label label attribute}.\n     *\n     * @readonly\n     * @member {module:ui/view~View} #labelView\n     */\n    _this.labelView = _this._createLabelView(ariaLabelUid);\n\n    /**\n     * The icon view of the button. Will be added to {@link #children} when the\n     * {@link #icon icon attribute} is defined.\n     *\n     * @readonly\n     * @member {module:ui/icon/iconview~IconView} #iconView\n     */\n    _this.iconView = new IconView();\n    _this.iconView.extendTemplate({\n      attributes: {\n        class: 'ck-button__icon'\n      }\n    });\n\n    /**\n     * Tooltip of the button bound to the template.\n     *\n     * @see #tooltip\n     * @see #_getTooltipString\n     * @private\n     * @observable\n     * @member {Boolean} #_tooltipString\n     */\n    _this.bind('_tooltipString').to(_this, 'tooltip', _this, 'label', _this, 'keystroke', _this._getTooltipString.bind(_this));\n    _this.setTemplate({\n      tag: 'button',\n      attributes: {\n        class: ['ck', 'ck-button', bind.to('class'), bind.if('isEnabled', 'ck-disabled', function (value) {\n          return !value;\n        }), bind.if('isVisible', 'ck-hidden', function (value) {\n          return !value;\n        }), bind.to('isOn', function (value) {\n          return value ? 'ck-on' : 'ck-off';\n        }), bind.if('withText', 'ck-button_with-text')],\n        type: bind.to('type', function (value) {\n          return value ? value : 'button';\n        }),\n        tabindex: bind.to('tabindex'),\n        'aria-labelledby': \"ck-editor__aria-label_\".concat(ariaLabelUid),\n        'aria-disabled': bind.if('isEnabled', true, function (value) {\n          return !value;\n        }),\n        'aria-pressed': bind.to('isOn', function (value) {\n          return _this.isToggleable ? String(value) : false;\n        })\n      },\n      children: _this.children,\n      on: {\n        mousedown: bind.to(function (evt) {\n          evt.preventDefault();\n        }),\n        click: bind.to(function (evt) {\n          // We can't make the button disabled using the disabled attribute, because it won't be focusable.\n          // Though, shouldn't this condition be moved to the button controller?\n          if (_this.isEnabled) {\n            _this.fire('execute');\n          } else {\n            // Prevent the default when button is disabled, to block e.g.\n            // automatic form submitting. See ckeditor/ckeditor5-link#74.\n            evt.preventDefault();\n          }\n        })\n      }\n    });\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(ButtonView, _View);\n  return _createClass(ButtonView, [{\n    key: \"render\",\n    value: function render() {\n      _superPropGet(ButtonView, \"render\", this, 3)([]);\n      if (this.icon) {\n        this.iconView.bind('content').to(this, 'icon');\n        this.children.add(this.iconView);\n      }\n      this.children.add(this.tooltipView);\n      this.children.add(this.labelView);\n    }\n\n    /**\n     * Focuses the {@link #element} of the button.\n     */\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      this.element.focus();\n    }\n\n    /**\n     * Creates a {@link module:ui/tooltip/tooltipview~TooltipView} instance and binds it with button\n     * attributes.\n     *\n     * @private\n     * @returns {module:ui/tooltip/tooltipview~TooltipView}\n     */\n  }, {\n    key: \"_createTooltipView\",\n    value: function _createTooltipView() {\n      var tooltipView = new TooltipView();\n      tooltipView.bind('text').to(this, '_tooltipString');\n      tooltipView.bind('position').to(this, 'tooltipPosition');\n      return tooltipView;\n    }\n\n    /**\n     * Creates a label view instance and binds it with button attributes.\n     *\n     * @private\n     * @param {String} ariaLabelUid The aria label UID.\n     * @returns {module:ui/view~View}\n     */\n  }, {\n    key: \"_createLabelView\",\n    value: function _createLabelView(ariaLabelUid) {\n      var labelView = new View();\n      var bind = this.bindTemplate;\n      labelView.setTemplate({\n        tag: 'span',\n        attributes: {\n          class: ['ck', 'ck-button__label'],\n          style: bind.to('labelStyle'),\n          id: \"ck-editor__aria-label_\".concat(ariaLabelUid)\n        },\n        children: [{\n          text: this.bindTemplate.to('label')\n        }]\n      });\n      return labelView;\n    }\n\n    /**\n     * Gets the text for the {@link #tooltipView} from the combination of\n     * {@link #tooltip}, {@link #label} and {@link #keystroke} attributes.\n     *\n     * @private\n     * @see #tooltip\n     * @see #_tooltipString\n     * @param {Boolean|String|Function} tooltip Button tooltip.\n     * @param {String} label Button label.\n     * @param {String} keystroke Button keystroke.\n     * @returns {String}\n     */\n  }, {\n    key: \"_getTooltipString\",\n    value: function _getTooltipString(tooltip, label, keystroke) {\n      if (tooltip) {\n        if (typeof tooltip == 'string') {\n          return tooltip;\n        } else {\n          if (keystroke) {\n            keystroke = getEnvKeystrokeText(keystroke);\n          }\n          if (tooltip instanceof Function) {\n            return tooltip(label, keystroke);\n          } else {\n            return \"\".concat(label).concat(keystroke ? \" (\".concat(keystroke, \")\") : '');\n          }\n        }\n      }\n      return '';\n    }\n  }]);\n}(View);\nexport { ButtonView as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/button/switchbuttonview\n */\n\nimport View from '../view';\nimport ButtonView from './buttonview';\nimport '../../theme/components/button/switchbutton.css';\n\n/**\n * The switch button view class.\n *\n *\t\tconst view = new SwitchButtonView();\n *\n *\t\tview.set( {\n *\t\t\twithText: true,\n *\t\t\tlabel: 'Switch me!'\n *\t\t} );\n *\n *\t\tview.render();\n *\n *\t\tdocument.body.append( view.element );\n *\n * @extends module:ui/button/buttonview~ButtonView\n */\nvar SwitchButtonView = /*#__PURE__*/function (_ButtonView) {\n  /**\n   * @inheritDoc\n   */\n  function SwitchButtonView(locale) {\n    var _this;\n    _classCallCheck(this, SwitchButtonView);\n    _this = _callSuper(this, SwitchButtonView, [locale]);\n    _this.isToggleable = true;\n\n    /**\n     * The toggle switch of the button.\n     *\n     * @readonly\n     * @member {module:ui/view~View} #toggleSwitchView\n     */\n    _this.toggleSwitchView = _this._createToggleView();\n    _this.extendTemplate({\n      attributes: {\n        class: 'ck-switchbutton'\n      }\n    });\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(SwitchButtonView, _ButtonView);\n  return _createClass(SwitchButtonView, [{\n    key: \"render\",\n    value: function render() {\n      _superPropGet(SwitchButtonView, \"render\", this, 3)([]);\n      this.children.add(this.toggleSwitchView);\n    }\n\n    /**\n     * Creates a toggle child view.\n     *\n     * @private\n     * @returns {module:ui/view~View}\n     */\n  }, {\n    key: \"_createToggleView\",\n    value: function _createToggleView() {\n      var toggleSwitchView = new View();\n      toggleSwitchView.setTemplate({\n        tag: 'span',\n        attributes: {\n          class: ['ck', 'ck-button__toggle']\n        },\n        children: [{\n          tag: 'span',\n          attributes: {\n            class: ['ck', 'ck-button__toggle__inner']\n          }\n        }]\n      });\n      return toggleSwitchView;\n    }\n  }]);\n}(ButtonView);\nexport { SwitchButtonView as default };","import _regenerator from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regenerator.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/componentfactory\n */\n\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\n\n/**\n * A helper class implementing the UI component ({@link module:ui/view~View view}) factory.\n *\n * It allows functions producing specific UI components to be registered under their unique names\n * in the factory. A registered component can be then instantiated by providing its name.\n * Note that names are case insensitive.\n *\n *\t\t// The editor provides localization tools for the factory.\n *\t\tconst factory = new ComponentFactory( editor );\n *\n *\t\tfactory.add( 'foo', locale => new FooView( locale ) );\n *\t\tfactory.add( 'bar', locale => new BarView( locale ) );\n *\n *\t\t// An instance of FooView.\n *\t\tconst fooInstance = factory.create( 'foo' );\n *\n *\t\t// Names are case insensitive so this is also allowed:\n *\t\tconst barInstance = factory.create( 'Bar' );\n *\n * The {@link module:core/editor/editor~Editor#locale editor locale} is passed to the factory\n * function when {@link module:ui/componentfactory~ComponentFactory#create} is called.\n */\nvar ComponentFactory = /*#__PURE__*/function () {\n  /**\n   * Creates an instance of the factory.\n   *\n   * @constructor\n   * @param {module:core/editor/editor~Editor} editor The editor instance.\n   */\n  function ComponentFactory(editor) {\n    _classCallCheck(this, ComponentFactory);\n    /**\n     * The editor instance that the factory belongs to.\n     *\n     * @readonly\n     * @member {module:core/editor/editor~Editor}\n     */\n    this.editor = editor;\n\n    /**\n     * Registered component factories.\n     *\n     * @private\n     * @member {Map}\n     */\n    this._components = new Map();\n  }\n\n  /**\n   * Returns an iterator of registered component names. Names are returned in lower case.\n   *\n   * @returns {Iterable.<String>}\n   */\n  return _createClass(ComponentFactory, [{\n    key: \"names\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function names() {\n      var _iterator, _step, value, _t;\n      return _regenerator().w(function (_context) {\n        while (1) switch (_context.p = _context.n) {\n          case 0:\n            _iterator = _createForOfIteratorHelper(this._components.values());\n            _context.p = 1;\n            _iterator.s();\n          case 2:\n            if ((_step = _iterator.n()).done) {\n              _context.n = 4;\n              break;\n            }\n            value = _step.value;\n            _context.n = 3;\n            return value.originalName;\n          case 3:\n            _context.n = 2;\n            break;\n          case 4:\n            _context.n = 6;\n            break;\n          case 5:\n            _context.p = 5;\n            _t = _context.v;\n            _iterator.e(_t);\n          case 6:\n            _context.p = 6;\n            _iterator.f();\n            return _context.f(6);\n          case 7:\n            return _context.a(2);\n        }\n      }, names, this, [[1, 5, 6, 7]]);\n    })\n    /**\n     * Registers a component factory function that will be used by the\n     * {@link #create create} method and called with the\n     * {@link module:core/editor/editor~Editor#locale editor locale} as an argument,\n     * allowing localization of the {@link module:ui/view~View view}.\n     *\n     * @param {String} name The name of the component.\n     * @param {Function} callback The callback that returns the component.\n     */\n  }, {\n    key: \"add\",\n    value: function add(name, callback) {\n      if (this.has(name)) {\n        /**\n         * The item already exists in the component factory.\n         *\n         * @error componentfactory-item-exists\n         * @param {String} name The name of the component.\n         */\n        throw new CKEditorError('componentfactory-item-exists: The item already exists in the component factory.', this, {\n          name: name\n        });\n      }\n      this._components.set(getNormalized(name), {\n        callback: callback,\n        originalName: name\n      });\n    }\n\n    /**\n     * Creates an instance of a component registered in the factory under a specific name.\n     *\n     * When called, the {@link module:core/editor/editor~Editor#locale editor locale} is passed to\n     * the previously {@link #add added} factory function, allowing localization of the\n     * {@link module:ui/view~View view}.\n     *\n     * @param {String} name The name of the component.\n     * @returns {module:ui/view~View} The instantiated component view.\n     */\n  }, {\n    key: \"create\",\n    value: function create(name) {\n      if (!this.has(name)) {\n        /**\n         * The required component is not registered in the component factory. Please make sure\n         * the provided name is correct and the component has been correctly\n         * {@link #add added} to the factory.\n         *\n         * @error componentfactory-item-missing\n         * @param {String} name The name of the missing component.\n         */\n        throw new CKEditorError('componentfactory-item-missing: The required component is not registered in the factory.', this, {\n          name: name\n        });\n      }\n      return this._components.get(getNormalized(name)).callback(this.editor.locale);\n    }\n\n    /**\n     * Checks if a component of a given name is registered in the factory.\n     *\n     * @param {String} name The name of the component.\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"has\",\n    value: function has(name) {\n      return this._components.has(getNormalized(name));\n    }\n  }]);\n}(); //\n// Ensures that the component name used as the key in the internal map is in lower case.\n//\n// @private\n// @param {String} name\n// @returns {String}\nexport { ComponentFactory as default };\nfunction getNormalized(name) {\n  return String(name).toLowerCase();\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/dropdown/button/dropdownbuttonview\n */\n\nimport ButtonView from '../../button/buttonview';\nimport dropdownArrowIcon from '../../../theme/icons/dropdown-arrow.svg';\nimport IconView from '../../icon/iconview';\n\n/**\n * The default dropdown button view class.\n *\n *\t\tconst view = new DropdownButtonView();\n *\n *\t\tview.set( {\n *\t\t\tlabel: 'A button',\n *\t\t\tkeystroke: 'Ctrl+B',\n *\t\t\ttooltip: true\n *\t\t} );\n *\n *\t\tview.render();\n *\n *\t\tdocument.body.append( view.element );\n *\n * Also see the {@link module:ui/dropdown/utils~createDropdown `createDropdown()` util}.\n *\n * @implements module:ui/dropdown/button/dropdownbutton~DropdownButton\n * @extends module:ui/button/buttonview~ButtonView\n */\nvar DropdownButtonView = /*#__PURE__*/function (_ButtonView) {\n  /**\n   * @inheritDoc\n   */\n  function DropdownButtonView(locale) {\n    var _this;\n    _classCallCheck(this, DropdownButtonView);\n    _this = _callSuper(this, DropdownButtonView, [locale]);\n\n    /**\n     * An icon that displays arrow to indicate a dropdown button.\n     *\n     * @readonly\n     * @member {module:ui/icon/iconview~IconView}\n     */\n    _this.arrowView = _this._createArrowView();\n    _this.extendTemplate({\n      attributes: {\n        'aria-haspopup': true\n      }\n    });\n\n    // The DropdownButton interface expects the open event upon which will open the dropdown.\n    _this.delegate('execute').to(_this, 'open');\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(DropdownButtonView, _ButtonView);\n  return _createClass(DropdownButtonView, [{\n    key: \"render\",\n    value: function render() {\n      _superPropGet(DropdownButtonView, \"render\", this, 3)([]);\n      this.children.add(this.arrowView);\n    }\n\n    /**\n     * Creates a {@link module:ui/icon/iconview~IconView} instance as {@link #arrowView}.\n     *\n     * @private\n     * @returns {module:ui/icon/iconview~IconView}\n     */\n  }, {\n    key: \"_createArrowView\",\n    value: function _createArrowView() {\n      var arrowView = new IconView();\n      arrowView.content = dropdownArrowIcon;\n      arrowView.extendTemplate({\n        attributes: {\n          class: 'ck-dropdown__arrow'\n        }\n      });\n      return arrowView;\n    }\n  }]);\n}(ButtonView);\nexport { DropdownButtonView as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/dropdown/dropdownpanelview\n */\n\nimport View from '../view';\n\n/**\n * The dropdown panel view class.\n *\n * See {@link module:ui/dropdown/dropdownview~DropdownView} to learn about the common usage.\n *\n * @extends module:ui/view~View\n */\nvar DropdownPanelView = /*#__PURE__*/function (_View) {\n  /**\n   * @inheritDoc\n   */\n  function DropdownPanelView(locale) {\n    var _this;\n    _classCallCheck(this, DropdownPanelView);\n    _this = _callSuper(this, DropdownPanelView, [locale]);\n    var bind = _this.bindTemplate;\n\n    /**\n     * Controls whether the panel is visible.\n     *\n     * @observable\n     * @member {Boolean} #isVisible\n     */\n    _this.set('isVisible', false);\n\n    /**\n     * The position of the panel, relative to the parent.\n     *\n     * This property is reflected in the CSS class set to {@link #element} that controls\n     * the position of the panel.\n     *\n     * @observable\n     * @default 'se'\n     * @member {'se'|'sw'|'ne'|'nw'} #position\n     */\n    _this.set('position', 'se');\n\n    /**\n     * Collection of the child views in this panel.\n     *\n     * A common child type is the {@link module:ui/list/listview~ListView} and {@link module:ui/toolbar/toolbarview~ToolbarView}.\n     * See {@link module:ui/dropdown/utils~addListToDropdown} and\n     * {@link module:ui/dropdown/utils~addToolbarToDropdown} to learn more about child views of dropdowns.\n     *\n     * @readonly\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n    _this.children = _this.createCollection();\n    _this.setTemplate({\n      tag: 'div',\n      attributes: {\n        class: ['ck', 'ck-reset', 'ck-dropdown__panel', bind.to('position', function (value) {\n          return \"ck-dropdown__panel_\".concat(value);\n        }), bind.if('isVisible', 'ck-dropdown__panel-visible')]\n      },\n      children: _this.children,\n      on: {\n        // Drag and drop in the panel should not break the selection in the editor.\n        // https://github.com/ckeditor/ckeditor5-ui/issues/228\n        selectstart: bind.to(function (evt) {\n          return evt.preventDefault();\n        })\n      }\n    });\n    return _this;\n  }\n\n  /**\n   * Focuses the view element or first item in view collection on opening dropdown's panel.\n   *\n   * See also {@link module:ui/dropdown/dropdownpanelfocusable~DropdownPanelFocusable}.\n   */\n  _inherits(DropdownPanelView, _View);\n  return _createClass(DropdownPanelView, [{\n    key: \"focus\",\n    value: function focus() {\n      if (this.children.length) {\n        this.children.first.focus();\n      }\n    }\n\n    /**\n     * Focuses the view element or last item in view collection on opening dropdown's panel.\n     *\n     * See also {@link module:ui/dropdown/dropdownpanelfocusable~DropdownPanelFocusable}.\n     */\n  }, {\n    key: \"focusLast\",\n    value: function focusLast() {\n      if (this.children.length) {\n        var lastChild = this.children.last;\n        if (typeof lastChild.focusLast === 'function') {\n          lastChild.focusLast();\n        } else {\n          lastChild.focus();\n        }\n      }\n    }\n  }]);\n}(View);\nexport { DropdownPanelView as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.function.name.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/dropdown/dropdownview\n */\n\nimport View from '../view';\nimport FocusTracker from '@ckeditor/ckeditor5-utils/src/focustracker';\nimport KeystrokeHandler from '@ckeditor/ckeditor5-utils/src/keystrokehandler';\nimport '../../theme/components/dropdown/dropdown.css';\nimport { getOptimalPosition } from '@ckeditor/ckeditor5-utils/src/dom/position';\n\n/**\n * The dropdown view class. It manages the dropdown button and dropdown panel.\n *\n * In most cases, the easiest way to create a dropdown is by using the {@link module:ui/dropdown/utils~createDropdown}\n * util:\n *\n *\t\tconst dropdown = createDropdown( locale );\n *\n *\t\t// Configure dropdown's button properties:\n *\t\tdropdown.buttonView.set( {\n *\t\t\tlabel: 'A dropdown',\n *\t\t\twithText: true\n *\t\t} );\n *\n *\t\tdropdown.render();\n *\n *\t\tdropdown.panelView.element.textContent = 'Content of the panel';\n *\n *\t\t// Will render a dropdown with a panel containing a \"Content of the panel\" text.\n *\t\tdocument.body.appendChild( dropdown.element );\n *\n * If you want to add a richer content to the dropdown panel, you can use the {@link module:ui/dropdown/utils~addListToDropdown}\n * and {@link module:ui/dropdown/utils~addToolbarToDropdown} helpers. See more examples in\n * {@link module:ui/dropdown/utils~createDropdown} documentation.\n *\n * If you want to create a completely custom dropdown, then you can compose it manually:\n *\n *\t\tconst button = new DropdownButtonView( locale );\n *\t\tconst panel = new DropdownPanelView( locale );\n *\t\tconst dropdown = new DropdownView( locale, button, panel );\n *\n *\t\tbutton.set( {\n *\t\t\tlabel: 'A dropdown',\n *\t\t\twithText: true\n *\t\t} );\n *\n *\t\tdropdown.render();\n *\n *\t\tpanel.element.textContent = 'Content of the panel';\n *\n *\t\t// Will render a dropdown with a panel containing a \"Content of the panel\" text.\n *\t\tdocument.body.appendChild( dropdown.element );\n *\n * However, dropdown created this way will contain little behavior. You will need to implement handlers for actions\n * such as {@link module:ui/bindings/clickoutsidehandler~clickOutsideHandler clicking outside an open dropdown}\n * (which should close it) and support for arrow keys inside the panel. Therefore, unless you really know what\n * you do and you really need to do it, it is recommended to use the {@link module:ui/dropdown/utils~createDropdown} helper.\n *\n * @extends module:ui/view~View\n */\nvar DropdownView = /*#__PURE__*/function (_View) {\n  /**\n   * Creates an instance of the dropdown.\n   *\n   * Also see {@link #render}.\n   *\n   * @param {module:utils/locale~Locale} [locale] The localization services instance.\n   * @param {module:ui/dropdown/button/dropdownbutton~DropdownButton} buttonView\n   * @param {module:ui/dropdown/dropdownpanelview~DropdownPanelView} panelView\n   */\n  function DropdownView(locale, buttonView, panelView) {\n    var _this;\n    _classCallCheck(this, DropdownView);\n    _this = _callSuper(this, DropdownView, [locale]);\n    var bind = _this.bindTemplate;\n\n    /**\n     * Button of the dropdown view. Clicking the button opens the {@link #panelView}.\n     *\n     * @readonly\n     * @member {module:ui/button/buttonview~ButtonView} #buttonView\n     */\n    _this.buttonView = buttonView;\n\n    /**\n     * Panel of the dropdown. It opens when the {@link #buttonView} is\n     * {@link module:ui/button/buttonview~ButtonView#event:execute executed} (i.e. clicked).\n     *\n     * Child views can be added to the panel's `children` collection:\n     *\n     *\t\tdropdown.panelView.children.add( childView );\n     *\n     * See {@link module:ui/dropdown/dropdownpanelview~DropdownPanelView#children} and\n     * {@link module:ui/viewcollection~ViewCollection#add}.\n     *\n     * @readonly\n     * @member {module:ui/dropdown/dropdownpanelview~DropdownPanelView} #panelView\n     */\n    _this.panelView = panelView;\n\n    /**\n     * Controls whether the dropdown view is open, i.e. shows or hides the {@link #panelView panel}.\n     *\n     * @observable\n     * @member {Boolean} #isOpen\n     */\n    _this.set('isOpen', false);\n\n    /**\n     * Controls whether the dropdown is enabled, i.e. it can be clicked and execute an action.\n     *\n     * See {@link module:ui/button/buttonview~ButtonView#isEnabled}.\n     *\n     * @observable\n     * @member {Boolean} #isEnabled\n     */\n    _this.set('isEnabled', true);\n\n    /**\n     * (Optional) The additional CSS class set on the dropdown {@link #element}.\n     *\n     * @observable\n     * @member {String} #class\n     */\n    _this.set('class');\n\n    /**\n     * The position of the panel, relative to the dropdown.\n     *\n     * **Note**: When `'auto'`, the panel will use one of the remaining positions to stay\n     * in the viewport, visible to the user. The positions correspond directly to\n     * {@link module:ui/dropdown/dropdownview~DropdownView.defaultPanelPositions default panel positions}.\n     *\n     * **Note**: This value has an impact on the\n     * {@link module:ui/dropdown/dropdownpanelview~DropdownPanelView#position} property\n     * each time the panel becomes {@link #isOpen open}.\n     *\n     * @observable\n     * @default 'auto'\n     * @member {'auto'|'se'|'sw'|'ne'|'nw'} #panelPosition\n     */\n    _this.set('panelPosition', 'auto');\n\n    /**\n     * Tracks information about DOM focus in the dropdown.\n     *\n     * @readonly\n     * @member {module:utils/focustracker~FocusTracker}\n     */\n    _this.focusTracker = new FocusTracker();\n\n    /**\n     * Instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}. It manages\n     * keystrokes of the dropdown:\n     *\n     * * <kbd>▼</kbd> opens the dropdown,\n     * * <kbd>◀</kbd> and <kbd>Esc</kbd> closes the dropdown.\n     *\n     * @readonly\n     * @member {module:utils/keystrokehandler~KeystrokeHandler}\n     */\n    _this.keystrokes = new KeystrokeHandler();\n    _this.setTemplate({\n      tag: 'div',\n      attributes: {\n        class: ['ck', 'ck-dropdown', bind.to('class'), bind.if('isEnabled', 'ck-disabled', function (value) {\n          return !value;\n        })]\n      },\n      children: [buttonView, panelView]\n    });\n    buttonView.extendTemplate({\n      attributes: {\n        class: ['ck-dropdown__button']\n      }\n    });\n\n    /**\n     * A child {@link module:ui/list/listview~ListView list view} of the dropdown located\n     * in its {@link module:ui/dropdown/dropdownview~DropdownView#panelView panel}.\n     *\n     * **Note**: Only supported when dropdown has list view added using {@link module:ui/dropdown/utils~addListToDropdown}.\n     *\n     * @readonly\n     * @member {module:ui/list/listview~ListView} #listView\n     */\n\n    /**\n     * A child toolbar of the dropdown located in the\n     * {@link module:ui/dropdown/dropdownview~DropdownView#panelView panel}.\n     *\n     * **Note**: Only supported when dropdown has list view added using {@link module:ui/dropdown/utils~addToolbarToDropdown}.\n     *\n     * @readonly\n     * @member {module:ui/toolbar/toolbarview~ToolbarView} #toolbarView\n     */\n\n    /**\n     * Fired when the toolbar button or list item is executed.\n     *\n     * For {@link #listView} It fires when a child of some {@link module:ui/list/listitemview~ListItemView}\n     * fired `execute`.\n     *\n     * For {@link #toolbarView} It fires when one of the buttons has been\n     * {@link module:ui/button/buttonview~ButtonView#event:execute executed}.\n     *\n     * **Note**: Only supported when dropdown has list view added using {@link module:ui/dropdown/utils~addListToDropdown}\n     * or {@link module:ui/dropdown/utils~addToolbarToDropdown}.\n     *\n     * @event execute\n     */\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(DropdownView, _View);\n  return _createClass(DropdownView, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n      _superPropGet(DropdownView, \"render\", this, 3)([]);\n\n      // Toggle the dropdown when its button has been clicked.\n      this.listenTo(this.buttonView, 'open', function () {\n        _this2.isOpen = !_this2.isOpen;\n      });\n\n      // Toggle the visibility of the panel when the dropdown becomes open.\n      this.panelView.bind('isVisible').to(this, 'isOpen');\n\n      // Let the dropdown control the position of the panel. The position must\n      // be updated every time the dropdown is open.\n      this.on('change:isOpen', function () {\n        if (!_this2.isOpen) {\n          return;\n        }\n\n        // If \"auto\", find the best position of the panel to fit into the viewport.\n        // Otherwise, simply assign the static position.\n        if (_this2.panelPosition === 'auto') {\n          _this2.panelView.position = DropdownView._getOptimalPosition({\n            element: _this2.panelView.element,\n            target: _this2.buttonView.element,\n            fitInViewport: true,\n            positions: _this2._panelPositions\n          }).name;\n        } else {\n          _this2.panelView.position = _this2.panelPosition;\n        }\n      });\n\n      // Listen for keystrokes coming from within #element.\n      this.keystrokes.listenTo(this.element);\n\n      // Register #element in the focus tracker.\n      this.focusTracker.add(this.element);\n      var closeDropdown = function closeDropdown(data, cancel) {\n        if (_this2.isOpen) {\n          _this2.buttonView.focus();\n          _this2.isOpen = false;\n          cancel();\n        }\n      };\n\n      // Open the dropdown panel using the arrow down key, just like with return or space.\n      this.keystrokes.set('arrowdown', function (data, cancel) {\n        // Don't open if the dropdown is disabled or already open.\n        if (_this2.buttonView.isEnabled && !_this2.isOpen) {\n          _this2.isOpen = true;\n          cancel();\n        }\n      });\n\n      // Block the right arrow key (until nested dropdowns are implemented).\n      this.keystrokes.set('arrowright', function (data, cancel) {\n        if (_this2.isOpen) {\n          cancel();\n        }\n      });\n\n      // Close the dropdown using the arrow left/escape key.\n      this.keystrokes.set('arrowleft', closeDropdown);\n      this.keystrokes.set('esc', closeDropdown);\n    }\n\n    /**\n     * Focuses the {@link #buttonView}.\n     */\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      this.buttonView.focus();\n    }\n\n    /**\n     * Returns {@link #panelView panel} positions to be used by the\n     * {@link module:utils/dom/position~getOptimalPosition `getOptimalPosition()`}\n     * utility considering the direction of the language the UI of the editor is displayed in.\n     *\n     * @type {module:utils/dom/position~Options#positions}\n     * @private\n     */\n  }, {\n    key: \"_panelPositions\",\n    get: function get() {\n      var _DropdownView$default = DropdownView.defaultPanelPositions,\n        southEast = _DropdownView$default.southEast,\n        southWest = _DropdownView$default.southWest,\n        northEast = _DropdownView$default.northEast,\n        northWest = _DropdownView$default.northWest;\n      if (this.locale.uiLanguageDirection === 'ltr') {\n        return [southEast, southWest, northEast, northWest];\n      } else {\n        return [southWest, southEast, northWest, northEast];\n      }\n    }\n  }]);\n}(View);\n/**\n * A set of positioning functions used by the dropdown view to determine\n * the optimal position (i.e. fitting into the browser viewport) of its\n * {@link module:ui/dropdown/dropdownview~DropdownView#panelView panel} when\n * {@link module:ui/dropdown/dropdownview~DropdownView#panelPosition} is set to 'auto'`.\n *\n * The available positioning functions are as follow:\n *\n * **South**\n *\n * * `southEast`\n *\n *\t\t[ Button ]\n *\t\t+-----------------+\n *\t\t|      Panel      |\n *\t\t+-----------------+\n *\n * * `southWest`\n *\n *\t\t         [ Button ]\n *\t\t+-----------------+\n *\t\t|      Panel      |\n *\t\t+-----------------+\n *\n * **North**\n *\n * * `northEast`\n *\n *\t\t+-----------------+\n *\t\t|      Panel      |\n *\t\t+-----------------+\n *\t\t[ Button ]\n *\n * * `northWest`\n *\n *\t\t+-----------------+\n *\t\t|      Panel      |\n *\t\t+-----------------+\n *\t\t         [ Button ]\n *\n * Positioning functions are compatible with {@link module:utils/dom/position~Position}.\n *\n * The name that position function returns will be reflected in dropdown panel's class that\n * controls its placement. See {@link module:ui/dropdown/dropdownview~DropdownView#panelPosition}\n * to learn more.\n *\n * @member {Object} module:ui/dropdown/dropdownview~DropdownView.defaultPanelPositions\n */\nexport { DropdownView as default };\nDropdownView.defaultPanelPositions = {\n  southEast: function southEast(buttonRect) {\n    return {\n      top: buttonRect.bottom,\n      left: buttonRect.left,\n      name: 'se'\n    };\n  },\n  southWest: function southWest(buttonRect, panelRect) {\n    return {\n      top: buttonRect.bottom,\n      left: buttonRect.left - panelRect.width + buttonRect.width,\n      name: 'sw'\n    };\n  },\n  northEast: function northEast(buttonRect, panelRect) {\n    return {\n      top: buttonRect.top - panelRect.height,\n      left: buttonRect.left,\n      name: 'ne'\n    };\n  },\n  northWest: function northWest(buttonRect, panelRect) {\n    return {\n      top: buttonRect.bottom - panelRect.height,\n      left: buttonRect.left - panelRect.width + buttonRect.width,\n      name: 'nw'\n    };\n  }\n};\n\n/**\n * A function used to calculate the optimal position for the dropdown panel.\n *\n * @protected\n * @member {Function} module:ui/dropdown/dropdownview~DropdownView._getOptimalPosition\n */\nDropdownView._getOptimalPosition = getOptimalPosition;","import _toConsumableArray from '/github/workspace/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js';\nimport 'core-js/modules/es.array.map.js';\nimport 'core-js/modules/es.iterator.constructor.js';\nimport 'core-js/modules/es.iterator.map.js';\nimport 'core-js/modules/es.object.keys.js';\nimport 'core-js/modules/es.object.to-string.js';\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/dropdown/utils\n */\nimport DropdownPanelView from './dropdownpanelview';\nimport DropdownView from './dropdownview';\nimport DropdownButtonView from './button/dropdownbuttonview';\nimport ToolbarView from '../toolbar/toolbarview';\nimport ListView from '../list/listview';\nimport ListItemView from '../list/listitemview';\nimport ListSeparatorView from '../list/listseparatorview';\nimport ButtonView from '../button/buttonview';\nimport SwitchButtonView from '../button/switchbuttonview';\nimport clickOutsideHandler from '../bindings/clickoutsidehandler';\nimport '../../theme/components/dropdown/toolbardropdown.css';\nimport '../../theme/components/dropdown/listdropdown.css';\n/**\n * A helper for creating dropdowns. It creates an instance of a {@link module:ui/dropdown/dropdownview~DropdownView dropdown},\n * with a {@link module:ui/dropdown/button/dropdownbutton~DropdownButton button},\n * {@link module:ui/dropdown/dropdownpanelview~DropdownPanelView panel} and all standard dropdown's behaviors.\n *\n * # Creating dropdowns\n *\n * By default, the default {@link module:ui/dropdown/button/dropdownbuttonview~DropdownButtonView} class is used as\n * definition of the button:\n *\n *\t\tconst dropdown = createDropdown( model );\n *\n *\t\t// Configure dropdown's button properties:\n *\t\tdropdown.buttonView.set( {\n *\t\t\tlabel: 'A dropdown',\n *\t\t\twithText: true\n *\t\t} );\n *\n *\t\tdropdown.render();\n *\n *\t\t// Will render a dropdown labeled \"A dropdown\" with an empty panel.\n *\t\tdocument.body.appendChild( dropdown.element );\n *\n * You can also provide other button views (they need to implement the\n * {@link module:ui/dropdown/button/dropdownbutton~DropdownButton} interface). For instance, you can use\n * {@link module:ui/dropdown/button/splitbuttonview~SplitButtonView} to create a dropdown with a split button.\n *\n *\t\tconst dropdown = createDropdown( model, SplitButtonView );\n *\n *\t\t// Configure dropdown's button properties:\n *\t\tdropdown.buttonView.set( {\n *\t\t\tlabel: 'A dropdown',\n *\t\t\twithText: true\n *\t\t} );\n *\n *\t\tdropdown.buttonView.on( 'execute', () => {\n *\t\t\t// Add the behavior of the \"action part\" of the split button.\n *\t\t\t// Split button consists of the \"action part\" and \"arrow part\".\n *\t\t\t// The arrow opens the dropdown while the action part can have some other behavior.\n * \t\t} );\n *\n *\t\tdropdown.render();\n *\n *\t\t// Will render a dropdown labeled \"A dropdown\" with an empty panel.\n *\t\tdocument.body.appendChild( dropdown.element );\n *\n * # Adding content to the dropdown's panel\n *\n * The content of the panel can be inserted directly into the `dropdown.panelView.element`:\n *\n *\t\tdropdown.panelView.element.textContent = 'Content of the panel';\n *\n * However, most of the time you will want to add there either a {@link module:ui/list/listview~ListView list of options}\n * or a list of buttons (i.e. a {@link module:ui/toolbar/toolbarview~ToolbarView toolbar}).\n * To simplify the task, you can use, respectively, {@link module:ui/dropdown/utils~addListToDropdown} or\n * {@link module:ui/dropdown/utils~addToolbarToDropdown} utils.\n *\n * @param {module:utils/locale~Locale} locale The locale instance.\n * @param {Function} ButtonClass The dropdown button view class. Needs to implement the\n * {@link module:ui/dropdown/button/dropdownbutton~DropdownButton} interface.\n * @returns {module:ui/dropdown/dropdownview~DropdownView} The dropdown view instance.\n */\nexport function createDropdown(locale) {\n    var ButtonClass = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DropdownButtonView;\n    var buttonView = new ButtonClass(locale);\n    var panelView = new DropdownPanelView(locale);\n    var dropdownView = new DropdownView(locale, buttonView, panelView);\n    buttonView.bind('isEnabled').to(dropdownView);\n    if (buttonView instanceof DropdownButtonView) {\n        buttonView.bind('isOn').to(dropdownView, 'isOpen');\n    } else {\n        buttonView.arrowView.bind('isOn').to(dropdownView, 'isOpen');\n    }\n    addDefaultBehavior(dropdownView);\n    return dropdownView;\n}\n/**\n * Adds an instance of {@link module:ui/toolbar/toolbarview~ToolbarView} to a dropdown.\n *\n *\t\tconst buttons = [];\n *\n *\t\t// Either create a new ButtonView instance or create existing.\n *\t\tbuttons.push( new ButtonView() );\n *\t\tbuttons.push( editor.ui.componentFactory.get( 'someButton' ) );\n *\n *\t\tconst dropdown = createDropdown( locale );\n *\n *\t\taddToolbarToDropdown( dropdown, buttons );\n *\n *\t\tdropdown.toolbarView.isVertical = true;\n *\n *\t\t// Will render a vertical button dropdown labeled \"A button dropdown\"\n *\t\t// with a button group in the panel containing two buttons.\n *\t\tdropdown.render()\n *\t\tdocument.body.appendChild( dropdown.element );\n *\n * See {@link module:ui/dropdown/utils~createDropdown} and {@link module:ui/toolbar/toolbarview~ToolbarView}.\n *\n * @param {module:ui/dropdown/dropdownview~DropdownView} dropdownView A dropdown instance to which `ToolbarView` will be added.\n * @param {Iterable.<module:ui/button/buttonview~ButtonView>} buttons\n */\nexport function addToolbarToDropdown(dropdownView, buttons) {\n    var locale = dropdownView.locale;\n    var t = locale.t;\n    var toolbarView = dropdownView.toolbarView = new ToolbarView(locale);\n    toolbarView.set('ariaLabel', t('Dropdown toolbar'));\n    dropdownView.extendTemplate({ attributes: { class: ['ck-toolbar-dropdown'] } });\n    buttons.map(function (view) {\n        return toolbarView.items.add(view);\n    });\n    dropdownView.panelView.children.add(toolbarView);\n    toolbarView.items.delegate('execute').to(dropdownView);\n}\n/**\n * Adds an instance of {@link module:ui/list/listview~ListView} to a dropdown.\n *\n *\t\tconst items = new Collection();\n *\n *\t\titems.add( {\n *\t\t\ttype: 'button',\n *\t\t\tmodel: new Model( {\n *\t\t\t\twithText: true,\n *\t\t\t\tlabel: 'First item',\n *\t\t\t\tlabelStyle: 'color: red'\n *\t\t\t} )\n *\t\t} );\n *\n *\t\titems.add( {\n *\t\t\t type: 'button',\n *\t\t\t model: new Model( {\n *\t\t\t\twithText: true,\n *\t\t\t\tlabel: 'Second item',\n *\t\t\t\tlabelStyle: 'color: green',\n *\t\t\t\tclass: 'foo'\n *\t\t\t} )\n *\t\t} );\n *\n *\t\tconst dropdown = createDropdown( locale );\n *\n *\t\taddListToDropdown( dropdown, items );\n *\n *\t\t// Will render a dropdown with a list in the panel containing two items.\n *\t\tdropdown.render()\n *\t\tdocument.body.appendChild( dropdown.element );\n *\n * The `items` collection passed to this methods controls the presence and attributes of respective\n * {@link module:ui/list/listitemview~ListItemView list items}.\n *\n *\n * See {@link module:ui/dropdown/utils~createDropdown} and {@link module:list/list~List}.\n *\n * @param {module:ui/dropdown/dropdownview~DropdownView} dropdownView A dropdown instance to which `ListVIew` will be added.\n * @param {Iterable.<module:ui/dropdown/utils~ListDropdownItemDefinition>} items\n * A collection of the list item definitions to populate the list.\n */\nexport function addListToDropdown(dropdownView, items) {\n    var locale = dropdownView.locale;\n    var listView = dropdownView.listView = new ListView(locale);\n    listView.items.bindTo(items).using(function (_ref) {\n        var type = _ref.type, model = _ref.model;\n        if (type === 'separator') {\n            return new ListSeparatorView(locale);\n        } else if (type === 'button' || type === 'switchbutton') {\n            var _buttonView;\n            var listItemView = new ListItemView(locale);\n            var buttonView;\n            if (type === 'button') {\n                buttonView = new ButtonView(locale);\n            } else {\n                buttonView = new SwitchButtonView(locale);\n            }\n            // Bind all model properties to the button view.\n            (_buttonView = buttonView).bind.apply(_buttonView, _toConsumableArray(Object.keys(model))).to(model);\n            buttonView.delegate('execute').to(listItemView);\n            listItemView.children.add(buttonView);\n            return listItemView;\n        }\n    });\n    dropdownView.panelView.children.add(listView);\n    listView.items.delegate('execute').to(dropdownView);\n}\n// Add a set of default behaviors to dropdown view.\n//\n// @param {module:ui/dropdown/dropdownview~DropdownView} dropdownView\nfunction addDefaultBehavior(dropdownView) {\n    closeDropdownOnBlur(dropdownView);\n    closeDropdownOnExecute(dropdownView);\n    focusDropdownContentsOnArrows(dropdownView);\n}\n// Adds a behavior to a dropdownView that closes opened dropdown when user clicks outside the dropdown.\n//\n// @param {module:ui/dropdown/dropdownview~DropdownView} dropdownView\nfunction closeDropdownOnBlur(dropdownView) {\n    dropdownView.on('render', function () {\n        clickOutsideHandler({\n            emitter: dropdownView,\n            activator: function activator() {\n                return dropdownView.isOpen;\n            },\n            callback: function callback() {\n                dropdownView.isOpen = false;\n            },\n            contextElements: [dropdownView.element]\n        });\n    });\n}\n// Adds a behavior to a dropdownView that closes the dropdown view on \"execute\" event.\n//\n// @param {module:ui/dropdown/dropdownview~DropdownView} dropdownView\nfunction closeDropdownOnExecute(dropdownView) {\n    // Close the dropdown when one of the list items has been executed.\n    dropdownView.on('execute', function (evt) {\n        // Toggling a switch button view should not close the dropdown.\n        if (evt.source instanceof SwitchButtonView) {\n            return;\n        }\n        dropdownView.isOpen = false;\n    });\n}\n// Adds a behavior to a dropdownView that focuses the dropdown's panel view contents on keystrokes.\n//\n// @param {module:ui/dropdown/dropdownview~DropdownView} dropdownView\nfunction focusDropdownContentsOnArrows(dropdownView) {\n    // If the dropdown panel is already open, the arrow down key should focus the first child of the #panelView.\n    dropdownView.keystrokes.set('arrowdown', function (data, cancel) {\n        if (dropdownView.isOpen) {\n            dropdownView.panelView.focus();\n            cancel();\n        }\n    });\n    // If the dropdown panel is already open, the arrow up key should focus the last child of the #panelView.\n    dropdownView.keystrokes.set('arrowup', function (data, cancel) {\n        if (dropdownView.isOpen) {\n            dropdownView.panelView.focusLast();\n            cancel();\n        }\n    });\n}    /**\n * A definition of the list item used by the {@link module:ui/dropdown/utils~addListToDropdown}\n * utility.\n *\n * @typedef {Object} module:ui/dropdown/utils~ListDropdownItemDefinition\n *\n * @property {String} type Either `'separator'`, `'button'` or `'switchbutton'`.\n * @property {module:ui/model~Model} [model] Model of the item (when **not** `'separator'`).\n * Its properties fuel the newly created list item (or its children, depending on the `type`).\n */","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.function.name.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/editableui/editableuiview\n */\n\nimport View from '../view';\n\n/**\n * The editable UI view class.\n *\n * @extends module:ui/view~View\n */\nvar EditableUIView = /*#__PURE__*/function (_View) {\n  /**\n   * Creates an instance of EditableUIView class.\n   *\n   * @param {module:utils/locale~Locale} [locale] The locale instance.\n   * @param {module:engine/view/view~View} editingView The editing view instance the editable is related to.\n   * @param {HTMLElement} [editableElement] The editable element. If not specified, this view\n   * should create it. Otherwise, the existing element should be used.\n   */\n  function EditableUIView(locale, editingView, editableElement) {\n    var _this;\n    _classCallCheck(this, EditableUIView);\n    _this = _callSuper(this, EditableUIView, [locale]);\n    _this.setTemplate({\n      tag: 'div',\n      attributes: {\n        class: ['ck', 'ck-content', 'ck-editor__editable', 'ck-rounded-corners'],\n        lang: locale.contentLanguage,\n        dir: locale.contentLanguageDirection\n      }\n    });\n\n    /**\n     * The name of the editable UI view.\n     *\n     * @member {String} #name\n     */\n    _this.name = null;\n\n    /**\n     * Controls whether the editable is focused, i.e. the user is typing in it.\n     *\n     * @observable\n     * @member {Boolean} #isFocused\n     */\n    _this.set('isFocused', false);\n\n    /**\n     * The element which is the main editable element (usually the one with `contentEditable=\"true\"`).\n     *\n     * @private\n     * @member {HTMLElement} #_editableElement\n     */\n    _this._editableElement = editableElement;\n\n    /**\n     * Whether an external {@link #_editableElement} was passed into the constructor, which also means\n     * the view will not render its {@link #template}.\n     *\n     * @private\n     * @member {Boolean} #_hasExternalElement\n     */\n    _this._hasExternalElement = !!_this._editableElement;\n\n    /**\n     * The editing view instance the editable is related to. Editable uses the editing\n     * view to dynamically modify its certain DOM attributes after {@link #render rendering}.\n     *\n     * **Note**: The DOM attributes are performed by the editing view and not UI\n     * {@link module:ui/view~View#bindTemplate template bindings} because once rendered,\n     * the editable DOM element must remain under the full control of the engine to work properly.\n     *\n     * @protected\n     * @member {module:engine/view/view~View} #isFocused\n     */\n    _this._editingView = editingView;\n    return _this;\n  }\n\n  /**\n   * Renders the view by either applying the {@link #template} to the existing\n   * {@link #_editableElement} or assigning {@link #element} as {@link #_editableElement}.\n   */\n  _inherits(EditableUIView, _View);\n  return _createClass(EditableUIView, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n      _superPropGet(EditableUIView, \"render\", this, 3)([]);\n      if (this._hasExternalElement) {\n        this.template.apply(this.element = this._editableElement);\n      } else {\n        this._editableElement = this.element;\n      }\n      this.on('change:isFocused', function () {\n        return _this2._updateIsFocusedClasses();\n      });\n      this._updateIsFocusedClasses();\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this._hasExternalElement) {\n        this.template.revert(this._editableElement);\n      }\n      _superPropGet(EditableUIView, \"destroy\", this, 3)([]);\n    }\n\n    /**\n     * Updates the `ck-focused` and `ck-blurred` CSS classes on the {@link #element} according to\n     * the {@link #isFocused} property value using the {@link #_editingView editing view} API.\n     *\n     * @private\n     */\n  }, {\n    key: \"_updateIsFocusedClasses\",\n    value: function _updateIsFocusedClasses() {\n      var editingView = this._editingView;\n      if (editingView.isRenderingInProgress) {\n        updateAfterRender(this);\n      } else {\n        update(this);\n      }\n      function update(view) {\n        editingView.change(function (writer) {\n          var viewRoot = editingView.document.getRoot(view.name);\n          writer.addClass(view.isFocused ? 'ck-focused' : 'ck-blurred', viewRoot);\n          writer.removeClass(view.isFocused ? 'ck-blurred' : 'ck-focused', viewRoot);\n        });\n      }\n\n      // In a case of a multi-root editor, a callback will be attached more than once (one callback for each root).\n      // While executing one callback the `isRenderingInProgress` observable is changing what causes executing another\n      // callback and render is called inside the already pending render.\n      // We need to be sure that callback is executed only when the value has changed from `true` to `false`.\n      // See https://github.com/ckeditor/ckeditor5/issues/1676.\n      function updateAfterRender(view) {\n        editingView.once('change:isRenderingInProgress', function (evt, name, value) {\n          if (!value) {\n            update(view);\n          } else {\n            updateAfterRender(view);\n          }\n        });\n      }\n    }\n  }]);\n}(View);\nexport { EditableUIView as default };","import _classCallCheck from '/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js';\nimport _createClass from '/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js';\nimport _callSuper from '/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js';\nimport _superPropGet from '/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js';\nimport _inherits from '/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js';\nimport 'core-js/modules/es.function.name.js';\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/editableui/inline/inlineeditableuiview\n */\nimport EditableUIView from '../../editableui/editableuiview';\n/**\n * The inline editable UI class implementing an inline {@link module:ui/editableui/editableuiview~EditableUIView}.\n *\n * @extends module:ui/editableui/editableuiview~EditableUIView\n */\nvar InlineEditableUIView = /*#__PURE__*/\nfunction (_EditableUIView) {\n    /**\n   * Creates an instance of the InlineEditableUIView class.\n   *\n   * @param {module:utils/locale~Locale} [locale] The locale instance.\n   * @param {module:engine/view/view~View} editingView The editing view instance the editable is related to.\n   * @param {HTMLElement} [editableElement] The editable element. If not specified, the\n   * {@link module:ui/editableui/editableuiview~EditableUIView}\n   * will create it. Otherwise, the existing element will be used.\n   */\n    function InlineEditableUIView(locale, editingView, editableElement) {\n        var _this;\n        _classCallCheck(this, InlineEditableUIView);\n        _this = _callSuper(this, InlineEditableUIView, [\n            locale,\n            editingView,\n            editableElement\n        ]);\n        _this.extendTemplate({\n            attributes: {\n                role: 'textbox',\n                class: 'ck-editor__editable_inline'\n            }\n        });\n        return _this;\n    }\n    /**\n   * @inheritDoc\n   */\n    _inherits(InlineEditableUIView, _EditableUIView);\n    return _createClass(InlineEditableUIView, [{\n            key: 'render',\n            value: function render() {\n                var _this2 = this;\n                _superPropGet(InlineEditableUIView, 'render', this, 3)([]);\n                var editingView = this._editingView;\n                var t = this.t;\n                editingView.change(function (writer) {\n                    var viewRoot = editingView.document.getRoot(_this2.name);\n                    writer.setAttribute('aria-label', t('Rich Text Editor, %0', [_this2.name]), viewRoot);\n                });\n            }\n        }]);\n}(EditableUIView);\nexport {\n    InlineEditableUIView as default\n};","import _classCallCheck from '/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js';\nimport _createClass from '/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js';\nimport _callSuper from '/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js';\nimport _inherits from '/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js';\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/editorui/boxed/boxededitoruiview\n */\nimport EditorUIView from '../../editorui/editoruiview';\nimport LabelView from '../../label/labelview';\nimport uid from '@ckeditor/ckeditor5-utils/src/uid';\n/**\n * The boxed editor UI view class. This class represents an editor interface\n * consisting of a toolbar and an editable area, enclosed within a box.\n *\n * @extends module:ui/editorui/editoruiview~EditorUIView\n */\nvar BoxedEditorUIView = /*#__PURE__*/\nfunction (_EditorUIView) {\n    /**\n   * Creates an instance of the boxed editor UI view class.\n   *\n   * @param {module:utils/locale~Locale} locale The locale instance..\n   */\n    function BoxedEditorUIView(locale) {\n        var _this;\n        _classCallCheck(this, BoxedEditorUIView);\n        _this = _callSuper(this, BoxedEditorUIView, [locale]);\n        var ariaLabelUid = uid();\n        /**\n     * Collection of the child views located in the top (`.ck-editor__top`)\n     * area of the UI.\n     *\n     * @readonly\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n        _this.top = _this.createCollection();\n        /**\n     * Collection of the child views located in the main (`.ck-editor__main`)\n     * area of the UI.\n     *\n     * @readonly\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n        _this.main = _this.createCollection();\n        /**\n     * Voice label of the UI.\n     *\n     * @protected\n     * @readonly\n     * @member {module:ui/view~View} #_voiceLabelView\n     */\n        _this._voiceLabelView = _this._createVoiceLabel(ariaLabelUid);\n        _this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-reset',\n                    'ck-editor',\n                    'ck-rounded-corners'\n                ],\n                role: 'application',\n                dir: locale.uiLanguageDirection,\n                lang: locale.uiLanguage,\n                'aria-labelledby': 'ck-editor__aria-label_'.concat(ariaLabelUid)\n            },\n            children: [\n                _this._voiceLabelView,\n                {\n                    tag: 'div',\n                    attributes: {\n                        class: [\n                            'ck',\n                            'ck-editor__top',\n                            'ck-reset_all'\n                        ],\n                        role: 'presentation'\n                    },\n                    children: _this.top\n                },\n                {\n                    tag: 'div',\n                    attributes: {\n                        class: [\n                            'ck',\n                            'ck-editor__main'\n                        ],\n                        role: 'presentation'\n                    },\n                    children: _this.main\n                }\n            ]\n        });\n        return _this;\n    }\n    /**\n   * Creates a voice label view instance.\n   *\n   * @private\n   * @returns {module:ui/label/labelview~LabelView}\n   */\n    _inherits(BoxedEditorUIView, _EditorUIView);\n    return _createClass(BoxedEditorUIView, [{\n            key: '_createVoiceLabel',\n            value: function _createVoiceLabel(ariaLabelUid) {\n                var t = this.t;\n                var voiceLabel = new LabelView();\n                voiceLabel.text = t('Rich Text Editor');\n                voiceLabel.extendTemplate({\n                    attributes: {\n                        id: 'ck-editor__aria-label_'.concat(ariaLabelUid),\n                        class: 'ck-voice-label'\n                    }\n                });\n                return voiceLabel;\n            }\n        }]);\n}(EditorUIView);\nexport {\n    BoxedEditorUIView as default\n};","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/editorui/editoruiview\n */\n\n/* globals document */\n\nimport View from '../view';\nimport Template from '../template';\nimport '../../theme/components/editorui/editorui.css';\n\n/**\n * The editor UI view class. Base class for the editor main views.\n *\n * @extends module:ui/view~View\n */\nvar EditorUIView = /*#__PURE__*/function (_View) {\n  /**\n   * Creates an instance of the editor UI view class.\n   *\n   * @param {module:utils/locale~Locale} [locale] The locale instance.\n   */\n  function EditorUIView(locale) {\n    var _this;\n    _classCallCheck(this, EditorUIView);\n    _this = _callSuper(this, EditorUIView, [locale]);\n\n    /**\n     * Collection of the child views, detached from the DOM\n     * structure of the editor, like panels, icons etc.\n     *\n     * @readonly\n     * @member {module:ui/viewcollection~ViewCollection} #body\n     */\n    _this.body = _this.createCollection();\n\n    /**\n     * The element holding elements of the 'body' region.\n     *\n     * @private\n     * @member {HTMLElement} #_bodyCollectionContainer\n     */\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(EditorUIView, _View);\n  return _createClass(EditorUIView, [{\n    key: \"render\",\n    value: function render() {\n      _superPropGet(EditorUIView, \"render\", this, 3)([]);\n      this._renderBodyCollection();\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this._bodyCollectionContainer.remove();\n      return _superPropGet(EditorUIView, \"destroy\", this, 3)([]);\n    }\n\n    /**\n     * Creates and appends to `<body>` the {@link #body} collection container.\n     *\n     * @private\n     */\n  }, {\n    key: \"_renderBodyCollection\",\n    value: function _renderBodyCollection() {\n      var locale = this.locale;\n      var bodyElement = this._bodyCollectionContainer = new Template({\n        tag: 'div',\n        attributes: {\n          class: ['ck', 'ck-reset_all', 'ck-body', 'ck-rounded-corners'],\n          dir: locale.uiLanguageDirection\n        },\n        children: this.body\n      }).render();\n      document.body.appendChild(bodyElement);\n    }\n  }]);\n}(View);\nexport { EditorUIView as default };","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.find.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.object.to-string.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/focuscycler\n */\n\nimport global from '@ckeditor/ckeditor5-utils/src/dom/global';\n\n/**\n * A utility class that helps cycling over focusable {@link module:ui/view~View views} in a\n * {@link module:ui/viewcollection~ViewCollection} when the focus is tracked by the\n * {@link module:utils/focustracker~FocusTracker} instance. It helps implementing keyboard\n * navigation in HTML forms, toolbars, lists and the like.\n *\n * To work properly it requires:\n * * a collection of focusable (HTML `tabindex` attribute) views that implement the `focus()` method,\n * * an associated focus tracker to determine which view is focused.\n *\n * A simple cycler setup can look like this:\n *\n *\t\tconst focusables = new ViewCollection();\n *\t\tconst focusTracker = new FocusTracker();\n *\n *\t\t// Add focusable views to the focus tracker.\n *\t\tfocusTracker.add( ... );\n *\n * Then, the cycler can be used manually:\n *\n *\t\tconst cycler = new FocusCycler( { focusables, focusTracker } );\n *\n *\t\t// Will focus the first focusable view in #focusables.\n *\t\tcycler.focusFirst();\n *\n *\t\t// Will log the next focusable item in #focusables.\n *\t\tconsole.log( cycler.next );\n *\n * Alternatively, it can work side by side with the {@link module:utils/keystrokehandler~KeystrokeHandler}:\n *\n *\t\tconst keystrokeHandler = new KeystrokeHandler();\n *\n *\t\t// Activate the keystroke handler.\n *\t\tkeystrokeHandler.listenTo( sourceOfEvents );\n *\n *\t\tconst cycler = new FocusCycler( {\n *\t\t\tfocusables, focusTracker, keystrokeHandler,\n *\t\t\tactions: {\n *\t\t\t\t// When arrowup of arrowleft is detected by the #keystrokeHandler,\n *\t\t\t\t// focusPrevious() will be called on the cycler.\n *\t\t\t\tfocusPrevious: [ 'arrowup', 'arrowleft' ],\n *\t\t\t}\n *\t\t} );\n */\nvar FocusCycler = /*#__PURE__*/function () {\n  /**\n   * Creates an instance of the focus cycler utility.\n   *\n   * @param {Object} options Configuration options.\n   * @param {module:utils/collection~Collection|Object} options.focusables\n   * @param {module:utils/focustracker~FocusTracker} options.focusTracker\n   * @param {module:utils/keystrokehandler~KeystrokeHandler} [options.keystrokeHandler]\n   * @param {Object} [options.actions]\n   */\n  function FocusCycler(options) {\n    var _this = this;\n    _classCallCheck(this, FocusCycler);\n    Object.assign(this, options);\n\n    /**\n     * A {@link module:ui/view~View view} collection that the cycler operates on.\n     *\n     * @readonly\n     * @member {module:utils/collection~Collection} #focusables\n     */\n\n    /**\n     * A focus tracker instance that the cycler uses to determine the current focus\n     * state in {@link #focusables}.\n     *\n     * @readonly\n     * @member {module:utils/focustracker~FocusTracker} #focusTracker\n     */\n\n    /**\n     * An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}\n     * which can respond to certain keystrokes and cycle the focus.\n     *\n     * @readonly\n     * @member {module:utils/keystrokehandler~KeystrokeHandler} #keystrokeHandler\n     */\n\n    /**\n     * Actions that the cycler can take when a keystroke is pressed. Requires\n     * `options.keystrokeHandler` to be passed and working. When an action is\n     * performed, `preventDefault` and `stopPropagation` will be called on the event\n     * the keystroke fired in the DOM.\n     *\n     *\t\tactions: {\n     *\t\t\t// Will call #focusPrevious() when arrowleft or arrowup is pressed.\n     *\t\t\tfocusPrevious: [ 'arrowleft', 'arrowup' ],\n     *\n     *\t\t\t// Will call #focusNext() when arrowdown is pressed.\n     *\t\t\tfocusNext: 'arrowdown'\n     *\t\t}\n     *\n     * @readonly\n     * @member {Object} #actions\n     */\n\n    if (options.actions && options.keystrokeHandler) {\n      var _loop = function _loop(methodName) {\n        var actions = options.actions[methodName];\n        if (typeof actions == 'string') {\n          actions = [actions];\n        }\n        var _iterator = _createForOfIteratorHelper(actions),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var keystroke = _step.value;\n            options.keystrokeHandler.set(keystroke, function (data, cancel) {\n              _this[methodName]();\n              cancel();\n            });\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      };\n      for (var methodName in options.actions) {\n        _loop(methodName);\n      }\n    }\n  }\n\n  /**\n   * Returns the first focusable view in {@link #focusables}.\n   * Returns `null` if there is none.\n   *\n   * @readonly\n   * @member {module:ui/view~View|null} #first\n   */\n  return _createClass(FocusCycler, [{\n    key: \"first\",\n    get: function get() {\n      return this.focusables.find(isFocusable) || null;\n    }\n\n    /**\n     * Returns the last focusable view in {@link #focusables}.\n     * Returns `null` if there is none.\n     *\n     * @readonly\n     * @member {module:ui/view~View|null} #last\n     */\n  }, {\n    key: \"last\",\n    get: function get() {\n      return this.focusables.filter(isFocusable).slice(-1)[0] || null;\n    }\n\n    /**\n     * Returns the next focusable view in {@link #focusables} based on {@link #current}.\n     * Returns `null` if there is none.\n     *\n     * @readonly\n     * @member {module:ui/view~View|null} #next\n     */\n  }, {\n    key: \"next\",\n    get: function get() {\n      return this._getFocusableItem(1);\n    }\n\n    /**\n     * Returns the previous focusable view in {@link #focusables} based on {@link #current}.\n     * Returns `null` if there is none.\n     *\n     * @readonly\n     * @member {module:ui/view~View|null} #previous\n     */\n  }, {\n    key: \"previous\",\n    get: function get() {\n      return this._getFocusableItem(-1);\n    }\n\n    /**\n     * An index of the view in the {@link #focusables} which is focused according\n     * to {@link #focusTracker}. Returns `null` when there is no such view.\n     *\n     * @readonly\n     * @member {Number|null} #current\n     */\n  }, {\n    key: \"current\",\n    get: function get() {\n      var _this2 = this;\n      var index = null;\n\n      // There's no focused view in the focusables.\n      if (this.focusTracker.focusedElement === null) {\n        return null;\n      }\n      this.focusables.find(function (view, viewIndex) {\n        var focused = view.element === _this2.focusTracker.focusedElement;\n        if (focused) {\n          index = viewIndex;\n        }\n        return focused;\n      });\n      return index;\n    }\n\n    /**\n     * Focuses the {@link #first} item in {@link #focusables}.\n     */\n  }, {\n    key: \"focusFirst\",\n    value: function focusFirst() {\n      this._focus(this.first);\n    }\n\n    /**\n     * Focuses the {@link #last} item in {@link #focusables}.\n     */\n  }, {\n    key: \"focusLast\",\n    value: function focusLast() {\n      this._focus(this.last);\n    }\n\n    /**\n     * Focuses the {@link #next} item in {@link #focusables}.\n     */\n  }, {\n    key: \"focusNext\",\n    value: function focusNext() {\n      this._focus(this.next);\n    }\n\n    /**\n     * Focuses the {@link #previous} item in {@link #focusables}.\n     */\n  }, {\n    key: \"focusPrevious\",\n    value: function focusPrevious() {\n      this._focus(this.previous);\n    }\n\n    /**\n     * Focuses the given view if it exists.\n     *\n     * @protected\n     * @param {module:ui/view~View} view\n     */\n  }, {\n    key: \"_focus\",\n    value: function _focus(view) {\n      if (view) {\n        view.focus();\n      }\n    }\n\n    /**\n     * Returns the next or previous focusable view in {@link #focusables} with respect\n     * to {@link #current}.\n     *\n     * @protected\n     * @param {Number} step Either `1` for checking forward from {@link #current} or\n     * `-1` for checking backwards.\n     * @returns {module:ui/view~View|null}\n     */\n  }, {\n    key: \"_getFocusableItem\",\n    value: function _getFocusableItem(step) {\n      // Cache for speed.\n      var current = this.current;\n      var collectionLength = this.focusables.length;\n      if (!collectionLength) {\n        return null;\n      }\n\n      // Start from the beginning if no view is focused.\n      // https://github.com/ckeditor/ckeditor5-ui/issues/206\n      if (current === null) {\n        return this[step === 1 ? 'first' : 'last'];\n      }\n\n      // Cycle in both directions.\n      var index = (current + collectionLength + step) % collectionLength;\n      do {\n        var view = this.focusables.get(index);\n\n        // TODO: Check if view is visible.\n        if (isFocusable(view)) {\n          return view;\n        }\n\n        // Cycle in both directions.\n        index = (index + collectionLength + step) % collectionLength;\n      } while (index !== current);\n      return null;\n    }\n  }]);\n}(); // Checks whether a view is focusable.\n//\n// @private\n// @param {module:ui/view~View} view A view to be checked.\n// @returns {Boolean}\nexport { FocusCycler as default };\nfunction isFocusable(view) {\n  return !!(view.focus && global.window.getComputedStyle(view.element).display != 'none');\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.fill.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.trim.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* global DOMParser */\n\n/**\n * @module ui/icon/iconview\n */\n\nimport View from '../view';\nimport '../../theme/components/icon/icon.css';\n\n/**\n * The icon view class.\n *\n * @extends module:ui/view~View\n */\nvar IconView = /*#__PURE__*/function (_View) {\n  /**\n   * @inheritDoc\n   */\n  function IconView() {\n    var _this;\n    _classCallCheck(this, IconView);\n    _this = _callSuper(this, IconView);\n    var bind = _this.bindTemplate;\n\n    /**\n     * The SVG source of the icon.\n     *\n     * @observable\n     * @member {String} #content\n     */\n    _this.set('content', '');\n\n    /**\n     * This attribute specifies the boundaries to which the\n     * icon content should stretch.\n     *\n     * @observable\n     * @default '0 0 20 20'\n     * @member {String} #viewBox\n     */\n    _this.set('viewBox', '0 0 20 20');\n\n    /**\n     * The fill color of the child `path.ck-icon__fill`.\n     *\n     * @observable\n     * @default ''\n     * @member {String} #fillColor\n     */\n    _this.set('fillColor', '');\n    _this.setTemplate({\n      tag: 'svg',\n      ns: 'http://www.w3.org/2000/svg',\n      attributes: {\n        class: ['ck', 'ck-icon'],\n        viewBox: bind.to('viewBox')\n      }\n    });\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(IconView, _View);\n  return _createClass(IconView, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n      _superPropGet(IconView, \"render\", this, 3)([]);\n      this._updateXMLContent();\n      this._colorFillPaths();\n\n      // This is a hack for lack of innerHTML binding.\n      // See: https://github.com/ckeditor/ckeditor5-ui/issues/99.\n      this.on('change:content', function () {\n        _this2._updateXMLContent();\n        _this2._colorFillPaths();\n      });\n      this.on('change:fillColor', function () {\n        _this2._colorFillPaths();\n      });\n    }\n\n    /**\n     * Updates the {@link #element} with the value of {@link #content}.\n     *\n     * @private\n     */\n  }, {\n    key: \"_updateXMLContent\",\n    value: function _updateXMLContent() {\n      if (this.content) {\n        var parsed = new DOMParser().parseFromString(this.content.trim(), 'image/svg+xml');\n        var svg = parsed.querySelector('svg');\n        var viewBox = svg.getAttribute('viewBox');\n        if (viewBox) {\n          this.viewBox = viewBox;\n        }\n        this.element.innerHTML = '';\n        while (svg.childNodes.length > 0) {\n          this.element.appendChild(svg.childNodes[0]);\n        }\n      }\n    }\n\n    /**\n     * Fills all child `path.ck-icon__fill` with the `#fillColor`.\n     *\n     * @private\n     */\n  }, {\n    key: \"_colorFillPaths\",\n    value: function _colorFillPaths() {\n      var _this3 = this;\n      if (this.fillColor) {\n        this.element.querySelectorAll('.ck-icon__fill').forEach(function (path) {\n          path.style.fill = _this3.fillColor;\n        });\n      }\n    }\n  }]);\n}(View);\nexport { IconView as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/inputtext/inputtextview\n */\n\nimport View from '../view';\nimport '../../theme/components/inputtext/inputtext.css';\n\n/**\n * The text input view class.\n *\n * @extends module:ui/view~View\n */\nvar InputTextView = /*#__PURE__*/function (_View) {\n  /**\n   * @inheritDoc\n   */\n  function InputTextView(locale) {\n    var _this;\n    _classCallCheck(this, InputTextView);\n    _this = _callSuper(this, InputTextView, [locale]);\n\n    /**\n     * The value of the input.\n     *\n     * @observable\n     * @member {String} #value\n     */\n    _this.set('value');\n\n    /**\n     * The `id` attribute of the input (i.e. to pair with a `<label>` element).\n     *\n     * @observable\n     * @member {String} #id\n     */\n    _this.set('id');\n\n    /**\n     * The `placeholder` attribute of the input.\n     *\n     * @observable\n     * @member {String} #placeholder\n     */\n    _this.set('placeholder');\n\n    /**\n     * Controls whether the input view is in read-only mode.\n     *\n     * @observable\n     * @member {Boolean} #isReadOnly\n     */\n    _this.set('isReadOnly', false);\n\n    /**\n     * Set to `true` when the field has some error. Usually controlled via\n     * {@link module:ui/labeledinput/labeledinputview~LabeledInputView#errorText}.\n     *\n     * @observable\n     * @member {Boolean} #hasError\n     */\n    _this.set('hasError', false);\n\n    /**\n     * The `id` of the element describing this field, e.g. when it has\n     * some error, it helps screen readers read the error text.\n     *\n     * @observable\n     * @member {Boolean} #ariaDescribedById\n     */\n    _this.set('ariaDescribedById');\n    var bind = _this.bindTemplate;\n    _this.setTemplate({\n      tag: 'input',\n      attributes: {\n        type: 'text',\n        class: ['ck', 'ck-input', 'ck-input-text', bind.if('hasError', 'ck-error')],\n        id: bind.to('id'),\n        placeholder: bind.to('placeholder'),\n        readonly: bind.to('isReadOnly'),\n        'aria-invalid': bind.if('hasError', true),\n        'aria-describedby': bind.to('ariaDescribedById')\n      },\n      on: {\n        input: bind.to('input')\n      }\n    });\n\n    /**\n     * Fired when the user types in the input. Corresponds to the native\n     * DOM `input` event.\n     *\n     * @event input\n     */\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(InputTextView, _View);\n  return _createClass(InputTextView, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n      _superPropGet(InputTextView, \"render\", this, 3)([]);\n      var setValue = function setValue(value) {\n        _this2.element.value = !value && value !== 0 ? '' : value;\n      };\n      setValue(this.value);\n\n      // Bind `this.value` to the DOM element's value.\n      // We cannot use `value` DOM attribute because removing it on Edge does not clear the DOM element's value property.\n      this.on('change:value', function (evt, name, value) {\n        setValue(value);\n      });\n    }\n\n    /**\n     * Moves the focus to the input and selects the value.\n     */\n  }, {\n    key: \"select\",\n    value: function select() {\n      this.element.select();\n    }\n\n    /**\n     * Focuses the input.\n     */\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      this.element.focus();\n    }\n  }]);\n}(View);\nexport { InputTextView as default };","import _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/label/labelview\n */\n\nimport View from '../view';\nimport '../../theme/components/label/label.css';\n\n/**\n * The label view class.\n *\n * @extends module:ui/view~View\n */\nvar LabelView = /*#__PURE__*/function (_View) {\n  /**\n   * @inheritDoc\n   */\n  function LabelView(locale) {\n    var _this;\n    _classCallCheck(this, LabelView);\n    _this = _callSuper(this, LabelView, [locale]);\n\n    /**\n     * The text of the label.\n     *\n     * @observable\n     * @member {String} #text\n     */\n    _this.set('text');\n\n    /**\n     * The `for` attribute of the label (i.e. to pair with an `<input>` element).\n     *\n     * @observable\n     * @member {String} #for\n     */\n    _this.set('for');\n    var bind = _this.bindTemplate;\n    _this.setTemplate({\n      tag: 'label',\n      attributes: {\n        class: ['ck', 'ck-label'],\n        for: bind.to('for')\n      },\n      children: [{\n        text: bind.to('text')\n      }]\n    });\n    return _this;\n  }\n  _inherits(LabelView, _View);\n  return _createClass(LabelView);\n}(View);\nexport { LabelView as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/labeledinput/labeledinputview\n */\n\nimport View from '../view';\nimport uid from '@ckeditor/ckeditor5-utils/src/uid';\nimport LabelView from '../label/labelview';\nimport '../../theme/components/labeledinput/labeledinput.css';\n\n/**\n * The labeled input view class.\n *\n * @extends module:ui/view~View\n */\nvar LabeledInputView = /*#__PURE__*/function (_View) {\n  /**\n   * Creates an instance of the labeled input view class.\n   *\n   * @param {module:utils/locale~Locale} locale The locale instance.\n   * @param {Function} InputView Constructor of the input view.\n   */\n  function LabeledInputView(locale, InputView) {\n    var _this;\n    _classCallCheck(this, LabeledInputView);\n    _this = _callSuper(this, LabeledInputView, [locale]);\n    var inputUid = \"ck-input-\".concat(uid());\n    var statusUid = \"ck-status-\".concat(uid());\n\n    /**\n     * The text of the label.\n     *\n     * @observable\n     * @member {String} #label\n     */\n    _this.set('label');\n\n    /**\n     * The value of the input.\n     *\n     * @observable\n     * @member {String} #value\n     */\n    _this.set('value');\n\n    /**\n     * Controls whether the component is in read-only mode.\n     *\n     * @observable\n     * @member {Boolean} #isReadOnly\n     */\n    _this.set('isReadOnly', false);\n\n    /**\n     * The validation error text. When set, it will be displayed\n     * next to the {@link #inputView} as a typical validation error message.\n     * Set it to `null` to hide the message.\n     *\n     * **Note:** Setting this property to anything but `null` will automatically\n     * make the {@link module:ui/inputtext/inputtextview~InputTextView#hasError `hasError`}\n     * of the {@link #inputView} `true`.\n     *\n     * **Note:** Typing in the {@link #inputView} which fires the\n     * {@link module:ui/inputtext/inputtextview~InputTextView#event:input `input` event}\n     * resets this property back to `null`, indicating that the input field can be re–validated.\n     *\n     * @observable\n     * @member {String|null} #errorText\n     */\n    _this.set('errorText', null);\n\n    /**\n     * The additional information text displayed next to the {@link #inputView} which can\n     * be used to inform the user about the purpose of the input, provide help or hints.\n     *\n     * Set it to `null` to hide the message.\n     *\n     * **Note:** This text will be displayed in the same place as {@link #errorText} but the\n     * latter always takes precedence: if the {@link #errorText} is set, it replaces\n     * {@link #errorText} for as long as the value of the input is invalid.\n     *\n     * @observable\n     * @member {String|null} #infoText\n     */\n    _this.set('infoText', null);\n\n    /**\n     * The label view.\n     *\n     * @member {module:ui/label/labelview~LabelView} #labelView\n     */\n    _this.labelView = _this._createLabelView(inputUid);\n\n    /**\n     * The input view.\n     *\n     * @member {module:ui/inputtext/inputtextview~InputTextView} #inputView\n     */\n    _this.inputView = _this._createInputView(InputView, inputUid, statusUid);\n\n    /**\n     * The status view for the {@link #inputView}. It displays {@link #errorText} and\n     * {@link #infoText}.\n     *\n     * @member {module:ui/view~View} #statusView\n     */\n    _this.statusView = _this._createStatusView(statusUid);\n\n    /**\n     * The combined status text made of {@link #errorText} and {@link #infoText}.\n     * Note that when present, {@link #errorText} always takes precedence in the\n     * status.\n     *\n     * @see #errorText\n     * @see #infoText\n     * @see #statusView\n     * @private\n     * @observable\n     * @member {String|null} #_statusText\n     */\n    _this.bind('_statusText').to(_this, 'errorText', _this, 'infoText', function (errorText, infoText) {\n      return errorText || infoText;\n    });\n    var bind = _this.bindTemplate;\n    _this.setTemplate({\n      tag: 'div',\n      attributes: {\n        class: ['ck', 'ck-labeled-input', bind.if('isReadOnly', 'ck-disabled')]\n      },\n      children: [_this.labelView, _this.inputView, _this.statusView]\n    });\n    return _this;\n  }\n\n  /**\n   * Creates label view class instance and bind with view.\n   *\n   * @private\n   * @param {String} id Unique id to set as labelView#for attribute.\n   * @returns {module:ui/label/labelview~LabelView}\n   */\n  _inherits(LabeledInputView, _View);\n  return _createClass(LabeledInputView, [{\n    key: \"_createLabelView\",\n    value: function _createLabelView(id) {\n      var labelView = new LabelView(this.locale);\n      labelView.for = id;\n      labelView.bind('text').to(this, 'label');\n      return labelView;\n    }\n\n    /**\n     * Creates input view class instance and bind with view.\n     *\n     * @private\n     * @param {Function} InputView Input view constructor.\n     * @param {String} inputUid Unique id to set as inputView#id attribute.\n     * @param {String} statusUid Unique id of the status for the input's `aria-describedby` attribute.\n     * @returns {module:ui/inputtext/inputtextview~InputTextView}\n     */\n  }, {\n    key: \"_createInputView\",\n    value: function _createInputView(InputView, inputUid, statusUid) {\n      var _this2 = this;\n      var inputView = new InputView(this.locale, statusUid);\n      inputView.id = inputUid;\n      inputView.ariaDescribedById = statusUid;\n      inputView.bind('value').to(this);\n      inputView.bind('isReadOnly').to(this);\n      inputView.bind('hasError').to(this, 'errorText', function (value) {\n        return !!value;\n      });\n      inputView.on('input', function () {\n        // UX: Make the error text disappear and disable the error indicator as the user\n        // starts fixing the errors.\n        _this2.errorText = null;\n      });\n      return inputView;\n    }\n\n    /**\n     * Creates the status view instance. It displays {@link #errorText} and {@link #infoText}\n     * next to the {@link #inputView}. See {@link #_statusText}.\n     *\n     * @private\n     * @param {String} statusUid Unique id of the status, shared with the input's `aria-describedby` attribute.\n     * @returns {module:ui/view~View}\n     */\n  }, {\n    key: \"_createStatusView\",\n    value: function _createStatusView(statusUid) {\n      var statusView = new View(this.locale);\n      var bind = this.bindTemplate;\n      statusView.setTemplate({\n        tag: 'div',\n        attributes: {\n          class: ['ck', 'ck-labeled-input__status', bind.if('errorText', 'ck-labeled-input__status_error'), bind.if('_statusText', 'ck-hidden', function (value) {\n            return !value;\n          })],\n          id: statusUid,\n          role: bind.if('errorText', 'alert')\n        },\n        children: [{\n          text: bind.to('_statusText')\n        }]\n      });\n      return statusView;\n    }\n\n    /**\n     * Moves the focus to the input and selects the value.\n     */\n  }, {\n    key: \"select\",\n    value: function select() {\n      this.inputView.select();\n    }\n\n    /**\n     * Focuses the input.\n     */\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      this.inputView.focus();\n    }\n  }]);\n}(View);\nexport { LabeledInputView as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/list/listitemview\n */\n\nimport View from '../view';\n\n/**\n * The list item view class.\n *\n * @extends module:ui/view~View\n */\nvar ListItemView = /*#__PURE__*/function (_View) {\n  /**\n   * @inheritDoc\n   */\n  function ListItemView(locale) {\n    var _this;\n    _classCallCheck(this, ListItemView);\n    _this = _callSuper(this, ListItemView, [locale]);\n\n    /**\n     * Collection of the child views inside of the list item {@link #element}.\n     *\n     * @readonly\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n    _this.children = _this.createCollection();\n    _this.setTemplate({\n      tag: 'li',\n      attributes: {\n        class: ['ck', 'ck-list__item']\n      },\n      children: _this.children\n    });\n    return _this;\n  }\n\n  /**\n   * Focuses the list item.\n   */\n  _inherits(ListItemView, _View);\n  return _createClass(ListItemView, [{\n    key: \"focus\",\n    value: function focus() {\n      this.children.first.focus();\n    }\n  }]);\n}(View);\nexport { ListItemView as default };","import _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/list/listseparatorview\n */\n\nimport View from '../view';\n\n/**\n * The list separator view class.\n *\n * @extends module:ui/view~View\n */\nvar ListSeparatorView = /*#__PURE__*/function (_View) {\n  /**\n   * @inheritDoc\n   */\n  function ListSeparatorView(locale) {\n    var _this;\n    _classCallCheck(this, ListSeparatorView);\n    _this = _callSuper(this, ListSeparatorView, [locale]);\n    _this.setTemplate({\n      tag: 'li',\n      attributes: {\n        class: ['ck', 'ck-list__separator']\n      }\n    });\n    return _this;\n  }\n  _inherits(ListSeparatorView, _View);\n  return _createClass(ListSeparatorView);\n}(View);\nexport { ListSeparatorView as default };","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/list/listview\n */\n\nimport View from '../view';\nimport FocusTracker from '@ckeditor/ckeditor5-utils/src/focustracker';\nimport FocusCycler from '../focuscycler';\nimport KeystrokeHandler from '@ckeditor/ckeditor5-utils/src/keystrokehandler';\nimport '../../theme/components/list/list.css';\n\n/**\n * The list view class.\n *\n * @extends module:ui/view~View\n * @implements module:ui/dropdown/dropdownpanelfocusable~DropdownPanelFocusable\n */\nvar ListView = /*#__PURE__*/function (_View) {\n  /**\n   * @inheritDoc\n   */\n  function ListView() {\n    var _this;\n    _classCallCheck(this, ListView);\n    _this = _callSuper(this, ListView);\n\n    /**\n     * Collection of the child list views.\n     *\n     * @readonly\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n    _this.items = _this.createCollection();\n\n    /**\n     * Tracks information about DOM focus in the list.\n     *\n     * @readonly\n     * @member {module:utils/focustracker~FocusTracker}\n     */\n    _this.focusTracker = new FocusTracker();\n\n    /**\n     * Instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.\n     *\n     * @readonly\n     * @member {module:utils/keystrokehandler~KeystrokeHandler}\n     */\n    _this.keystrokes = new KeystrokeHandler();\n\n    /**\n     * Helps cycling over focusable {@link #items} in the list.\n     *\n     * @readonly\n     * @protected\n     * @member {module:ui/focuscycler~FocusCycler}\n     */\n    _this._focusCycler = new FocusCycler({\n      focusables: _this.items,\n      focusTracker: _this.focusTracker,\n      keystrokeHandler: _this.keystrokes,\n      actions: {\n        // Navigate list items backwards using the arrowup key.\n        focusPrevious: 'arrowup',\n        // Navigate toolbar items forwards using the arrowdown key.\n        focusNext: 'arrowdown'\n      }\n    });\n    _this.setTemplate({\n      tag: 'ul',\n      attributes: {\n        class: ['ck', 'ck-reset', 'ck-list']\n      },\n      children: _this.items\n    });\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(ListView, _View);\n  return _createClass(ListView, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n      _superPropGet(ListView, \"render\", this, 3)([]);\n\n      // Items added before rendering should be known to the #focusTracker.\n      var _iterator = _createForOfIteratorHelper(this.items),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var item = _step.value;\n          this.focusTracker.add(item.element);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      this.items.on('add', function (evt, item) {\n        _this2.focusTracker.add(item.element);\n      });\n      this.items.on('remove', function (evt, item) {\n        _this2.focusTracker.remove(item.element);\n      });\n\n      // Start listening for the keystrokes coming from #element.\n      this.keystrokes.listenTo(this.element);\n    }\n\n    /**\n     * Focuses the first focusable in {@link #items}.\n     */\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      this._focusCycler.focusFirst();\n    }\n\n    /**\n     * Focuses the last focusable in {@link #items}.\n     */\n  }, {\n    key: \"focusLast\",\n    value: function focusLast() {\n      this._focusCycler.focusLast();\n    }\n  }]);\n}(View);\nexport { ListView as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.function.name.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md.\n */\n\n/**\n * @module ui/panel/balloon/balloonpanelview\n */\n\nimport View from '../../view';\nimport { getOptimalPosition } from '@ckeditor/ckeditor5-utils/src/dom/position';\nimport isRange from '@ckeditor/ckeditor5-utils/src/dom/isrange';\nimport toUnit from '@ckeditor/ckeditor5-utils/src/dom/tounit';\nimport global from '@ckeditor/ckeditor5-utils/src/dom/global';\nimport { isElement } from 'lodash-es';\nimport '../../../theme/components/panel/balloonpanel.css';\nvar toPx = toUnit('px');\nvar defaultLimiterElement = global.document.body;\n\n/**\n * The balloon panel view class.\n *\n * A floating container which can\n * {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView#pin pin} to any\n * {@link module:utils/dom/position~Options#target target} in the DOM and remain in that position\n * e.g. when the web page is scrolled.\n *\n * The balloon panel can be used to display contextual, non-blocking UI like forms, toolbars and\n * the like in its {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView#content} view\n * collection.\n *\n * There is a number of {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.defaultPositions}\n * that the balloon can use, automatically switching from one to another when the viewport space becomes\n * scarce to keep the balloon visible to the user as long as it is possible. The balloon will also\n * accept any custom position set provided by the user compatible with the\n * {@link module:utils/dom/position~Options options}.\n *\n *\t\tconst panel = new BalloonPanelView( locale );\n *\t\tconst childView = new ChildView();\n *\t\tconst positions = BalloonPanelView.defaultPositions;\n *\n *\t\tpanel.render();\n *\n *\t\t// Add a child view to the panel's content collection.\n *\t\tpanel.content.add( childView );\n *\n *\t\t// Start pinning the panel to an element with the \"target\" id DOM.\n *\t\t// The balloon will remain pinned until unpin() is called.\n *\t\tpanel.pin( {\n *\t\t\ttarget: document.querySelector( '#target' ),\n *\t\t\tpositions: [\n *\t\t\t\tpositions.northArrowSouth,\n *\t\t\t\tpositions.southArrowNorth\n *\t\t\t]\n *\t\t} );\n *\n * @extends module:ui/view~View\n */\nvar BalloonPanelView = /*#__PURE__*/function (_View) {\n  /**\n   * @inheritDoc\n   */\n  function BalloonPanelView(locale) {\n    var _this;\n    _classCallCheck(this, BalloonPanelView);\n    _this = _callSuper(this, BalloonPanelView, [locale]);\n    var bind = _this.bindTemplate;\n\n    /**\n     * The absolute top position of the balloon panel in pixels.\n     *\n     * @observable\n     * @default 0\n     * @member {Number} #top\n     */\n    _this.set('top', 0);\n\n    /**\n     * The absolute left position of the balloon panel in pixels.\n     *\n     * @observable\n     * @default 0\n     * @member {Number} #left\n     */\n    _this.set('left', 0);\n\n    /**\n     * The balloon panel's current position. The position name is reflected in the CSS class set\n     * to the balloon, i.e. `.ck-balloon-panel_arrow_nw` for the \"arrow_nw\" position. The class\n     * controls the minor aspects of the balloon's visual appearance like the placement\n     * of an {@link #withArrow arrow}. To support a new position, an additional CSS must be created.\n     *\n     * Default position names correspond with\n     * {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.defaultPositions}.\n     *\n     * See the {@link #attachTo} and {@link #pin} methods to learn about custom balloon positions.\n     *\n     * @observable\n     * @default 'arrow_nw'\n     * @member {'arrow_nw'|'arrow_ne'|'arrow_sw'|'arrow_se'} #position\n     */\n    _this.set('position', 'arrow_nw');\n\n    /**\n     * Controls whether the balloon panel is visible or not.\n     *\n     * @observable\n     * @default false\n     * @member {Boolean} #isVisible\n     */\n    _this.set('isVisible', false);\n\n    /**\n     * Controls whether the balloon panel has an arrow. The presence of the arrow\n     * is reflected in the `ck-balloon-panel_with-arrow` CSS class.\n     *\n     * @observable\n     * @default true\n     * @member {Boolean} #withArrow\n     */\n    _this.set('withArrow', true);\n\n    /**\n     * An additional CSS class added to the {@link #element}.\n     *\n     * @observable\n     * @member {String} #class\n     */\n    _this.set('class');\n\n    /**\n     * A callback that starts pinning the panel when {@link #isVisible} gets\n     * `true`. Used by {@link #pin}.\n     *\n     * @private\n     * @member {Function} #_pinWhenIsVisibleCallback\n     */\n\n    /**\n     * A collection of the child views that creates the balloon panel contents.\n     *\n     * @readonly\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n    _this.content = _this.createCollection();\n    _this.setTemplate({\n      tag: 'div',\n      attributes: {\n        class: ['ck', 'ck-balloon-panel', bind.to('position', function (value) {\n          return \"ck-balloon-panel_\".concat(value);\n        }), bind.if('isVisible', 'ck-balloon-panel_visible'), bind.if('withArrow', 'ck-balloon-panel_with-arrow'), bind.to('class')],\n        style: {\n          top: bind.to('top', toPx),\n          left: bind.to('left', toPx)\n        }\n      },\n      children: _this.content\n    });\n    return _this;\n  }\n\n  /**\n   * Shows the panel.\n   *\n   * See {@link #isVisible}.\n   */\n  _inherits(BalloonPanelView, _View);\n  return _createClass(BalloonPanelView, [{\n    key: \"show\",\n    value: function show() {\n      this.isVisible = true;\n    }\n\n    /**\n     * Hides the panel.\n     *\n     * See {@link #isVisible}.\n     */\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.isVisible = false;\n    }\n\n    /**\n     * Attaches the panel to a specified {@link module:utils/dom/position~Options#target} with a\n     * smart positioning heuristics that chooses from available positions to make sure the panel\n     * is visible to the user i.e. within the limits of the viewport.\n     *\n     * This method accepts configuration {@link module:utils/dom/position~Options options}\n     * to set the `target`, optional `limiter` and `positions` the balloon should choose from.\n     *\n     *\t\tconst panel = new BalloonPanelView( locale );\n     *\t\tconst positions = BalloonPanelView.defaultPositions;\n     *\n     *\t\tpanel.render();\n     *\n     *\t\t// Attach the panel to an element with the \"target\" id DOM.\n     *\t\tpanel.attachTo( {\n     *\t\t\ttarget: document.querySelector( '#target' ),\n     *\t\t\tpositions: [\n     *\t\t\t\tpositions.northArrowSouth,\n     *\t\t\t\tpositions.southArrowNorth\n     *\t\t\t]\n     *\t\t} );\n     *\n     * **Note**: Attaching the panel will also automatically {@link #show} it.\n     *\n     * **Note**: An attached panel will not follow its target when the window is scrolled or resized.\n     * See the {@link #pin} method for a more permanent positioning strategy.\n     *\n     * @param {module:utils/dom/position~Options} options Positioning options compatible with\n     * {@link module:utils/dom/position~getOptimalPosition}. Default `positions` array is\n     * {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.defaultPositions}.\n     */\n  }, {\n    key: \"attachTo\",\n    value: function attachTo(options) {\n      this.show();\n      var defaultPositions = BalloonPanelView.defaultPositions;\n      var positionOptions = Object.assign({}, {\n        element: this.element,\n        positions: [defaultPositions.southArrowNorth, defaultPositions.southArrowNorthWest, defaultPositions.southArrowNorthEast, defaultPositions.northArrowSouth, defaultPositions.northArrowSouthWest, defaultPositions.northArrowSouthEast],\n        limiter: defaultLimiterElement,\n        fitInViewport: true\n      }, options);\n      var optimalPosition = BalloonPanelView._getOptimalPosition(positionOptions);\n\n      // Usually browsers make some problems with super accurate values like 104.345px\n      // so it is better to use int values.\n      var left = parseInt(optimalPosition.left);\n      var top = parseInt(optimalPosition.top);\n      var position = optimalPosition.name;\n      Object.assign(this, {\n        top: top,\n        left: left,\n        position: position\n      });\n    }\n\n    /**\n     * Works the same way as the {@link #attachTo} method except that the position of the panel is\n     * continuously updated when:\n     *\n     * * any ancestor of the {@link module:utils/dom/position~Options#target}\n     * or {@link module:utils/dom/position~Options#limiter} is scrolled,\n     * * the browser window gets resized or scrolled.\n     *\n     * Thanks to that, the panel always sticks to the {@link module:utils/dom/position~Options#target}\n     * and is immune to the changing environment.\n     *\n     *\t\tconst panel = new BalloonPanelView( locale );\n     *\t\tconst positions = BalloonPanelView.defaultPositions;\n     *\n     *\t\tpanel.render();\n     *\n     *\t\t// Pin the panel to an element with the \"target\" id DOM.\n     *\t\tpanel.pin( {\n     *\t\t\ttarget: document.querySelector( '#target' ),\n     *\t\t\tpositions: [\n     *\t\t\t\tpositions.northArrowSouth,\n     *\t\t\t\tpositions.southArrowNorth\n     *\t\t\t]\n     *\t\t} );\n     *\n     * To leave the pinned state, use the {@link #unpin} method.\n     *\n     * **Note**: Pinning the panel will also automatically {@link #show} it.\n     *\n     * @param {module:utils/dom/position~Options} options Positioning options compatible with\n     * {@link module:utils/dom/position~getOptimalPosition}. Default `positions` array is\n     * {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.defaultPositions}.\n     */\n  }, {\n    key: \"pin\",\n    value: function pin(options) {\n      var _this2 = this;\n      this.unpin();\n      this._pinWhenIsVisibleCallback = function () {\n        if (_this2.isVisible) {\n          _this2._startPinning(options);\n        } else {\n          _this2._stopPinning();\n        }\n      };\n      this._startPinning(options);\n\n      // Control the state of the listeners depending on whether the panel is visible\n      // or not.\n      // TODO: Use on() (https://github.com/ckeditor/ckeditor5-utils/issues/144).\n      this.listenTo(this, 'change:isVisible', this._pinWhenIsVisibleCallback);\n    }\n\n    /**\n     * Stops pinning the panel, as set up by {@link #pin}.\n     */\n  }, {\n    key: \"unpin\",\n    value: function unpin() {\n      if (this._pinWhenIsVisibleCallback) {\n        // Deactivate listeners attached by pin().\n        this._stopPinning();\n\n        // Deactivate the panel pin() control logic.\n        // TODO: Use off() (https://github.com/ckeditor/ckeditor5-utils/issues/144).\n        this.stopListening(this, 'change:isVisible', this._pinWhenIsVisibleCallback);\n        this._pinWhenIsVisibleCallback = null;\n        this.hide();\n      }\n    }\n\n    /**\n     * Starts managing the pinned state of the panel. See {@link #pin}.\n     *\n     * @private\n     * @param {module:utils/dom/position~Options} options Positioning options compatible with\n     * {@link module:utils/dom/position~getOptimalPosition}.\n     */\n  }, {\n    key: \"_startPinning\",\n    value: function _startPinning(options) {\n      var _this3 = this;\n      this.attachTo(options);\n      var targetElement = getDomElement(options.target);\n      var limiterElement = options.limiter ? getDomElement(options.limiter) : defaultLimiterElement;\n\n      // Then we need to listen on scroll event of eny element in the document.\n      this.listenTo(global.document, 'scroll', function (evt, domEvt) {\n        var scrollTarget = domEvt.target;\n\n        // The position needs to be updated if the positioning target is within the scrolled element.\n        var isWithinScrollTarget = targetElement && scrollTarget.contains(targetElement);\n\n        // The position needs to be updated if the positioning limiter is within the scrolled element.\n        var isLimiterWithinScrollTarget = limiterElement && scrollTarget.contains(limiterElement);\n\n        // The positioning target and/or limiter can be a Rect, object etc..\n        // There's no way to optimize the listener then.\n        if (isWithinScrollTarget || isLimiterWithinScrollTarget || !targetElement || !limiterElement) {\n          _this3.attachTo(options);\n        }\n      }, {\n        useCapture: true\n      });\n\n      // We need to listen on window resize event and update position.\n      this.listenTo(global.window, 'resize', function () {\n        _this3.attachTo(options);\n      });\n    }\n\n    /**\n     * Stops managing the pinned state of the panel. See {@link #pin}.\n     *\n     * @private\n     */\n  }, {\n    key: \"_stopPinning\",\n    value: function _stopPinning() {\n      this.stopListening(global.document, 'scroll');\n      this.stopListening(global.window, 'resize');\n    }\n  }]);\n}(View); // Returns the DOM element for given object or null, if there is none,\n// e.g. when the passed object is a Rect instance or so.\n//\n// @private\n// @param {*} object\n// @returns {HTMLElement|null}\nexport { BalloonPanelView as default };\nfunction getDomElement(object) {\n  if (isElement(object)) {\n    return object;\n  }\n  if (isRange(object)) {\n    return object.commonAncestorContainer;\n  }\n  if (typeof object == 'function') {\n    return getDomElement(object());\n  }\n  return null;\n}\n\n/**\n * A horizontal offset of the arrow tip from the edge of the balloon. Controlled by CSS.\n *\n *\t\t +-----|---------...\n *\t\t |     |\n *\t\t |     |\n *\t\t |     |\n *\t\t |     |\n *\t\t +--+  |  +------...\n *\t\t     \\ | /\n *\t\t      \\|/\n *\t    >|-----|<---------------- horizontal offset\n *\n * @default 30\n * @member {Number} module:ui/panel/balloon/balloonpanelview~BalloonPanelView.arrowHorizontalOffset\n */\nBalloonPanelView.arrowHorizontalOffset = 25;\n\n/**\n * A vertical offset of the arrow from the edge of the balloon. Controlled by CSS.\n *\n *\t\t +-------------...\n *\t\t |\n *\t\t |\n *\t\t |                      /-- vertical offset\n *\t\t |                     V\n *\t\t +--+    +-----...    ---------\n *\t\t     \\  /              |\n *\t\t      \\/               |\n *\t\t-------------------------------\n *\t\t                       ^\n *\n * @default 15\n * @member {Number} module:ui/panel/balloon/balloonpanelview~BalloonPanelView.arrowVerticalOffset\n */\nBalloonPanelView.arrowVerticalOffset = 10;\n\n/**\n * Function used to calculate the optimal position for the balloon.\n *\n * @protected\n * @member {Function} module:ui/panel/balloon/balloonpanelview~BalloonPanelView._getOptimalPosition\n */\nBalloonPanelView._getOptimalPosition = getOptimalPosition;\n\n/**\n * A default set of positioning functions used by the balloon panel view\n * when attaching using the {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView#attachTo} method.\n *\n * The available positioning functions are as follows:\n *\n * **North**\n *\n * * `northArrowSouth`\n *\n * \t\t+-----------------+\n * \t\t|     Balloon     |\n * \t\t+-----------------+\n * \t\t         V\n * \t\t    [ Target ]\n *\n * * `northArrowSouthEast`\n *\n * \t\t+-----------------+\n * \t\t|     Balloon     |\n * \t\t+-----------------+\n * \t\t               V\n * \t\t          [ Target ]\n *\n * * `northArrowSouthWest`\n *\n * \t\t  +-----------------+\n * \t\t  |     Balloon     |\n * \t\t  +-----------------+\n * \t\t     V\n * \t\t[ Target ]\n *\n * **North west**\n *\n * * `northWestArrowSouth`\n *\n * \t\t+-----------------+\n * \t\t|     Balloon     |\n * \t\t+-----------------+\n * \t\t         V\n * \t\t         [ Target ]\n *\n * * `northWestArrowSouthWest`\n *\n * \t\t+-----------------+\n * \t\t|     Balloon     |\n * \t\t+-----------------+\n * \t\t   V\n * \t\t   [ Target ]\n *\n * * `northWestArrowSouthEast`\n *\n * \t\t+-----------------+\n * \t\t|     Balloon     |\n * \t\t+-----------------+\n * \t\t               V\n * \t\t               [ Target ]\n *\n * **North east**\n *\n * * `northEastArrowSouth`\n *\n * \t\t+-----------------+\n * \t\t|     Balloon     |\n * \t\t+-----------------+\n * \t\t         V\n * \t\t[ Target ]\n *\n * * `northEastArrowSouthEast`\n *\n * \t\t+-----------------+\n * \t\t|     Balloon     |\n * \t\t+-----------------+\n * \t\t               V\n * \t\t      [ Target ]\n *\n * * `northEastArrowSouthWest`\n *\n * \t\t      +-----------------+\n * \t\t      |     Balloon     |\n * \t\t      +-----------------+\n * \t\t         V\n * \t\t[ Target ]\n *\n * **South**\n *\n * * `southArrowNorth`\n *\n *\t\t    [ Target ]\n *\t\t         ^\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\n * * `southArrowNorthEast`\n *\n *\t\t          [ Target ]\n *\t\t               ^\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\n * * `southArrowNorthWest`\n *\n *\t\t[ Target ]\n *\t\t     ^\n *\t\t   +-----------------+\n *\t\t   |     Balloon     |\n *\t\t   +-----------------+\n *\n * **South west**\n *\n * * `southWestArrowNorth`\n *\n *\t\t         [ Target ]\n *\t\t         ^\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\n * * `southWestArrowNorthWest`\n *\n *\t\t  [ Target ]\n *\t\t  ^\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\n * * `southWestArrowNorthEast`\n *\n *\t\t               [ Target ]\n *\t\t               ^\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\n * **South east**\n *\n * * `southEastArrowNorth`\n *\n *\t\t[ Target ]\n *\t\t         ^\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\n * * `southEastArrowNorthEast`\n *\n *\t\t       [ Target ]\n *\t\t                ^\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\n * * `southEastArrowNorthWest`\n *\n *\t\t[ Target ]\n *\t\t         ^\n *\t\t       +-----------------+\n *\t\t       |     Balloon     |\n *\t\t       +-----------------+\n *\n * See {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView#attachTo}.\n *\n * Positioning functions must be compatible with {@link module:utils/dom/position~Position}.\n *\n * The name that the position function returns will be reflected in the balloon panel's class that\n * controls the placement of the \"arrow\". See {@link #position} to learn more.\n *\n * @member {Object} module:ui/panel/balloon/balloonpanelview~BalloonPanelView.defaultPositions\n */\nBalloonPanelView.defaultPositions = {\n  // ------- North\n\n  northArrowSouth: function northArrowSouth(targetRect, balloonRect) {\n    return {\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.left + targetRect.width / 2 - balloonRect.width / 2,\n      name: 'arrow_s'\n    };\n  },\n  northArrowSouthEast: function northArrowSouthEast(targetRect, balloonRect) {\n    return {\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.left + targetRect.width / 2 - balloonRect.width + BalloonPanelView.arrowHorizontalOffset,\n      name: 'arrow_se'\n    };\n  },\n  northArrowSouthWest: function northArrowSouthWest(targetRect, balloonRect) {\n    return {\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.left + targetRect.width / 2 - BalloonPanelView.arrowHorizontalOffset,\n      name: 'arrow_sw'\n    };\n  },\n  // ------- North west\n\n  northWestArrowSouth: function northWestArrowSouth(targetRect, balloonRect) {\n    return {\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.left - balloonRect.width / 2,\n      name: 'arrow_s'\n    };\n  },\n  northWestArrowSouthWest: function northWestArrowSouthWest(targetRect, balloonRect) {\n    return {\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.left - BalloonPanelView.arrowHorizontalOffset,\n      name: 'arrow_sw'\n    };\n  },\n  northWestArrowSouthEast: function northWestArrowSouthEast(targetRect, balloonRect) {\n    return {\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.left - balloonRect.width + BalloonPanelView.arrowHorizontalOffset,\n      name: 'arrow_se'\n    };\n  },\n  // ------- North east\n\n  northEastArrowSouth: function northEastArrowSouth(targetRect, balloonRect) {\n    return {\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.right - balloonRect.width / 2,\n      name: 'arrow_s'\n    };\n  },\n  northEastArrowSouthEast: function northEastArrowSouthEast(targetRect, balloonRect) {\n    return {\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.right - balloonRect.width + BalloonPanelView.arrowHorizontalOffset,\n      name: 'arrow_se'\n    };\n  },\n  northEastArrowSouthWest: function northEastArrowSouthWest(targetRect, balloonRect) {\n    return {\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.right - BalloonPanelView.arrowHorizontalOffset,\n      name: 'arrow_sw'\n    };\n  },\n  // ------- South\n\n  southArrowNorth: function southArrowNorth(targetRect, balloonRect) {\n    return {\n      top: getSouthTop(targetRect, balloonRect),\n      left: targetRect.left + targetRect.width / 2 - balloonRect.width / 2,\n      name: 'arrow_n'\n    };\n  },\n  southArrowNorthEast: function southArrowNorthEast(targetRect, balloonRect) {\n    return {\n      top: getSouthTop(targetRect, balloonRect),\n      left: targetRect.left + targetRect.width / 2 - balloonRect.width + BalloonPanelView.arrowHorizontalOffset,\n      name: 'arrow_ne'\n    };\n  },\n  southArrowNorthWest: function southArrowNorthWest(targetRect, balloonRect) {\n    return {\n      top: getSouthTop(targetRect, balloonRect),\n      left: targetRect.left + targetRect.width / 2 - BalloonPanelView.arrowHorizontalOffset,\n      name: 'arrow_nw'\n    };\n  },\n  // ------- South west\n\n  southWestArrowNorth: function southWestArrowNorth(targetRect, balloonRect) {\n    return {\n      top: getSouthTop(targetRect, balloonRect),\n      left: targetRect.left - balloonRect.width / 2,\n      name: 'arrow_n'\n    };\n  },\n  southWestArrowNorthWest: function southWestArrowNorthWest(targetRect, balloonRect) {\n    return {\n      top: getSouthTop(targetRect, balloonRect),\n      left: targetRect.left - BalloonPanelView.arrowHorizontalOffset,\n      name: 'arrow_nw'\n    };\n  },\n  southWestArrowNorthEast: function southWestArrowNorthEast(targetRect, balloonRect) {\n    return {\n      top: getSouthTop(targetRect, balloonRect),\n      left: targetRect.left - balloonRect.width + BalloonPanelView.arrowHorizontalOffset,\n      name: 'arrow_ne'\n    };\n  },\n  // ------- South east\n\n  southEastArrowNorth: function southEastArrowNorth(targetRect, balloonRect) {\n    return {\n      top: getSouthTop(targetRect, balloonRect),\n      left: targetRect.right - balloonRect.width / 2,\n      name: 'arrow_n'\n    };\n  },\n  southEastArrowNorthEast: function southEastArrowNorthEast(targetRect, balloonRect) {\n    return {\n      top: getSouthTop(targetRect, balloonRect),\n      left: targetRect.right - balloonRect.width + BalloonPanelView.arrowHorizontalOffset,\n      name: 'arrow_ne'\n    };\n  },\n  southEastArrowNorthWest: function southEastArrowNorthWest(targetRect, balloonRect) {\n    return {\n      top: getSouthTop(targetRect, balloonRect),\n      left: targetRect.right - BalloonPanelView.arrowHorizontalOffset,\n      name: 'arrow_nw'\n    };\n  }\n};\n\n// Returns the top coordinate for positions starting with `north*`.\n//\n// @private\n// @param {utils/dom/rect~Rect} targetRect A rect of the target.\n// @param {utils/dom/rect~Rect} elementRect A rect of the balloon.\n// @returns {Number}\nfunction getNorthTop(targetRect, balloonRect) {\n  return targetRect.top - balloonRect.height - BalloonPanelView.arrowVerticalOffset;\n}\n\n// Returns the top coordinate for positions starting with `south*`.\n//\n// @private\n// @param {utils/dom/rect~Rect} targetRect A rect of the target.\n// @param {utils/dom/rect~Rect} elementRect A rect of the balloon.\n// @returns {Number}\nfunction getSouthTop(targetRect) {\n  return targetRect.bottom + BalloonPanelView.arrowVerticalOffset;\n}","import _superPropGet from '/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js';\nimport _classCallCheck from '/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js';\nimport _createClass from '/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js';\nimport _callSuper from '/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js';\nimport _inherits from '/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js';\nimport 'core-js/modules/es.array.find.js';\nimport 'core-js/modules/es.array.from.js';\nimport 'core-js/modules/es.array.includes.js';\nimport 'core-js/modules/es.iterator.constructor.js';\nimport 'core-js/modules/es.iterator.find.js';\nimport 'core-js/modules/es.map.js';\nimport 'core-js/modules/es.object.to-string.js';\nimport 'core-js/modules/es.string.includes.js';\nimport 'core-js/modules/es.string.iterator.js';\nimport 'core-js/modules/web.dom-collections.iterator.js';\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/panel/balloon/contextualballoon\n */\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport BalloonPanelView from './balloonpanelview';\nimport View from '../../view';\nimport ButtonView from '../../button/buttonview';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport FocusTracker from '@ckeditor/ckeditor5-utils/src/focustracker';\nimport toUnit from '@ckeditor/ckeditor5-utils/src/dom/tounit';\nimport Rect from '@ckeditor/ckeditor5-utils/src/dom/rect';\nimport prevIcon from '../../../theme/icons/previous-arrow.svg';\nimport nextIcon from '../../../theme/icons/next-arrow.svg';\nimport '../../../theme/components/panel/balloonrotator.css';\nimport '../../../theme/components/panel/fakepanel.css';\nvar toPx = toUnit('px');\n/**\n * Provides the common contextual balloon for the editor.\n *\n * The role of this plugin is to unify the contextual balloons logic, simplify views management and help\n * avoid the unnecessary complexity of handling multiple {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView}\n * instances in the editor.\n *\n * This plugin allows for creating single or multiple panel stacks.\n *\n * Each stack may have multiple views, with the one on the top being visible. When the visible view is removed from the stack,\n * the previous view becomes visible.\n *\n * It might be useful to implement nested navigation in a balloon. For instance, a toolbar view may contain a link button.\n * When you click it, a link view (which lets you set the URL) is created and put on top of the toolbar view, so the link panel\n * is displayed. When you finish editing the link and close (remove) the link view, the toolbar view is visible again.\n *\n * However, there are cases when there are multiple independent balloons to be displayed, for instance, if the selection\n * is inside two inline comments at the same time. For such cases, you can create two independent panel stacks.\n * The contextual balloon plugin will create a navigation bar to let the users switch between these panel stacks using the \"Next\"\n * and \"Previous\" buttons.\n *\n * If there are no views in the current stack, the balloon panel will try to switch to the next stack. If there are no\n * panels in any stack, the balloon panel will be hidden.\n *\n * **Note**: To force the balloon panel to show only one view, even if there are other stacks, use the `singleViewMode=true` option\n * when {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon#add adding} a view to a panel.\n *\n * From the implementation point of view, the contextual ballon plugin is reusing a single\n * {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView} instance to display multiple contextual balloon\n * panels in the editor. It also creates a special {@link module:ui/panel/balloon/contextualballoon~RotatorView rotator view},\n * used to manage multiple panel stacks. Rotator view is a child of the balloon panel view and the parent of the specific\n * view you want to display. If there is more than one panel stack to be displayed, the rotator view will add a\n * navigation bar. If there is only one stack, the rotator view is transparent (it does not add any UI elements).\n *\n * @extends module:core/plugin~Plugin\n */\nvar ContextualBalloon = /*#__PURE__*/\nfunction (_Plugin) {\n    /**\n   * @inheritDoc\n   */\n    function ContextualBalloon(editor) {\n        var _this;\n        _classCallCheck(this, ContextualBalloon);\n        _this = _callSuper(this, ContextualBalloon, [editor]);\n        /**\n     * The {@link module:utils/dom/position~Options#limiter position limiter}\n     * for the {@link #view balloon}, used when no `limiter` has been passed into {@link #add}\n     * or {@link #updatePosition}.\n     *\n     * By default, a function that obtains the farthest DOM\n     * {@link module:engine/view/rooteditableelement~RootEditableElement}\n     * of the {@link module:engine/view/document~Document#selection}.\n     *\n     * @member {module:utils/dom/position~Options#limiter} #positionLimiter\n     */\n        _this.positionLimiter = function () {\n            var view = _this.editor.editing.view;\n            var viewDocument = view.document;\n            var editableElement = viewDocument.selection.editableElement;\n            if (editableElement) {\n                return view.domConverter.mapViewToDom(editableElement.root);\n            }\n            return null;\n        };\n        /**\n     * The currently visible view or `null` when there are no views in any stack.\n     *\n     * @readonly\n     * @observable\n     * @member {module:ui/view~View|null} #visibleView\n     */\n        _this.set('visibleView', null);\n        /**\n     * The common balloon panel view.\n     *\n     * @readonly\n     * @member {module:ui/panel/balloon/balloonpanelview~BalloonPanelView} #view\n     */\n        _this.view = new BalloonPanelView(editor.locale);\n        editor.ui.view.body.add(_this.view);\n        editor.ui.focusTracker.add(_this.view.element);\n        /**\n     * The map of views and their stacks.\n     *\n     * @private\n     * @type {Map.<module:ui/view~View,Set>}\n     */\n        _this._viewToStack = new Map();\n        /**\n     * The map of IDs and stacks.\n     *\n     * @private\n     * @type {Map.<String,Set>}\n     */\n        _this._idToStack = new Map();\n        /**\n     * A total number of all stacks in the balloon.\n     *\n     * @private\n     * @readonly\n     * @observable\n     * @member {Number} #_numberOfStacks\n     */\n        _this.set('_numberOfStacks', 0);\n        /**\n     * A flag that controls the single view mode.\n     *\n     * @private\n     * @readonly\n     * @observable\n     * @member {Boolean} #_singleViewMode\n     */\n        _this.set('_singleViewMode', false);\n        /**\n     * Rotator view embedded in the contextual balloon.\n     * Displays the currently visible view in the balloon and provides navigation for switching stacks.\n     *\n     * @private\n     * @type {module:ui/panel/balloon/contextualballoon~RotatorView}\n     */\n        _this._rotatorView = _this._createRotatorView();\n        /**\n     * Displays fake panels under the balloon panel view when multiple stacks are added to the balloon.\n     *\n     * @private\n     * @type {module:ui/view~View}\n     */\n        _this._fakePanelsView = _this._createFakePanelsView();\n        return _this;\n    }\n    /**\n   * Returns `true` when the given view is in one of the stacks. Otherwise returns `false`.\n   *\n   * @param {module:ui/view~View} view\n   * @returns {Boolean}\n   */\n    _inherits(ContextualBalloon, _Plugin);\n    return _createClass(ContextualBalloon, [\n        {\n            key: 'hasView',\n            value: function hasView(view) {\n                return Array.from(this._viewToStack.keys()).includes(view);\n            }    /**\n     * Adds a new view to the stack and makes it visible if the current stack is visible\n     * or it is the first view in the balloon.\n     *\n     * @param {Object} data The configuration of the view.\n     * @param {String} [data.stackId='main'] The ID of the stack that the view is added to.\n     * @param {module:ui/view~View} [data.view] The content of the balloon.\n     * @param {module:utils/dom/position~Options} [data.position] Positioning options.\n     * @param {String} [data.balloonClassName] An additional CSS class added to the {@link #view balloon} when visible.\n     * @param {Boolean} [data.withArrow=true] Whether the {@link #view balloon} should be rendered with an arrow.\n     * @param {Boolean} [data.singleViewMode=false] Whether the view should be the only visible view even if other stacks were added.\n     */\n        },\n        {\n            key: 'add',\n            value: function add(data) {\n                if (this.hasView(data.view)) {\n                    /**\n         * Trying to add configuration of the same view more than once.\n         *\n         * @error contextualballoon-add-view-exist\n         */\n                    throw new CKEditorError('contextualballoon-add-view-exist: Cannot add configuration of the same view twice.', [\n                        this,\n                        data\n                    ]);\n                }\n                var stackId = data.stackId || 'main';\n                // If new stack is added, creates it and show view from this stack.\n                if (!this._idToStack.has(stackId)) {\n                    this._idToStack.set(stackId, new Map([[\n                            data.view,\n                            data\n                        ]]));\n                    this._viewToStack.set(data.view, this._idToStack.get(stackId));\n                    this._numberOfStacks = this._idToStack.size;\n                    if (!this._visibleStack || data.singleViewMode) {\n                        this.showStack(stackId);\n                    }\n                    return;\n                }\n                var stack = this._idToStack.get(stackId);\n                if (data.singleViewMode) {\n                    this.showStack(stackId);\n                }\n                // Add new view to the stack.\n                stack.set(data.view, data);\n                this._viewToStack.set(data.view, stack);\n                // And display it if is added to the currently visible stack.\n                if (stack === this._visibleStack) {\n                    this._showView(data);\n                }\n            }    /**\n     * Removes the given view from the stack. If the removed view was visible,\n     * the view preceding it in the stack will become visible instead.\n     * When there is no view in the stack, the next stack will be displayed.\n     * When there are no more stacks, the balloon will hide.\n     *\n     * @param {module:ui/view~View} view A view to be removed from the balloon.\n     */\n        },\n        {\n            key: 'remove',\n            value: function remove(view) {\n                if (!this.hasView(view)) {\n                    /**\n         * Trying to remove the configuration of the view not defined in the stack.\n         *\n         * @error contextualballoon-remove-view-not-exist\n         */\n                    throw new CKEditorError('contextualballoon-remove-view-not-exist: Cannot remove the configuration of a non-existent view.', [\n                        this,\n                        view\n                    ]);\n                }\n                var stack = this._viewToStack.get(view);\n                if (this._singleViewMode && this.visibleView === view) {\n                    this._singleViewMode = false;\n                }\n                // When visible view will be removed we need to show a preceding view or next stack\n                // if a view is the only view in the stack.\n                if (this.visibleView === view) {\n                    if (stack.size === 1) {\n                        if (this._idToStack.size > 1) {\n                            this._showNextStack();\n                        } else {\n                            this.view.hide();\n                            this.visibleView = null;\n                            this._rotatorView.hideView();\n                        }\n                    } else {\n                        this._showView(Array.from(stack.values())[stack.size - 2]);\n                    }\n                }\n                if (stack.size === 1) {\n                    this._idToStack.delete(this._getStackId(stack));\n                    this._numberOfStacks = this._idToStack.size;\n                } else {\n                    stack.delete(view);\n                }\n                this._viewToStack.delete(view);\n            }    /**\n     * Updates the position of the balloon using the position data of the first visible view in the stack.\n     * When new position data is given, the position data of the currently visible view will be updated.\n     *\n     * @param {module:utils/dom/position~Options} [position] position options.\n     */\n        },\n        {\n            key: 'updatePosition',\n            value: function updatePosition(position) {\n                if (position) {\n                    this._visibleStack.get(this.visibleView).position = position;\n                }\n                this.view.pin(this._getBalloonPosition());\n                this._fakePanelsView.updatePosition();\n            }    /**\n     * Shows the last view from the stack of a given ID.\n     *\n     * @param {String} id\n     */\n        },\n        {\n            key: 'showStack',\n            value: function showStack(id) {\n                this.visibleStack = id;\n                var stack = this._idToStack.get(id);\n                if (!stack) {\n                    /**\n         * Trying to show a stack that does not exist.\n         *\n         * @error contextualballoon-showstack-stack-not-exist\n         */\n                    throw new CKEditorError('contextualballoon-showstack-stack-not-exist: Cannot show a stack that does not exist.', this);\n                }\n                if (this._visibleStack === stack) {\n                    return;\n                }\n                this._showView(Array.from(stack.values()).pop());\n            }    /**\n     * Returns the stack of the currently visible view.\n     *\n     * @private\n     * @type {Set}\n     */\n        },\n        {\n            key: '_visibleStack',\n            get: function get() {\n                return this._viewToStack.get(this.visibleView);\n            }    /**\n     * Returns the ID of the given stack.\n     *\n     * @private\n     * @param {Set} stack\n     * @returns {String}\n     */\n        },\n        {\n            key: '_getStackId',\n            value: function _getStackId(stack) {\n                var entry = Array.from(this._idToStack.entries()).find(function (entry) {\n                    return entry[1] === stack;\n                });\n                return entry[0];\n            }    /**\n     * Shows the last view from the next stack.\n     *\n     * @private\n     */\n        },\n        {\n            key: '_showNextStack',\n            value: function _showNextStack() {\n                var stacks = Array.from(this._idToStack.values());\n                var nextIndex = stacks.indexOf(this._visibleStack) + 1;\n                if (!stacks[nextIndex]) {\n                    nextIndex = 0;\n                }\n                this.showStack(this._getStackId(stacks[nextIndex]));\n            }    /**\n     * Shows the last view from the previous stack.\n     *\n     * @private\n     */\n        },\n        {\n            key: '_showPrevStack',\n            value: function _showPrevStack() {\n                var stacks = Array.from(this._idToStack.values());\n                var nextIndex = stacks.indexOf(this._visibleStack) - 1;\n                if (!stacks[nextIndex]) {\n                    nextIndex = stacks.length - 1;\n                }\n                this.showStack(this._getStackId(stacks[nextIndex]));\n            }    /**\n     * Creates a rotator view.\n     *\n     * @private\n     * @returns {module:ui/panel/balloon/contextualballoon~RotatorView}\n     */\n        },\n        {\n            key: '_createRotatorView',\n            value: function _createRotatorView() {\n                var _this2 = this;\n                var view = new RotatorView(this.editor.locale);\n                var t = this.editor.locale.t;\n                this.view.content.add(view);\n                // Hide navigation when there is only a one stack & not in single view mode.\n                view.bind('isNavigationVisible').to(this, '_numberOfStacks', this, '_singleViewMode', function (value, isSingleViewMode) {\n                    return !isSingleViewMode && value > 1;\n                });\n                // Update balloon position after toggling navigation.\n                view.on('change:isNavigationVisible', function () {\n                    return _this2.updatePosition();\n                }, { priority: 'low' });\n                // Update stacks counter value.\n                view.bind('counter').to(this, 'visibleView', this, '_numberOfStacks', function (visibleView, numberOfStacks) {\n                    if (numberOfStacks < 2) {\n                        return '';\n                    }\n                    var current = Array.from(_this2._idToStack.values()).indexOf(_this2._visibleStack) + 1;\n                    return t('%0 of %1', [\n                        current,\n                        numberOfStacks\n                    ]);\n                });\n                view.buttonNextView.on('execute', function () {\n                    // When current view has a focus then move focus to the editable before removing it,\n                    // otherwise editor will lost focus.\n                    if (view.focusTracker.isFocused) {\n                        _this2.editor.editing.view.focus();\n                    }\n                    _this2._showNextStack();\n                });\n                view.buttonPrevView.on('execute', function () {\n                    // When current view has a focus then move focus to the editable before removing it,\n                    // otherwise editor will lost focus.\n                    if (view.focusTracker.isFocused) {\n                        _this2.editor.editing.view.focus();\n                    }\n                    _this2._showPrevStack();\n                });\n                return view;\n            }    /**\n     * @returns {module:ui/view~View}\n     */\n        },\n        {\n            key: '_createFakePanelsView',\n            value: function _createFakePanelsView() {\n                var view = new FakePanelsView(this.editor.locale, this.view);\n                view.bind('numberOfPanels').to(this, '_numberOfStacks', this, '_singleViewMode', function (number, isSingleViewMode) {\n                    var showPanels = !isSingleViewMode && number >= 2;\n                    return showPanels ? Math.min(number - 1, 2) : 0;\n                });\n                view.listenTo(this.view, 'change:top', function () {\n                    return view.updatePosition();\n                });\n                view.listenTo(this.view, 'change:left', function () {\n                    return view.updatePosition();\n                });\n                this.editor.ui.view.body.add(view);\n                return view;\n            }    /**\n     * Sets the view as the content of the balloon and attaches the balloon using position\n     * options of the first view.\n     *\n     * @private\n     * @param {Object} data Configuration.\n     * @param {module:ui/view~View} [data.view] The view to show in the balloon.\n     * @param {String} [data.balloonClassName=''] Additional class name which will be added to the {@link #view balloon}.\n     * @param {Boolean} [data.withArrow=true] Whether the {@link #view balloon} should be rendered with an arrow.\n     */\n        },\n        {\n            key: '_showView',\n            value: function _showView(_ref) {\n                var view = _ref.view, _ref$balloonClassName = _ref.balloonClassName, balloonClassName = _ref$balloonClassName === void 0 ? '' : _ref$balloonClassName, _ref$withArrow = _ref.withArrow, withArrow = _ref$withArrow === void 0 ? true : _ref$withArrow, _ref$singleViewMode = _ref.singleViewMode, singleViewMode = _ref$singleViewMode === void 0 ? false : _ref$singleViewMode;\n                this.view.class = balloonClassName;\n                this.view.withArrow = withArrow;\n                this._rotatorView.showView(view);\n                this.visibleView = view;\n                this.view.pin(this._getBalloonPosition());\n                this._fakePanelsView.updatePosition();\n                if (singleViewMode) {\n                    this._singleViewMode = true;\n                }\n            }    /**\n     * Returns position options of the last view in the stack.\n     * This keeps the balloon in the same position when the view is changed.\n     *\n     * @private\n     * @returns {module:utils/dom/position~Options}\n     */\n        },\n        {\n            key: '_getBalloonPosition',\n            value: function _getBalloonPosition() {\n                var position = Array.from(this._visibleStack.values()).pop().position;\n                // Use the default limiter if none has been specified.\n                if (position && !position.limiter) {\n                    // Don't modify the original options object.\n                    position = Object.assign({}, position, { limiter: this.positionLimiter });\n                }\n                return position;\n            }\n        }\n    ], [{\n            key: 'pluginName',\n            get: /**\n     * @inheritDoc\n     */\n            function get() {\n                return 'ContextualBalloon';\n            }\n        }]);\n}(Plugin);\n/**\n * Rotator view is a helper class for the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon ContextualBalloon}.\n * It is used for displaying the last view from the current stack and providing navigation buttons for switching stacks.\n * See the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon ContextualBalloon} documentation to learn more.\n *\n * @extends module:ui/view~View\n */\nexport {\n    ContextualBalloon as default\n};\nvar RotatorView = /*#__PURE__*/\nfunction (_View) {\n    /**\n   * @inheritDoc\n   */\n    function RotatorView(locale) {\n        var _this3;\n        _classCallCheck(this, RotatorView);\n        _this3 = _callSuper(this, RotatorView, [locale]);\n        var t = locale.t;\n        var bind = _this3.bindTemplate;\n        /**\n     * Defines whether navigation is visible or not.\n     *\n     * @member {Boolean} #isNavigationVisible\n     */\n        _this3.set('isNavigationVisible', true);\n        /**\n     * Used for checking if a view is focused or not.\n     *\n     * @type {module:utils/focustracker~FocusTracker}\n     */\n        _this3.focusTracker = new FocusTracker();\n        /**\n     * Navigation button for switching the stack to the previous one.\n     *\n     * @type {module:ui/button/buttonview~ButtonView}\n     */\n        _this3.buttonPrevView = _this3._createButtonView(t('Previous'), prevIcon);\n        /**\n     * Navigation button for switching the stack to the next one.\n     *\n     * @type {module:ui/button/buttonview~ButtonView}\n     */\n        _this3.buttonNextView = _this3._createButtonView(t('Next'), nextIcon);\n        /**\n     * A collection of the child views that creates the rotator content.\n     *\n     * @readonly\n     * @type {module:ui/viewcollection~ViewCollection}\n     */\n        _this3.content = _this3.createCollection();\n        _this3.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-balloon-rotator'\n                ],\n                'z-index': '-1'\n            },\n            children: [\n                {\n                    tag: 'div',\n                    attributes: {\n                        class: [\n                            'ck-balloon-rotator__navigation',\n                            bind.to('isNavigationVisible', function (value) {\n                                return value ? '' : 'ck-hidden';\n                            })\n                        ]\n                    },\n                    children: [\n                        _this3.buttonPrevView,\n                        {\n                            tag: 'span',\n                            attributes: { class: ['ck-balloon-rotator__counter'] },\n                            children: [{ text: bind.to('counter') }]\n                        },\n                        _this3.buttonNextView\n                    ]\n                },\n                {\n                    tag: 'div',\n                    attributes: { class: 'ck-balloon-rotator__content' },\n                    children: _this3.content\n                }\n            ]\n        });\n        return _this3;\n    }\n    /**\n   * @inheritDoc\n   */\n    _inherits(RotatorView, _View);\n    return _createClass(RotatorView, [\n        {\n            key: 'render',\n            value: function render() {\n                _superPropGet(RotatorView, 'render', this, 3)([]);\n                this.focusTracker.add(this.element);\n            }    /**\n     * Shows a given view.\n     *\n     * @param {module:ui/view~View} view The view to show.\n     */\n        },\n        {\n            key: 'showView',\n            value: function showView(view) {\n                this.hideView();\n                this.content.add(view);\n            }    /**\n     * Hides the currently displayed view.\n     */\n        },\n        {\n            key: 'hideView',\n            value: function hideView() {\n                this.content.clear();\n            }    /**\n     * Creates a navigation button view.\n     *\n     * @private\n     * @param {String} label The button label.\n     * @param {String} icon The button icon.\n     * @returns {module:ui/button/buttonview~ButtonView}\n     */\n        },\n        {\n            key: '_createButtonView',\n            value: function _createButtonView(label, icon) {\n                var view = new ButtonView(this.locale);\n                view.set({\n                    label: label,\n                    icon: icon,\n                    tooltip: true\n                });\n                return view;\n            }\n        }\n    ]);\n}(View);\n// Displays additional layers under the balloon when multiple stacks are added to the balloon.\n//\n// @private\n// @extends module:ui/view~View\nvar FakePanelsView = /*#__PURE__*/\nfunction (_View2) {\n    // @inheritDoc\n    function FakePanelsView(locale, balloonPanelView) {\n        var _this4;\n        _classCallCheck(this, FakePanelsView);\n        _this4 = _callSuper(this, FakePanelsView, [locale]);\n        var bind = _this4.bindTemplate;\n        // Fake panels top offset.\n        //\n        // @observable\n        // @member {Number} #top\n        _this4.set('top', 0);\n        // Fake panels left offset.\n        //\n        // @observable\n        // @member {Number} #left\n        _this4.set('left', 0);\n        // Fake panels height.\n        //\n        // @observable\n        // @member {Number} #height\n        _this4.set('height', 0);\n        // Fake panels width.\n        //\n        // @observable\n        // @member {Number} #width\n        _this4.set('width', 0);\n        // Number of rendered fake panels.\n        //\n        // @observable\n        // @member {Number} #numberOfPanels\n        _this4.set('numberOfPanels', 0);\n        // Collection of the child views which creates fake panel content.\n        //\n        // @readonly\n        // @type {module:ui/viewcollection~ViewCollection}\n        _this4.content = _this4.createCollection();\n        // Context.\n        //\n        // @private\n        // @type {module:ui/panel/balloon/balloonpanelview~BalloonPanelView}\n        _this4._balloonPanelView = balloonPanelView;\n        _this4.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck-fake-panel',\n                    bind.to('numberOfPanels', function (number) {\n                        return number ? '' : 'ck-hidden';\n                    })\n                ],\n                style: {\n                    top: bind.to('top', toPx),\n                    left: bind.to('left', toPx),\n                    width: bind.to('width', toPx),\n                    height: bind.to('height', toPx)\n                }\n            },\n            children: _this4.content\n        });\n        _this4.on('change:numberOfPanels', function (evt, name, next, prev) {\n            if (next > prev) {\n                _this4._addPanels(next - prev);\n            } else {\n                _this4._removePanels(prev - next);\n            }\n            _this4.updatePosition();\n        });\n        return _this4;\n    }\n    // @private\n    // @param {Number} number\n    _inherits(FakePanelsView, _View2);\n    return _createClass(FakePanelsView, [\n        {\n            key: '_addPanels',\n            value: function _addPanels(number) {\n                while (number--) {\n                    var view = new View();\n                    view.setTemplate({ tag: 'div' });\n                    this.content.add(view);\n                    this.registerChild(view);\n                }\n            }    // @private\n                 // @param {Number} number\n        },\n        {\n            key: '_removePanels',\n            value: function _removePanels(number) {\n                while (number--) {\n                    var view = this.content.last;\n                    this.content.remove(view);\n                    this.deregisterChild(view);\n                    view.destroy();\n                }\n            }    // Updates coordinates of fake panels.\n        },\n        {\n            key: 'updatePosition',\n            value: function updatePosition() {\n                if (this.numberOfPanels) {\n                    var _this$_balloonPanelVi = this._balloonPanelView, top = _this$_balloonPanelVi.top, left = _this$_balloonPanelVi.left;\n                    var _Rect = new Rect(this._balloonPanelView.element), width = _Rect.width, height = _Rect.height;\n                    Object.assign(this, {\n                        top: top,\n                        left: left,\n                        width: width,\n                        height: height\n                    });\n                }\n            }\n        }\n    ]);\n}(View);","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/panel/sticky/stickypanelview\n */\n\nimport global from '@ckeditor/ckeditor5-utils/src/dom/global';\nimport View from '../../view';\nimport Template from '../../template';\nimport toUnit from '@ckeditor/ckeditor5-utils/src/dom/tounit';\nimport '../../../theme/components/panel/stickypanel.css';\nvar toPx = toUnit('px');\n\n/**\n * The sticky panel view class.\n */\nvar StickyPanelView = /*#__PURE__*/function (_View) {\n  /**\n   * @inheritDoc\n   */\n  function StickyPanelView(locale) {\n    var _this;\n    _classCallCheck(this, StickyPanelView);\n    _this = _callSuper(this, StickyPanelView, [locale]);\n    var bind = _this.bindTemplate;\n\n    /**\n     * Controls whether the sticky panel should be active.\n     *\n     * @readonly\n     * @observable\n     * @member {Boolean} #isActive\n     */\n    _this.set('isActive', false);\n\n    /**\n     * Controls whether the sticky panel is in the \"sticky\" state.\n     *\n     * @readonly\n     * @observable\n     * @member {Boolean} #isSticky\n     */\n    _this.set('isSticky', false);\n\n    /**\n     * The limiter element for the sticky panel instance. Its bounding rect limits\n     * the \"stickyness\" of the panel, i.e. when the panel reaches the bottom\n     * edge of the limiter, it becomes sticky to that edge and does not float\n     * off the limiter. It is mandatory for the panel to work properly and once\n     * set, it cannot be changed.\n     *\n     * @readonly\n     * @observable\n     * @member {HTMLElement} #limiterElement\n     */\n    _this.set('limiterElement', null);\n\n    /**\n     * The offset from the bottom edge of {@link #limiterElement}\n     * which stops the panel from stickying any further to prevent limiter's content\n     * from being completely covered.\n     *\n     * @readonly\n     * @observable\n     * @default 50\n     * @member {Number} #limiterBottomOffset\n     */\n    _this.set('limiterBottomOffset', 50);\n\n    /**\n     * The offset from the top edge of the web browser's viewport which makes the\n     * panel become sticky. The default value is `0`, which means the panel becomes\n     * sticky when it's upper edge touches the top of the page viewport.\n     *\n     * This attribute is useful when the web page has UI elements positioned to the top\n     * either using `position: fixed` or `position: sticky`, which would cover the\n     * sticky panel or vice–versa (depending on the `z-index` hierarchy).\n     *\n     * @readonly\n     * @observable\n     * @default 0\n     * @member {Number} #viewportTopOffset\n     */\n    _this.set('viewportTopOffset', 0);\n\n    /**\n     * Controls the `margin-left` CSS style of the panel.\n     *\n     * @protected\n     * @readonly\n     * @observable\n     * @member {String} #_marginLeft\n     */\n    _this.set('_marginLeft', null);\n\n    /**\n     * Set `true` if the sticky panel reached the bottom edge of the\n     * {@link #limiterElement}.\n     *\n     * @protected\n     * @readonly\n     * @observable\n     * @member {Boolean} #_isStickyToTheLimiter\n     */\n    _this.set('_isStickyToTheLimiter', false);\n\n    /**\n     * Set `true` if the sticky panel uses the {@link #viewportTopOffset},\n     * i.e. not {@link #_isStickyToTheLimiter} and the {@link #viewportTopOffset}\n     * is not `0`.\n     *\n     * @protected\n     * @readonly\n     * @observable\n     * @member {Boolean} #_hasViewportTopOffset\n     */\n    _this.set('_hasViewportTopOffset', false);\n\n    /**\n     * Collection of the child views which creates balloon panel contents.\n     *\n     * @readonly\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n    _this.content = _this.createCollection();\n\n    /**\n     * The DOM bounding client rect of the {@link module:ui/view~View#element} of the panel.\n     *\n     * @protected\n     * @member {Object} #_panelRect\n     */\n\n    /**\n     * The DOM bounding client rect of the {@link #limiterElement}\n     * of the panel.\n     *\n     * @protected\n     * @member {Object} #_limiterRect\n     */\n\n    /**\n     * A dummy element which visually fills the space as long as the\n     * actual panel is sticky. It prevents flickering of the UI.\n     *\n     * @protected\n     * @property {HTMLElement}\n     */\n    _this._contentPanelPlaceholder = new Template({\n      tag: 'div',\n      attributes: {\n        class: ['ck', 'ck-sticky-panel__placeholder'],\n        style: {\n          display: bind.to('isSticky', function (isSticky) {\n            return isSticky ? 'block' : 'none';\n          }),\n          height: bind.to('isSticky', function (isSticky) {\n            return isSticky ? toPx(_this._panelRect.height) : null;\n          })\n        }\n      }\n    }).render();\n\n    /**\n     * The panel which accepts children into {@link #content} collection.\n     * Also an element which is positioned when {@link #isSticky}.\n     *\n     * @protected\n     * @property {HTMLElement}\n     */\n    _this._contentPanel = new Template({\n      tag: 'div',\n      attributes: {\n        class: ['ck', 'ck-sticky-panel__content',\n        // Toggle class of the panel when \"sticky\" state changes in the view.\n        bind.if('isSticky', 'ck-sticky-panel__content_sticky'), bind.if('_isStickyToTheLimiter', 'ck-sticky-panel__content_sticky_bottom-limit')],\n        style: {\n          width: bind.to('isSticky', function (isSticky) {\n            return isSticky ? toPx(_this._contentPanelPlaceholder.getBoundingClientRect().width) : null;\n          }),\n          top: bind.to('_hasViewportTopOffset', function (_hasViewportTopOffset) {\n            return _hasViewportTopOffset ? toPx(_this.viewportTopOffset) : null;\n          }),\n          bottom: bind.to('_isStickyToTheLimiter', function (_isStickyToTheLimiter) {\n            return _isStickyToTheLimiter ? toPx(_this.limiterBottomOffset) : null;\n          }),\n          marginLeft: bind.to('_marginLeft')\n        }\n      },\n      children: _this.content\n    }).render();\n    _this.setTemplate({\n      tag: 'div',\n      attributes: {\n        class: ['ck', 'ck-sticky-panel']\n      },\n      children: [_this._contentPanelPlaceholder, _this._contentPanel]\n    });\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(StickyPanelView, _View);\n  return _createClass(StickyPanelView, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n      _superPropGet(StickyPanelView, \"render\", this, 3)([]);\n\n      // Check if the panel should go into the sticky state immediately.\n      this._checkIfShouldBeSticky();\n\n      // Update sticky state of the panel as the window is being scrolled.\n      this.listenTo(global.window, 'scroll', function () {\n        _this2._checkIfShouldBeSticky();\n      });\n\n      // Synchronize with `model.isActive` because sticking an inactive panel is pointless.\n      this.listenTo(this, 'change:isActive', function () {\n        _this2._checkIfShouldBeSticky();\n      });\n    }\n\n    /**\n     * Analyzes the environment to decide whether the panel should\n     * be sticky or not.\n     *\n     * @protected\n     */\n  }, {\n    key: \"_checkIfShouldBeSticky\",\n    value: function _checkIfShouldBeSticky() {\n      var panelRect = this._panelRect = this._contentPanel.getBoundingClientRect();\n      var limiterRect;\n      if (!this.limiterElement) {\n        this.isSticky = false;\n      } else {\n        limiterRect = this._limiterRect = this.limiterElement.getBoundingClientRect();\n\n        // The panel must be active to become sticky.\n        this.isSticky = this.isActive &&\n        // The limiter's top edge must be beyond the upper edge of the visible viewport (+the viewportTopOffset).\n        limiterRect.top < this.viewportTopOffset &&\n        // The model#limiterElement's height mustn't be smaller than the panel's height and model#limiterBottomOffset.\n        // There's no point in entering the sticky mode if the model#limiterElement is very, very small, because\n        // it would immediately set model#_isStickyToTheLimiter true and, given model#limiterBottomOffset, the panel\n        // would be positioned before the model#limiterElement.\n        this._panelRect.height + this.limiterBottomOffset < limiterRect.height;\n      }\n\n      // Stick the panel to the top edge of the viewport simulating CSS position:sticky.\n      // TODO: Possibly replaced by CSS in the future http://caniuse.com/#feat=css-sticky\n      if (this.isSticky) {\n        this._isStickyToTheLimiter = limiterRect.bottom < panelRect.height + this.limiterBottomOffset + this.viewportTopOffset;\n        this._hasViewportTopOffset = !this._isStickyToTheLimiter && !!this.viewportTopOffset;\n        this._marginLeft = this._isStickyToTheLimiter ? null : toPx(-global.window.scrollX);\n      }\n      // Detach the panel from the top edge of the viewport.\n      else {\n        this._isStickyToTheLimiter = false;\n        this._hasViewportTopOffset = false;\n        this._marginLeft = null;\n      }\n    }\n  }]);\n}(View);\nexport { StickyPanelView as default };","import _toConsumableArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\";\nimport _superPropGet from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport _slicedToArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport _regeneratorValues from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regeneratorValues.js\";\nimport _regenerator from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/regenerator.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.reduce.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/template\n */\n\n/* global document */\n\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport EmitterMixin from '@ckeditor/ckeditor5-utils/src/emittermixin';\nimport View from './view';\nimport ViewCollection from './viewcollection';\nimport isNode from '@ckeditor/ckeditor5-utils/src/dom/isnode';\nimport { isObject, cloneDeepWith } from 'lodash-es';\nvar xhtmlNs = 'http://www.w3.org/1999/xhtml';\n\n/**\n * A basic Template class. It renders a DOM HTML element or text from a\n * {@link module:ui/template~TemplateDefinition definition} and supports element attributes, children,\n * bindings to {@link module:utils/observablemixin~Observable observables} and DOM event propagation.\n *\n * A simple template can look like this:\n *\n *\t\tconst bind = Template.bind( observable, emitter );\n *\n *\t\tnew Template( {\n *\t\t\ttag: 'p',\n *\t\t\tattributes: {\n *\t\t\t\tclass: 'foo',\n *\t\t\t\tstyle: {\n *\t\t\t\t\tbackgroundColor: 'yellow'\n *\t\t\t\t}\n *\t\t\t},\n *\t\t\ton: {\n *\t\t\t\tclick: bind.to( 'clicked' )\n *\t\t\t},\n *\t\t\tchildren: [\n *\t\t\t\t'A paragraph.'\n *\t\t\t]\n *\t\t} ).render();\n *\n * and it will render the following HTML element:\n *\n *\t\t<p class=\"foo\" style=\"background-color: yellow;\">A paragraph.</p>\n *\n * Additionally, the `observable` will always fire `clicked` upon clicking `<p>` in the DOM.\n *\n * See {@link module:ui/template~TemplateDefinition} to know more about templates and complex\n * template definitions.\n *\n* @mixes module:utils/emittermixin~EmitterMixin\n */\nvar Template = /*#__PURE__*/function () {\n  /**\n   * Creates an instance of the {@link ~Template} class.\n   *\n   * @param {module:ui/template~TemplateDefinition} def The definition of the template.\n   */\n  function Template(def) {\n    _classCallCheck(this, Template);\n    Object.assign(this, normalize(clone(def)));\n\n    /**\n     * Indicates whether this particular Template instance has been\n     * {@link #render rendered}.\n     *\n     * @readonly\n     * @protected\n     * @member {Boolean}\n     */\n    this._isRendered = false;\n\n    /**\n     * The tag (`tagName`) of this template, e.g. `div`. It also indicates that the template\n     * renders to an HTML element.\n     *\n     * @member {String} #tag\n     */\n\n    /**\n     * The text of the template. It also indicates that the template renders to a DOM text node.\n     *\n     * @member {Array.<String|module:ui/template~TemplateValueSchema>} #text\n     */\n\n    /**\n     * The attributes of the template, e.g. `{ id: [ 'ck-id' ] }`, corresponding with\n     * the attributes of an HTML element.\n     *\n     * **Note**: This property only makes sense when {@link #tag} is defined.\n     *\n     * @member {Object} #attributes\n     */\n\n    /**\n     * The children of the template. They can be either:\n     * * independent instances of {@link ~Template} (sub–templates),\n     * * native DOM Nodes.\n     *\n     * **Note**: This property only makes sense when {@link #tag} is defined.\n     *\n     * @member {Array.<module:ui/template~Template|Node>} #children\n     */\n\n    /**\n     * The DOM event listeners of the template.\n     *\n     * @member {Object} #eventListeners\n     */\n\n    /**\n     * The data used by the {@link #revert} method to restore a node to its original state.\n     *\n     * See: {@link #apply}.\n     *\n     * @readonly\n     * @protected\n     * @member {module:ui/template~RenderData}\n     */\n    this._revertData = null;\n  }\n\n  /**\n   * Renders a DOM Node (an HTML element or text) out of the template.\n   *\n   *\t\tconst domNode = new Template( { ... } ).render();\n   *\n   * See: {@link #apply}.\n   *\n   * @returns {HTMLElement|Text}\n   */\n  return _createClass(Template, [{\n    key: \"render\",\n    value: function render() {\n      var node = this._renderNode({\n        intoFragment: true\n      });\n      this._isRendered = true;\n      return node;\n    }\n\n    /**\n     * Applies the template to an existing DOM Node, either HTML element or text.\n     *\n     * **Note:** No new DOM nodes will be created. Applying extends:\n     *\n     * {@link module:ui/template~TemplateDefinition attributes},\n     * {@link module:ui/template~TemplateDefinition event listeners}, and\n     * `textContent` of {@link module:ui/template~TemplateDefinition children} only.\n     *\n     * **Note:** Existing `class` and `style` attributes are extended when a template\n     * is applied to an HTML element, while other attributes and `textContent` are overridden.\n     *\n     * **Note:** The process of applying a template can be easily reverted using the\n     * {@link module:ui/template~Template#revert} method.\n     *\n     *\t\tconst element = document.createElement( 'div' );\n     *\t\tconst observable = new Model( { divClass: 'my-div' } );\n     *\t\tconst emitter = Object.create( EmitterMixin );\n     *\t\tconst bind = Template.bind( observable, emitter );\n     *\n     *\t\tnew Template( {\n     *\t\t\tattributes: {\n     *\t\t\t\tid: 'first-div',\n     *\t\t\t\tclass: bind.to( 'divClass' )\n     *\t\t\t},\n     *\t\t\ton: {\n     *\t\t\t\tclick: bind( 'elementClicked' ) // Will be fired by the observable.\n     *\t\t\t},\n     *\t\t\tchildren: [\n     *\t\t\t\t'Div text.'\n     *\t\t\t]\n     *\t\t} ).apply( element );\n     *\n     *\t\tconsole.log( element.outerHTML ); // -> '<div id=\"first-div\" class=\"my-div\"></div>'\n     *\n     * @see module:ui/template~Template#render\n     * @see module:ui/template~Template#revert\n     * @param {Node} node Root node for the template to apply.\n     */\n  }, {\n    key: \"apply\",\n    value: function apply(node) {\n      this._revertData = getEmptyRevertData();\n      this._renderNode({\n        node: node,\n        isApplying: true,\n        revertData: this._revertData\n      });\n      return node;\n    }\n\n    /**\n     * Reverts a template {@link module:ui/template~Template#apply applied} to a DOM node.\n     *\n     * @param {Node} node The root node for the template to revert. In most of the cases, it is the\n     * same node used by {@link module:ui/template~Template#apply}.\n     */\n  }, {\n    key: \"revert\",\n    value: function revert(node) {\n      if (!this._revertData) {\n        /**\n         * Attempting to revert a template which has not been applied yet.\n         *\n         * @error ui-template-revert-not-applied\n         */\n        throw new CKEditorError('ui-template-revert-not-applied: Attempting to revert a template which has not been applied yet.', [this, node]);\n      }\n      this._revertTemplateFromNode(node, this._revertData);\n    }\n\n    /**\n     * Returns an iterator which traverses the template in search of {@link module:ui/view~View}\n     * instances and returns them one by one.\n     *\n     *\t\tconst viewFoo = new View();\n     *\t\tconst viewBar = new View();\n     *\t\tconst viewBaz = new View();\n     *\t\tconst template = new Template( {\n     *\t\t\ttag: 'div',\n     *\t\t\tchildren: [\n     *\t\t\t\tviewFoo,\n     *\t\t\t\t{\n     *\t\t\t\t\ttag: 'div',\n     *\t\t\t\t\tchildren: [\n     *\t\t\t\t\t\tviewBar\n     *\t\t\t\t\t]\n     *\t\t\t\t},\n     *\t\t\t\tviewBaz\n     *\t\t\t]\n     *\t\t} );\n     *\n     *\t\t// Logs: viewFoo, viewBar, viewBaz\n     *\t\tfor ( const view of template.getViews() ) {\n     *\t\t\tconsole.log( view );\n     *\t\t}\n     *\n     * @returns {Iterable.<module:ui/view~View>}\n     */\n  }, {\n    key: \"getViews\",\n    value:\n    /*#__PURE__*/\n    _regenerator().m(function getViews() {\n      var _marked, search;\n      return _regenerator().w(function (_context2) {\n        while (1) switch (_context2.n) {\n          case 0:\n            search = function _search(def) {\n              var _iterator, _step, child, _t;\n              return _regenerator().w(function (_context) {\n                while (1) switch (_context.p = _context.n) {\n                  case 0:\n                    if (!def.children) {\n                      _context.n = 9;\n                      break;\n                    }\n                    _iterator = _createForOfIteratorHelper(def.children);\n                    _context.p = 1;\n                    _iterator.s();\n                  case 2:\n                    if ((_step = _iterator.n()).done) {\n                      _context.n = 6;\n                      break;\n                    }\n                    child = _step.value;\n                    if (!isView(child)) {\n                      _context.n = 4;\n                      break;\n                    }\n                    _context.n = 3;\n                    return child;\n                  case 3:\n                    _context.n = 5;\n                    break;\n                  case 4:\n                    if (!isTemplate(child)) {\n                      _context.n = 5;\n                      break;\n                    }\n                    return _context.d(_regeneratorValues(search(child)), 5);\n                  case 5:\n                    _context.n = 2;\n                    break;\n                  case 6:\n                    _context.n = 8;\n                    break;\n                  case 7:\n                    _context.p = 7;\n                    _t = _context.v;\n                    _iterator.e(_t);\n                  case 8:\n                    _context.p = 8;\n                    _iterator.f();\n                    return _context.f(8);\n                  case 9:\n                    return _context.a(2);\n                }\n              }, _marked, null, [[1, 7, 8, 9]]);\n            };\n            _marked = /*#__PURE__*/_regenerator().m(search);\n            return _context2.d(_regeneratorValues(search(this)), 1);\n          case 1:\n            return _context2.a(2);\n        }\n      }, getViews, this);\n    })\n    /**\n     * An entry point to the interface which binds DOM nodes to\n     * {@link module:utils/observablemixin~Observable observables}.\n     * There are two types of bindings:\n     *\n     * * HTML element attributes or text `textContent` synchronized with attributes of an\n     * {@link module:utils/observablemixin~Observable}. Learn more about {@link module:ui/template~BindChain#to}\n     * and {@link module:ui/template~BindChain#if}.\n     *\n     *\t\tconst bind = Template.bind( observable, emitter );\n     *\n     *\t\tnew Template( {\n     *\t\t\tattributes: {\n     *\t\t\t\t// Binds the element \"class\" attribute to observable#classAttribute.\n     *\t\t\t\tclass: bind.to( 'classAttribute' )\n     *\t\t\t}\n     *\t\t} ).render();\n     *\n     * * DOM events fired on HTML element propagated through\n     * {@link module:utils/observablemixin~Observable}. Learn more about {@link module:ui/template~BindChain#to}.\n     *\n     *\t\tconst bind = Template.bind( observable, emitter );\n     *\n     *\t\tnew Template( {\n     *\t\t\ton: {\n     *\t\t\t\t// Will be fired by the observable.\n     *\t\t\t\tclick: bind( 'elementClicked' )\n     *\t\t\t}\n     *\t\t} ).render();\n     *\n     * Also see {@link module:ui/view~View#bindTemplate}.\n     *\n     * @param {module:utils/observablemixin~Observable} observable An observable which provides boundable attributes.\n     * @param {module:utils/emittermixin~Emitter} emitter An emitter that listens to observable attribute\n     * changes or DOM Events (depending on the kind of the binding). Usually, a {@link module:ui/view~View} instance.\n     * @returns {module:ui/template~BindChain}\n     */\n  }, {\n    key: \"_renderNode\",\n    value:\n    /**\n     * Renders a DOM Node (either an HTML element or text) out of the template.\n     *\n     * @protected\n     * @param {module:ui/template~RenderData} data Rendering data.\n     */\n    function _renderNode(data) {\n      var isInvalid;\n      if (data.node) {\n        // When applying, a definition cannot have \"tag\" and \"text\" at the same time.\n        isInvalid = this.tag && this.text;\n      } else {\n        // When rendering, a definition must have either \"tag\" or \"text\": XOR( this.tag, this.text ).\n        isInvalid = this.tag ? this.text : !this.text;\n      }\n      if (isInvalid) {\n        /**\n         * Node definition cannot have the \"tag\" and \"text\" properties at the same time.\n         * Node definition must have either \"tag\" or \"text\" when rendering a new Node.\n         *\n         * @error ui-template-wrong-syntax\n         */\n        throw new CKEditorError('ui-template-wrong-syntax: Node definition must have either \"tag\" or \"text\" when rendering a new Node.', this);\n      }\n      if (this.text) {\n        return this._renderText(data);\n      } else {\n        return this._renderElement(data);\n      }\n    }\n\n    /**\n     * Renders an HTML element out of the template.\n     *\n     * @protected\n     * @param {module:ui/template~RenderData} data Rendering data.\n     */\n  }, {\n    key: \"_renderElement\",\n    value: function _renderElement(data) {\n      var node = data.node;\n      if (!node) {\n        node = data.node = document.createElementNS(this.ns || xhtmlNs, this.tag);\n      }\n      this._renderAttributes(data);\n      this._renderElementChildren(data);\n      this._setUpListeners(data);\n      return node;\n    }\n\n    /**\n     * Renders a text node out of {@link module:ui/template~Template#text}.\n     *\n     * @protected\n     * @param {module:ui/template~RenderData} data Rendering data.\n     */\n  }, {\n    key: \"_renderText\",\n    value: function _renderText(data) {\n      var node = data.node;\n\n      // Save the original textContent to revert it in #revert().\n      if (node) {\n        data.revertData.text = node.textContent;\n      } else {\n        node = data.node = document.createTextNode('');\n      }\n\n      // Check if this Text Node is bound to Observable. Cases:\n      //\n      //\t\ttext: [ Template.bind( ... ).to( ... ) ]\n      //\n      //\t\ttext: [\n      //\t\t\t'foo',\n      //\t\t\tTemplate.bind( ... ).to( ... ),\n      //\t\t\t...\n      //\t\t]\n      //\n      if (hasTemplateBinding(this.text)) {\n        this._bindToObservable({\n          schema: this.text,\n          updater: getTextUpdater(node),\n          data: data\n        });\n      }\n      // Simply set text. Cases:\n      //\n      //\t\ttext: [ 'all', 'are', 'static' ]\n      //\n      //\t\ttext: [ 'foo' ]\n      //\n      else {\n        node.textContent = this.text.join('');\n      }\n      return node;\n    }\n\n    /**\n     * Renders HTML element attributes out of {@link module:ui/template~Template#attributes}.\n     *\n     * @protected\n     * @param {module:ui/template~RenderData} data Rendering data.\n     */\n  }, {\n    key: \"_renderAttributes\",\n    value: function _renderAttributes(data) {\n      var attrName, attrValue, domAttrValue, attrNs;\n      if (!this.attributes) {\n        return;\n      }\n      var node = data.node;\n      var revertData = data.revertData;\n      for (attrName in this.attributes) {\n        // Current attribute value in DOM.\n        domAttrValue = node.getAttribute(attrName);\n\n        // The value to be set.\n        attrValue = this.attributes[attrName];\n\n        // Save revert data.\n        if (revertData) {\n          revertData.attributes[attrName] = domAttrValue;\n        }\n\n        // Detect custom namespace:\n        //\n        //\t\tclass: {\n        //\t\t\tns: 'abc',\n        //\t\t\tvalue: Template.bind( ... ).to( ... )\n        //\t\t}\n        //\n        attrNs = isObject(attrValue[0]) && attrValue[0].ns ? attrValue[0].ns : null;\n\n        // Activate binding if one is found. Cases:\n        //\n        //\t\tclass: [\n        //\t\t\tTemplate.bind( ... ).to( ... )\n        //\t\t]\n        //\n        //\t\tclass: [\n        //\t\t\t'bar',\n        //\t\t\tTemplate.bind( ... ).to( ... ),\n        //\t\t\t'baz'\n        //\t\t]\n        //\n        //\t\tclass: {\n        //\t\t\tns: 'abc',\n        //\t\t\tvalue: Template.bind( ... ).to( ... )\n        //\t\t}\n        //\n        if (hasTemplateBinding(attrValue)) {\n          // Normalize attributes with additional data like namespace:\n          //\n          //\t\tclass: {\n          //\t\t\tns: 'abc',\n          //\t\t\tvalue: [ ... ]\n          //\t\t}\n          //\n          var valueToBind = attrNs ? attrValue[0].value : attrValue;\n\n          // Extend the original value of attributes like \"style\" and \"class\",\n          // don't override them.\n          if (revertData && shouldExtend(attrName)) {\n            valueToBind.unshift(domAttrValue);\n          }\n          this._bindToObservable({\n            schema: valueToBind,\n            updater: getAttributeUpdater(node, attrName, attrNs),\n            data: data\n          });\n        }\n\n        // Style attribute could be an Object so it needs to be parsed in a specific way.\n        //\n        //\t\tstyle: {\n        //\t\t\twidth: '100px',\n        //\t\t\theight: Template.bind( ... ).to( ... )\n        //\t\t}\n        //\n        else if (attrName == 'style' && typeof attrValue[0] !== 'string') {\n          this._renderStyleAttribute(attrValue[0], data);\n        }\n\n        // Otherwise simply set the static attribute:\n        //\n        //\t\tclass: [ 'foo' ]\n        //\n        //\t\tclass: [ 'all', 'are', 'static' ]\n        //\n        //\t\tclass: [\n        //\t\t\t{\n        //\t\t\t\tns: 'abc',\n        //\t\t\t\tvalue: [ 'foo' ]\n        //\t\t\t}\n        //\t\t]\n        //\n        else {\n          // Extend the original value of attributes like \"style\" and \"class\",\n          // don't override them.\n          if (revertData && domAttrValue && shouldExtend(attrName)) {\n            attrValue.unshift(domAttrValue);\n          }\n          attrValue = attrValue\n          // Retrieve \"values\" from:\n          //\n          //\t\tclass: [\n          //\t\t\t{\n          //\t\t\t\tns: 'abc',\n          //\t\t\t\tvalue: [ ... ]\n          //\t\t\t}\n          //\t\t]\n          //\n          .map(function (val) {\n            return val ? val.value || val : val;\n          })\n          // Flatten the array.\n          .reduce(function (prev, next) {\n            return prev.concat(next);\n          }, [])\n          // Convert into string.\n          .reduce(arrayValueReducer, '');\n          if (!isFalsy(attrValue)) {\n            node.setAttributeNS(attrNs, attrName, attrValue);\n          }\n        }\n      }\n    }\n\n    /**\n     * Renders the `style` attribute of an HTML element based on\n     * {@link module:ui/template~Template#attributes}.\n     *\n     * A style attribute is an {Object} with static values:\n     *\n     *\t\tattributes: {\n     *\t\t\tstyle: {\n     *\t\t\t\tcolor: 'red'\n     *\t\t\t}\n     *\t\t}\n     *\n     * or values bound to {@link module:ui/model~Model} properties:\n     *\n     *\t\tattributes: {\n     *\t\t\tstyle: {\n     *\t\t\t\tcolor: bind.to( ... )\n     *\t\t\t}\n     *\t\t}\n     *\n     * Note: The `style` attribute is rendered without setting the namespace. It does not seem to be\n     * needed.\n     *\n     * @private\n     * @param {Object} styles Styles located in `attributes.style` of {@link module:ui/template~TemplateDefinition}.\n     * @param {module:ui/template~RenderData} data Rendering data.\n     */\n  }, {\n    key: \"_renderStyleAttribute\",\n    value: function _renderStyleAttribute(styles, data) {\n      var node = data.node;\n      for (var styleName in styles) {\n        var styleValue = styles[styleName];\n\n        // Cases:\n        //\n        //\t\tstyle: {\n        //\t\t\tcolor: bind.to( 'attribute' )\n        //\t\t}\n        //\n        if (hasTemplateBinding(styleValue)) {\n          this._bindToObservable({\n            schema: [styleValue],\n            updater: getStyleUpdater(node, styleName),\n            data: data\n          });\n        }\n\n        // Cases:\n        //\n        //\t\tstyle: {\n        //\t\t\tcolor: 'red'\n        //\t\t}\n        //\n        else {\n          node.style[styleName] = styleValue;\n        }\n      }\n    }\n\n    /**\n     * Recursively renders HTML element's children from {@link module:ui/template~Template#children}.\n     *\n     * @protected\n     * @param {module:ui/template~RenderData} data Rendering data.\n     */\n  }, {\n    key: \"_renderElementChildren\",\n    value: function _renderElementChildren(data) {\n      var node = data.node;\n      var container = data.intoFragment ? document.createDocumentFragment() : node;\n      var isApplying = data.isApplying;\n      var childIndex = 0;\n      var _iterator2 = _createForOfIteratorHelper(this.children),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var child = _step2.value;\n          if (isViewCollection(child)) {\n            if (!isApplying) {\n              child.setParent(node);\n\n              // Note: ViewCollection renders its children.\n              var _iterator3 = _createForOfIteratorHelper(child),\n                _step3;\n              try {\n                for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n                  var view = _step3.value;\n                  container.appendChild(view.element);\n                }\n              } catch (err) {\n                _iterator3.e(err);\n              } finally {\n                _iterator3.f();\n              }\n            }\n          } else if (isView(child)) {\n            if (!isApplying) {\n              if (!child.isRendered) {\n                child.render();\n              }\n              container.appendChild(child.element);\n            }\n          } else if (isNode(child)) {\n            container.appendChild(child);\n          } else {\n            if (isApplying) {\n              var revertData = data.revertData;\n              var childRevertData = getEmptyRevertData();\n              revertData.children.push(childRevertData);\n              child._renderNode({\n                node: container.childNodes[childIndex++],\n                isApplying: true,\n                revertData: childRevertData\n              });\n            } else {\n              container.appendChild(child.render());\n            }\n          }\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      if (data.intoFragment) {\n        node.appendChild(container);\n      }\n    }\n\n    /**\n     * Activates `on` event listeners from the {@link module:ui/template~TemplateDefinition}\n     * on an HTML element.\n     *\n     * @protected\n     * @param {module:ui/template~RenderData} data Rendering data.\n     */\n  }, {\n    key: \"_setUpListeners\",\n    value: function _setUpListeners(data) {\n      var _this = this;\n      if (!this.eventListeners) {\n        return;\n      }\n      var _loop = function _loop(key) {\n        var revertBindings = _this.eventListeners[key].map(function (schemaItem) {\n          var _key$split = key.split('@'),\n            _key$split2 = _slicedToArray(_key$split, 2),\n            domEvtName = _key$split2[0],\n            domSelector = _key$split2[1];\n          return schemaItem.activateDomEventListener(domEvtName, domSelector, data);\n        });\n        if (data.revertData) {\n          data.revertData.bindings.push(revertBindings);\n        }\n      };\n      for (var key in this.eventListeners) {\n        _loop(key);\n      }\n    }\n\n    /**\n     * For a given {@link module:ui/template~TemplateValueSchema} containing {@link module:ui/template~TemplateBinding}\n     * activates the binding and sets its initial value.\n     *\n     * Note: {@link module:ui/template~TemplateValueSchema} can be for HTML element attributes or\n     * text node `textContent`.\n     *\n     * @protected\n     * @param {Object} options Binding options.\n     * @param {module:ui/template~TemplateValueSchema} options.schema\n     * @param {Function} options.updater A function which updates the DOM (like attribute or text).\n     * @param {module:ui/template~RenderData} options.data Rendering data.\n     */\n  }, {\n    key: \"_bindToObservable\",\n    value: function _bindToObservable(_ref) {\n      var schema = _ref.schema,\n        updater = _ref.updater,\n        data = _ref.data;\n      var revertData = data.revertData;\n\n      // Set initial values.\n      syncValueSchemaValue(schema, updater, data);\n      var revertBindings = schema\n      // Filter \"falsy\" (false, undefined, null, '') value schema components out.\n      .filter(function (item) {\n        return !isFalsy(item);\n      })\n      // Filter inactive bindings from schema, like static strings ('foo'), numbers (42), etc.\n      .filter(function (item) {\n        return item.observable;\n      })\n      // Once only the actual binding are left, let the emitter listen to observable change:attribute event.\n      // TODO: Reduce the number of listeners attached as many bindings may listen\n      // to the same observable attribute.\n      .map(function (templateBinding) {\n        return templateBinding.activateAttributeListener(schema, updater, data);\n      });\n      if (revertData) {\n        revertData.bindings.push(revertBindings);\n      }\n    }\n\n    /**\n     * Reverts {@link module:ui/template~RenderData#revertData template data} from a node to\n     * return it to the original state.\n     *\n     * @protected\n     * @param {HTMLElement|Text} node A node to be reverted.\n     * @param {Object} revertData An object that stores information about what changes have been made by\n     * {@link #apply} to the node. See {@link module:ui/template~RenderData#revertData} for more information.\n     */\n  }, {\n    key: \"_revertTemplateFromNode\",\n    value: function _revertTemplateFromNode(node, revertData) {\n      var _iterator4 = _createForOfIteratorHelper(revertData.bindings),\n        _step4;\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var binding = _step4.value;\n          // Each binding may consist of several observable+observable#attribute.\n          // like the following has 2:\n          //\n          //\t\tclass: [\n          //\t\t\t'x',\n          //\t\t\tbind.to( 'foo' ),\n          //\t\t\t'y',\n          //\t\t\tbind.to( 'bar' )\n          //\t\t]\n          //\n          var _iterator5 = _createForOfIteratorHelper(binding),\n            _step5;\n          try {\n            for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n              var revertBinding = _step5.value;\n              revertBinding();\n            }\n          } catch (err) {\n            _iterator5.e(err);\n          } finally {\n            _iterator5.f();\n          }\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n      if (revertData.text) {\n        node.textContent = revertData.text;\n        return;\n      }\n      for (var attrName in revertData.attributes) {\n        var attrValue = revertData.attributes[attrName];\n\n        // When the attribute has **not** been set before #apply().\n        if (attrValue === null) {\n          node.removeAttribute(attrName);\n        } else {\n          node.setAttribute(attrName, attrValue);\n        }\n      }\n      for (var i = 0; i < revertData.children.length; ++i) {\n        this._revertTemplateFromNode(node.childNodes[i], revertData.children[i]);\n      }\n    }\n  }], [{\n    key: \"bind\",\n    value: function bind(observable, emitter) {\n      return {\n        to: function to(eventNameOrFunctionOrAttribute, callback) {\n          return new TemplateToBinding({\n            eventNameOrFunction: eventNameOrFunctionOrAttribute,\n            attribute: eventNameOrFunctionOrAttribute,\n            observable: observable,\n            emitter: emitter,\n            callback: callback\n          });\n        },\n        if: function _if(attribute, valueIfTrue, callback) {\n          return new TemplateIfBinding({\n            observable: observable,\n            emitter: emitter,\n            attribute: attribute,\n            valueIfTrue: valueIfTrue,\n            callback: callback\n          });\n        }\n      };\n    }\n\n    /**\n     * Extends an existing {@link module:ui/template~Template} instance with some additional content\n     * from another {@link module:ui/template~TemplateDefinition}.\n     *\n     *\t\tconst bind = Template.bind( observable, emitter );\n     *\n     *\t\tconst template = new Template( {\n     *\t\t\ttag: 'p',\n     *\t\t\tattributes: {\n     *\t\t\t\tclass: 'a',\n     *\t\t\t\tdata-x: bind.to( 'foo' )\n     *\t\t\t},\n     *\t\t\tchildren: [\n     *\t\t\t\t{\n     *\t\t\t\t\ttag: 'span',\n     *\t\t\t\t\tattributes: {\n     *\t\t\t\t\t\tclass: 'b'\n     *\t\t\t\t\t},\n     *\t\t\t\t\tchildren: [\n     *\t\t\t\t\t\t'Span'\n     *\t\t\t\t\t]\n     *\t\t\t\t}\n     *\t\t\t]\n     *\t\t } );\n     *\n     *\t\t// Instance-level extension.\n     *\t\tTemplate.extend( template, {\n     *\t\t\tattributes: {\n     *\t\t\t\tclass: 'b',\n     *\t\t\t\tdata-x: bind.to( 'bar' )\n     *\t\t\t},\n     *\t\t\tchildren: [\n     *\t\t\t\t{\n     *\t\t\t\t\tattributes: {\n     *\t\t\t\t\t\tclass: 'c'\n     *\t\t\t\t\t}\n     *\t\t\t\t}\n     *\t\t\t]\n     *\t\t} );\n     *\n     *\t\t// Child extension.\n     *\t\tTemplate.extend( template.children[ 0 ], {\n     *\t\t\tattributes: {\n     *\t\t\t\tclass: 'd'\n     *\t\t\t}\n     *\t\t} );\n     *\n     * the `outerHTML` of `template.render()` is:\n     *\n     *\t\t<p class=\"a b\" data-x=\"{ observable.foo } { observable.bar }\">\n     *\t\t\t<span class=\"b c d\">Span</span>\n     *\t\t</p>\n     *\n     * @param {module:ui/template~Template} template An existing template instance to be extended.\n     * @param {module:ui/template~TemplateDefinition} def Additional definition to be applied to a template.\n     */\n  }, {\n    key: \"extend\",\n    value: function extend(template, def) {\n      if (template._isRendered) {\n        /**\n         * Extending a template after rendering may not work as expected. To make sure\n         * the {@link module:ui/template~Template.extend extending} works for an element,\n         * make sure it happens before {@link #render} is called.\n         *\n         * @error template-extend-render\n         */\n        throw new CKEditorError('template-extend-render: Attempting to extend a template which has already been rendered.', [this, template]);\n      }\n      extendTemplate(template, normalize(clone(def)));\n    }\n  }]);\n}();\nexport { Template as default };\nmix(Template, EmitterMixin);\n\n/**\n * Describes a binding created by the {@link module:ui/template~Template.bind} interface.\n *\n * @protected\n */\nexport var TemplateBinding = /*#__PURE__*/function () {\n  /**\n   * Creates an instance of the {@link module:ui/template~TemplateBinding} class.\n   *\n   * @param {module:ui/template~TemplateDefinition} def The definition of the binding.\n   */\n  function TemplateBinding(def) {\n    _classCallCheck(this, TemplateBinding);\n    Object.assign(this, def);\n\n    /**\n     * An observable instance of the binding. It either:\n     *\n     * * provides the attribute with the value,\n     * * or passes the event when a corresponding DOM event is fired.\n     *\n     * @member {module:utils/observablemixin~ObservableMixin} module:ui/template~TemplateBinding#observable\n     */\n\n    /**\n     * An {@link module:utils/emittermixin~Emitter} used by the binding to:\n     *\n     * * listen to the attribute change in the {@link module:ui/template~TemplateBinding#observable},\n     * * or listen to the event in the DOM.\n     *\n     * @member {module:utils/emittermixin~EmitterMixin} module:ui/template~TemplateBinding#emitter\n     */\n\n    /**\n     * The name of the {@link module:ui/template~TemplateBinding#observable observed attribute}.\n     *\n     * @member {String} module:ui/template~TemplateBinding#attribute\n     */\n\n    /**\n     * A custom function to process the value of the {@link module:ui/template~TemplateBinding#attribute}.\n     *\n     * @member {Function} [module:ui/template~TemplateBinding#callback]\n     */\n  }\n\n  /**\n   * Returns the value of the binding. It is the value of the {@link module:ui/template~TemplateBinding#attribute} in\n   * {@link module:ui/template~TemplateBinding#observable}. The value may be processed by the\n   * {@link module:ui/template~TemplateBinding#callback}, if such has been passed to the binding.\n   *\n   * @param {Node} [node] A native DOM node, passed to the custom {@link module:ui/template~TemplateBinding#callback}.\n   * @returns {*} The value of {@link module:ui/template~TemplateBinding#attribute} in\n   * {@link module:ui/template~TemplateBinding#observable}.\n   */\n  return _createClass(TemplateBinding, [{\n    key: \"getValue\",\n    value: function getValue(node) {\n      var value = this.observable[this.attribute];\n      return this.callback ? this.callback(value, node) : value;\n    }\n\n    /**\n     * Activates the listener which waits for changes of the {@link module:ui/template~TemplateBinding#attribute} in\n     * {@link module:ui/template~TemplateBinding#observable}, then updates the DOM with the aggregated\n     * value of {@link module:ui/template~TemplateValueSchema}.\n     *\n     * @param {module:ui/template~TemplateValueSchema} schema A full schema to generate an attribute or text in the DOM.\n     * @param {Function} updater A DOM updater function used to update the native DOM attribute or text.\n     * @param {module:ui/template~RenderData} data Rendering data.\n     * @returns {Function} A function to sever the listener binding.\n     */\n  }, {\n    key: \"activateAttributeListener\",\n    value: function activateAttributeListener(schema, updater, data) {\n      var _this2 = this;\n      var callback = function callback() {\n        return syncValueSchemaValue(schema, updater, data);\n      };\n      this.emitter.listenTo(this.observable, 'change:' + this.attribute, callback);\n\n      // Allows revert of the listener.\n      return function () {\n        _this2.emitter.stopListening(_this2.observable, 'change:' + _this2.attribute, callback);\n      };\n    }\n  }]);\n}();\n\n/**\n * Describes either:\n *\n * * a binding to an {@link module:utils/observablemixin~Observable},\n * * or a native DOM event binding.\n *\n * It is created by the {@link module:ui/template~BindChain#to} method.\n *\n * @protected\n */\nexport var TemplateToBinding = /*#__PURE__*/function (_TemplateBinding) {\n  function TemplateToBinding() {\n    _classCallCheck(this, TemplateToBinding);\n    return _callSuper(this, TemplateToBinding, arguments);\n  }\n  _inherits(TemplateToBinding, _TemplateBinding);\n  return _createClass(TemplateToBinding, [{\n    key: \"activateDomEventListener\",\n    value:\n    /**\n     * Activates the listener for the native DOM event, which when fired, is propagated by\n     * the {@link module:ui/template~TemplateBinding#emitter}.\n     *\n     * @param {String} domEvtName The name of the native DOM event.\n     * @param {String} domSelector The selector in the DOM to filter delegated events.\n     * @param {module:ui/template~RenderData} data Rendering data.\n     * @returns {Function} A function to sever the listener binding.\n     */\n    function activateDomEventListener(domEvtName, domSelector, data) {\n      var _this3 = this;\n      var callback = function callback(evt, domEvt) {\n        if (!domSelector || domEvt.target.matches(domSelector)) {\n          if (typeof _this3.eventNameOrFunction == 'function') {\n            _this3.eventNameOrFunction(domEvt);\n          } else {\n            _this3.observable.fire(_this3.eventNameOrFunction, domEvt);\n          }\n        }\n      };\n      this.emitter.listenTo(data.node, domEvtName, callback);\n\n      // Allows revert of the listener.\n      return function () {\n        _this3.emitter.stopListening(data.node, domEvtName, callback);\n      };\n    }\n  }]);\n}(TemplateBinding);\n\n/**\n * Describes a binding to {@link module:utils/observablemixin~ObservableMixin} created by the {@link module:ui/template~BindChain#if}\n * method.\n *\n * @protected\n */\nexport var TemplateIfBinding = /*#__PURE__*/function (_TemplateBinding2) {\n  function TemplateIfBinding() {\n    _classCallCheck(this, TemplateIfBinding);\n    return _callSuper(this, TemplateIfBinding, arguments);\n  }\n  _inherits(TemplateIfBinding, _TemplateBinding2);\n  return _createClass(TemplateIfBinding, [{\n    key: \"getValue\",\n    value:\n    /**\n     * @inheritDoc\n     */\n    function getValue(node) {\n      var value = _superPropGet(TemplateIfBinding, \"getValue\", this, 3)([node]);\n      return isFalsy(value) ? false : this.valueIfTrue || true;\n    }\n\n    /**\n     * The value of the DOM attribute or text to be set if the {@link module:ui/template~TemplateBinding#attribute} in\n     * {@link module:ui/template~TemplateBinding#observable} is `true`.\n     *\n     * @member {String} [module:ui/template~TemplateIfBinding#valueIfTrue]\n     */\n  }]);\n}(TemplateBinding);\n\n// Checks whether given {@link module:ui/template~TemplateValueSchema} contains a\n// {@link module:ui/template~TemplateBinding}.\n//\n// @param {module:ui/template~TemplateValueSchema} schema\n// @returns {Boolean}\nfunction hasTemplateBinding(schema) {\n  if (!schema) {\n    return false;\n  }\n\n  // Normalize attributes with additional data like namespace:\n  //\n  //\t\tclass: {\n  //\t\t\tns: 'abc',\n  //\t\t\tvalue: [ ... ]\n  //\t\t}\n  //\n  if (schema.value) {\n    schema = schema.value;\n  }\n  if (Array.isArray(schema)) {\n    return schema.some(hasTemplateBinding);\n  } else if (schema instanceof TemplateBinding) {\n    return true;\n  }\n  return false;\n}\n\n// Assembles the value using {@link module:ui/template~TemplateValueSchema} and stores it in a form of\n// an Array. Each entry of the Array corresponds to one of {@link module:ui/template~TemplateValueSchema}\n// items.\n//\n// @param {module:ui/template~TemplateValueSchema} schema\n// @param {Node} node DOM Node updated when {@link module:utils/observablemixin~ObservableMixin} changes.\n// @returns {Array}\nfunction getValueSchemaValue(schema, node) {\n  return schema.map(function (schemaItem) {\n    // Process {@link module:ui/template~TemplateBinding} bindings.\n    if (schemaItem instanceof TemplateBinding) {\n      return schemaItem.getValue(node);\n    }\n\n    // All static values like strings, numbers, and \"falsy\" values (false, null, undefined, '', etc.) just pass.\n    return schemaItem;\n  });\n}\n\n// A function executed each time the bound Observable attribute changes, which updates the DOM with a value\n// constructed from {@link module:ui/template~TemplateValueSchema}.\n//\n// @param {module:ui/template~TemplateValueSchema} schema\n// @param {Function} updater A function which updates the DOM (like attribute or text).\n// @param {Node} node DOM Node updated when {@link module:utils/observablemixin~ObservableMixin} changes.\nfunction syncValueSchemaValue(schema, updater, _ref2) {\n  var node = _ref2.node;\n  var value = getValueSchemaValue(schema, node);\n\n  // Check if schema is a single Template.bind.if, like:\n  //\n  //\t\tclass: Template.bind.if( 'foo' )\n  //\n  if (schema.length == 1 && schema[0] instanceof TemplateIfBinding) {\n    value = value[0];\n  } else {\n    value = value.reduce(arrayValueReducer, '');\n  }\n  if (isFalsy(value)) {\n    updater.remove();\n  } else {\n    updater.set(value);\n  }\n}\n\n// Returns an object consisting of `set` and `remove` functions, which\n// can be used in the context of DOM Node to set or reset `textContent`.\n// @see module:ui/view~View#_bindToObservable\n//\n// @param {Node} node DOM Node to be modified.\n// @returns {Object}\nfunction getTextUpdater(node) {\n  return {\n    set: function set(value) {\n      node.textContent = value;\n    },\n    remove: function remove() {\n      node.textContent = '';\n    }\n  };\n}\n\n// Returns an object consisting of `set` and `remove` functions, which\n// can be used in the context of DOM Node to set or reset an attribute.\n// @see module:ui/view~View#_bindToObservable\n//\n// @param {Node} node DOM Node to be modified.\n// @param {String} attrName Name of the attribute to be modified.\n// @param {String} [ns=null] Namespace to use.\n// @returns {Object}\nfunction getAttributeUpdater(el, attrName, ns) {\n  return {\n    set: function set(value) {\n      el.setAttributeNS(ns, attrName, value);\n    },\n    remove: function remove() {\n      el.removeAttributeNS(ns, attrName);\n    }\n  };\n}\n\n// Returns an object consisting of `set` and `remove` functions, which\n// can be used in the context of CSSStyleDeclaration to set or remove a style.\n// @see module:ui/view~View#_bindToObservable\n//\n// @param {Node} node DOM Node to be modified.\n// @param {String} styleName Name of the style to be modified.\n// @returns {Object}\nfunction getStyleUpdater(el, styleName) {\n  return {\n    set: function set(value) {\n      el.style[styleName] = value;\n    },\n    remove: function remove() {\n      el.style[styleName] = null;\n    }\n  };\n}\n\n// Clones definition of the template.\n//\n// @param {module:ui/template~TemplateDefinition} def\n// @returns {module:ui/template~TemplateDefinition}\nfunction clone(def) {\n  var clone = cloneDeepWith(def, function (value) {\n    // Don't clone the `Template.bind`* bindings because of the references to Observable\n    // and DomEmitterMixin instances inside, which would also be traversed and cloned by greedy\n    // cloneDeepWith algorithm. There's no point in cloning Observable/DomEmitterMixins\n    // along with the definition.\n    //\n    // Don't clone Template instances if provided as a child. They're simply #render()ed\n    // and nothing should interfere.\n    //\n    // Also don't clone View instances if provided as a child of the Template. The template\n    // instance will be extracted from the View during the normalization and there's no need\n    // to clone it.\n    if (value && (value instanceof TemplateBinding || isTemplate(value) || isView(value) || isViewCollection(value))) {\n      return value;\n    }\n  });\n  return clone;\n}\n\n// Normalizes given {@link module:ui/template~TemplateDefinition}.\n//\n// See:\n//  * {@link normalizeAttributes}\n//  * {@link normalizeListeners}\n//  * {@link normalizePlainTextDefinition}\n//  * {@link normalizeTextDefinition}\n//\n// @param {module:ui/template~TemplateDefinition} def\n// @returns {module:ui/template~TemplateDefinition} Normalized definition.\nfunction normalize(def) {\n  if (typeof def == 'string') {\n    def = normalizePlainTextDefinition(def);\n  } else if (def.text) {\n    normalizeTextDefinition(def);\n  }\n  if (def.on) {\n    def.eventListeners = normalizeListeners(def.on);\n\n    // Template mixes EmitterMixin, so delete #on to avoid collision.\n    delete def.on;\n  }\n  if (!def.text) {\n    if (def.attributes) {\n      normalizeAttributes(def.attributes);\n    }\n    var children = [];\n    if (def.children) {\n      if (isViewCollection(def.children)) {\n        children.push(def.children);\n      } else {\n        var _iterator6 = _createForOfIteratorHelper(def.children),\n          _step6;\n        try {\n          for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n            var child = _step6.value;\n            if (isTemplate(child) || isView(child) || isNode(child)) {\n              children.push(child);\n            } else {\n              children.push(new Template(child));\n            }\n          }\n        } catch (err) {\n          _iterator6.e(err);\n        } finally {\n          _iterator6.f();\n        }\n      }\n    }\n    def.children = children;\n  }\n  return def;\n}\n\n// Normalizes \"attributes\" section of {@link module:ui/template~TemplateDefinition}.\n//\n//\t\tattributes: {\n//\t\t\ta: 'bar',\n//\t\t\tb: {@link module:ui/template~TemplateBinding},\n//\t\t\tc: {\n//\t\t\t\tvalue: 'bar'\n//\t\t\t}\n//\t\t}\n//\n// becomes\n//\n//\t\tattributes: {\n//\t\t\ta: [ 'bar' ],\n//\t\t\tb: [ {@link module:ui/template~TemplateBinding} ],\n//\t\t\tc: {\n//\t\t\t\tvalue: [ 'bar' ]\n//\t\t\t}\n//\t\t}\n//\n// @param {Object} attributes\nfunction normalizeAttributes(attributes) {\n  for (var a in attributes) {\n    if (attributes[a].value) {\n      attributes[a].value = [].concat(attributes[a].value);\n    }\n    arrayify(attributes, a);\n  }\n}\n\n// Normalizes \"on\" section of {@link module:ui/template~TemplateDefinition}.\n//\n//\t\ton: {\n//\t\t\ta: 'bar',\n//\t\t\tb: {@link module:ui/template~TemplateBinding},\n//\t\t\tc: [ {@link module:ui/template~TemplateBinding}, () => { ... } ]\n//\t\t}\n//\n// becomes\n//\n//\t\ton: {\n//\t\t\ta: [ 'bar' ],\n//\t\t\tb: [ {@link module:ui/template~TemplateBinding} ],\n//\t\t\tc: [ {@link module:ui/template~TemplateBinding}, () => { ... } ]\n//\t\t}\n//\n// @param {Object} listeners\n// @returns {Object} Object containing normalized listeners.\nfunction normalizeListeners(listeners) {\n  for (var l in listeners) {\n    arrayify(listeners, l);\n  }\n  return listeners;\n}\n\n// Normalizes \"string\" {@link module:ui/template~TemplateDefinition}.\n//\n//\t\t\"foo\"\n//\n// becomes\n//\n//\t\t{ text: [ 'foo' ] },\n//\n// @param {String} def\n// @returns {module:ui/template~TemplateDefinition} Normalized template definition.\nfunction normalizePlainTextDefinition(def) {\n  return {\n    text: [def]\n  };\n}\n\n// Normalizes text {@link module:ui/template~TemplateDefinition}.\n//\n//\t\tchildren: [\n//\t\t\t{ text: 'def' },\n//\t\t\t{ text: {@link module:ui/template~TemplateBinding} }\n//\t\t]\n//\n// becomes\n//\n//\t\tchildren: [\n//\t\t\t{ text: [ 'def' ] },\n//\t\t\t{ text: [ {@link module:ui/template~TemplateBinding} ] }\n//\t\t]\n//\n// @param {module:ui/template~TemplateDefinition} def\nfunction normalizeTextDefinition(def) {\n  if (!Array.isArray(def.text)) {\n    def.text = [def.text];\n  }\n}\n\n// Wraps an entry in Object in an Array, if not already one.\n//\n//\t\t{\n//\t\t\tx: 'y',\n//\t\t\ta: [ 'b' ]\n//\t\t}\n//\n// becomes\n//\n//\t\t{\n//\t\t\tx: [ 'y' ],\n//\t\t\ta: [ 'b' ]\n//\t\t}\n//\n// @param {Object} obj\n// @param {String} key\nfunction arrayify(obj, key) {\n  if (!Array.isArray(obj[key])) {\n    obj[key] = [obj[key]];\n  }\n}\n\n// A helper which concatenates the value avoiding unwanted\n// leading white spaces.\n//\n// @param {String} prev\n// @param {String} cur\n// @returns {String}\nfunction arrayValueReducer(prev, cur) {\n  if (isFalsy(cur)) {\n    return prev;\n  } else if (isFalsy(prev)) {\n    return cur;\n  } else {\n    return \"\".concat(prev, \" \").concat(cur);\n  }\n}\n\n// Extends one object defined in the following format:\n//\n//\t\t{\n//\t\t\tkey1: [Array1],\n//\t\t\tkey2: [Array2],\n//\t\t\t...\n//\t\t\tkeyN: [ArrayN]\n//\t\t}\n//\n// with another object of the same data format.\n//\n// @param {Object} obj Base object.\n// @param {Object} ext Object extending base.\n// @returns {String}\nfunction extendObjectValueArray(obj, ext) {\n  for (var a in ext) {\n    if (obj[a]) {\n      var _obj$a;\n      (_obj$a = obj[a]).push.apply(_obj$a, _toConsumableArray(ext[a]));\n    } else {\n      obj[a] = ext[a];\n    }\n  }\n}\n\n// A helper for {@link module:ui/template~Template#extend}. Recursively extends {@link module:ui/template~Template} instance\n// with content from {@link module:ui/template~TemplateDefinition}. See {@link module:ui/template~Template#extend} to learn more.\n//\n// @param {module:ui/template~Template} def A template instance to be extended.\n// @param {module:ui/template~TemplateDefinition} def A definition which is to extend the template instance.\n// @param {Object} Error context.\nfunction extendTemplate(template, def) {\n  if (def.attributes) {\n    if (!template.attributes) {\n      template.attributes = {};\n    }\n    extendObjectValueArray(template.attributes, def.attributes);\n  }\n  if (def.eventListeners) {\n    if (!template.eventListeners) {\n      template.eventListeners = {};\n    }\n    extendObjectValueArray(template.eventListeners, def.eventListeners);\n  }\n  if (def.text) {\n    var _template$text;\n    (_template$text = template.text).push.apply(_template$text, _toConsumableArray(def.text));\n  }\n  if (def.children && def.children.length) {\n    if (template.children.length != def.children.length) {\n      /**\n       * The number of children in extended definition does not match.\n       *\n       * @error ui-template-extend-children-mismatch\n       */\n      throw new CKEditorError('ui-template-extend-children-mismatch: The number of children in extended definition does not match.', template);\n    }\n    var childIndex = 0;\n    var _iterator7 = _createForOfIteratorHelper(def.children),\n      _step7;\n    try {\n      for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n        var childDef = _step7.value;\n        extendTemplate(template.children[childIndex++], childDef);\n      }\n    } catch (err) {\n      _iterator7.e(err);\n    } finally {\n      _iterator7.f();\n    }\n  }\n}\n\n// Checks if value is \"falsy\".\n// Note: 0 (Number) is not \"falsy\" in this context.\n//\n// @private\n// @param {*} value Value to be checked.\nfunction isFalsy(value) {\n  return !value && value !== 0;\n}\n\n// Checks if the item is an instance of {@link module:ui/view~View}\n//\n// @private\n// @param {*} value Value to be checked.\nfunction isView(item) {\n  return item instanceof View;\n}\n\n// Checks if the item is an instance of {@link module:ui/template~Template}\n//\n// @private\n// @param {*} value Value to be checked.\nfunction isTemplate(item) {\n  return item instanceof Template;\n}\n\n// Checks if the item is an instance of {@link module:ui/viewcollection~ViewCollection}\n//\n// @private\n// @param {*} value Value to be checked.\nfunction isViewCollection(item) {\n  return item instanceof ViewCollection;\n}\n\n// Creates an empty skeleton for {@link module:ui/template~Template#revert}\n// data.\n//\n// @private\nfunction getEmptyRevertData() {\n  return {\n    children: [],\n    bindings: [],\n    attributes: {}\n  };\n}\n\n// Checks whether an attribute should be extended when\n// {@link module:ui/template~Template#apply} is called.\n//\n// @private\n// @param {String} attrName Attribute name to check.\nfunction shouldExtend(attrName) {\n  return attrName == 'class' || attrName == 'style';\n}\n\n/**\n * A definition of the {@link module:ui/template~Template}. It describes what kind of\n * node a template will render (HTML element or text), attributes of an element, DOM event\n * listeners and children.\n *\n * Also see:\n * * {@link module:ui/template~TemplateValueSchema} to learn about HTML element attributes,\n * * {@link module:ui/template~TemplateListenerSchema} to learn about DOM event listeners.\n *\n * A sample definition on an HTML element can look like this:\n *\n *\t\tnew Template( {\n *\t\t\ttag: 'p',\n *\t\t\tchildren: [\n *\t\t\t\t{\n *\t\t\t\t\ttag: 'span',\n *\t\t\t\t\tattributes: { ... },\n *\t\t\t\t\tchildren: [ ... ],\n *\t\t\t\t},\n *\t\t\t\t{\n *\t\t\t\t\ttext: 'static–text'\n *\t\t\t\t},\n *\t\t\t\t'also-static–text',\n *\t\t\t],\n *\t\t\tattributes: {\n *\t\t\t\tclass: {@link module:ui/template~TemplateValueSchema},\n *\t\t\t\tid: {@link module:ui/template~TemplateValueSchema},\n *\t\t\t\tstyle: {@link module:ui/template~TemplateValueSchema}\n *\n *\t\t\t\t// ...\n *\t\t\t},\n *\t\t\ton: {\n *\t\t\t\t'click': {@link module:ui/template~TemplateListenerSchema}\n *\n *\t\t\t\t// Document.querySelector format is also accepted.\n *\t\t\t\t'keyup@a.some-class': {@link module:ui/template~TemplateListenerSchema}\n *\n *\t\t\t\t// ...\n *\t\t\t}\n *\t\t} );\n *\n * A {@link module:ui/view~View}, another {@link module:ui/template~Template} or a native DOM node\n * can also become a child of a template. When a view is passed, its {@link module:ui/view~View#element} is used:\n *\n *\t\tconst view = new SomeView();\n *\t\tconst childTemplate = new Template( { ... } );\n *\t\tconst childNode = document.createElement( 'b' );\n *\n *\t\tnew Template( {\n *\t\t\ttag: 'p',\n *\n *\t\t\tchildren: [\n *\t\t\t\t// view#element will be added as a child of this <p>.\n *\t\t\t\tview,\n *\n * \t\t\t\t// The output of childTemplate.render() will be added here.\n *\t\t\t\tchildTemplate,\n *\n *\t\t\t\t// Native DOM nodes are included directly in the rendered output.\n *\t\t\t\tchildNode\n *\t\t\t]\n *\t\t} );\n *\n * An entire {@link module:ui/viewcollection~ViewCollection} can be used as a child in the definition:\n *\n *\t\tconst collection = new ViewCollection();\n *\t\tcollection.add( someView );\n *\n *\t\tnew Template( {\n *\t\t\ttag: 'p',\n *\n *\t\t\tchildren: collection\n *\t\t} );\n *\n * @typedef module:ui/template~TemplateDefinition\n * @type Object\n *\n * @property {String} tag See the template {@link module:ui/template~Template#tag} property.\n *\n * @property {Array.<module:ui/template~TemplateDefinition>} [children]\n * See the template {@link module:ui/template~Template#children} property.\n *\n * @property {Object.<String, module:ui/template~TemplateValueSchema>} [attributes]\n * See the template {@link module:ui/template~Template#attributes} property.\n *\n * @property {String|module:ui/template~TemplateValueSchema|Array.<String|module:ui/template~TemplateValueSchema>} [text]\n * See the template {@link module:ui/template~Template#text} property.\n *\n * @property {Object.<String, module:ui/template~TemplateListenerSchema>} [on]\n * See the template {@link module:ui/template~Template#eventListeners} property.\n */\n\n/**\n * Describes a value of an HTML element attribute or `textContent`. It allows combining multiple\n * data sources like static values and {@link module:utils/observablemixin~Observable} attributes.\n *\n * Also see:\n * * {@link module:ui/template~TemplateDefinition} to learn where to use it,\n * * {@link module:ui/template~Template.bind} to learn how to configure\n * {@link module:utils/observablemixin~Observable} attribute bindings,\n * * {@link module:ui/template~Template#render} to learn how to render a template,\n * * {@link module:ui/template~BindChain#to `to()`} and {@link module:ui/template~BindChain#if `if()`}\n * methods to learn more about bindings.\n *\n * Attribute values can be described in many different ways:\n *\n *\t\t// Bind helper will create bindings to attributes of the observable.\n *\t\tconst bind = Template.bind( observable, emitter );\n *\n *\t\tnew Template( {\n *\t\t\ttag: 'p',\n *\t\t\tattributes: {\n *\t\t\t\t// A plain string schema.\n *\t\t\t\t'class': 'static-text',\n *\n *\t\t\t\t// An object schema, binds to the \"foo\" attribute of the\n *\t\t\t\t// observable and follows its value.\n *\t\t\t\t'class': bind.to( 'foo' ),\n *\n *\t\t\t\t// An array schema, combines the above.\n *\t\t\t\t'class': [\n *\t\t\t\t\t'static-text',\n *\t\t\t\t\tbind.to( 'bar', () => { ... } ),\n *\n * \t\t\t\t\t// Bindings can also be conditional.\n *\t\t\t\t\tbind.if( 'baz', 'class-when-baz-is-true' )\n *\t\t\t\t],\n *\n *\t\t\t\t// An array schema, with a custom namespace, e.g. useful for creating SVGs.\n *\t\t\t\t'class': {\n *\t\t\t\t\tns: 'http://ns.url',\n *\t\t\t\t\tvalue: [\n *\t\t\t\t\t\tbind.if( 'baz', 'value-when-true' ),\n *\t\t\t\t\t\t'static-text'\n *\t\t\t\t\t]\n *\t\t\t\t},\n *\n *\t\t\t\t// An object schema, specific for styles.\n *\t\t\t\tstyle: {\n *\t\t\t\t\tcolor: 'red',\n *\t\t\t\t\tbackgroundColor: bind.to( 'qux', () => { ... } )\n *\t\t\t\t}\n *\t\t\t}\n *\t\t} );\n *\n * Text nodes can also have complex values:\n *\n *\t\tconst bind = Template.bind( observable, emitter );\n *\n *\t\t// Will render a \"foo\" text node.\n *\t\tnew Template( {\n *\t\t\ttext: 'foo'\n *\t\t} );\n *\n *\t\t// Will render a \"static text: {observable.foo}\" text node.\n *\t\t// The text of the node will be updated as the \"foo\" attribute changes.\n *\t\tnew Template( {\n *\t\t\ttext: [\n *\t\t\t\t'static text: ',\n *\t\t\t\tbind.to( 'foo', () => { ... } )\n *\t\t\t]\n *\t\t} );\n *\n * @typedef module:ui/template~TemplateValueSchema\n * @type {Object|String|Array}\n */\n\n/**\n * Describes an event listener attached to an HTML element. Such listener can propagate DOM events\n * through an {@link module:utils/observablemixin~Observable} instance, execute custom callbacks\n * or both, if necessary.\n *\n * Also see:\n * * {@link module:ui/template~TemplateDefinition} to learn more about template definitions,\n * * {@link module:ui/template~BindChain#to `to()`} method to learn more about bindings.\n *\n * Check out different ways of attaching event listeners below:\n *\n *\t\t// Bind helper will propagate events through the observable.\n *\t\tconst bind = Template.bind( observable, emitter );\n *\n *\t\tnew Template( {\n *\t\t\ttag: 'p',\n *\t\t\ton: {\n *\t\t\t\t// An object schema. The observable will fire the \"clicked\" event upon DOM \"click\".\n *\t\t\t\tclick: bind.to( 'clicked' )\n *\n *\t\t\t\t// An object schema. It will work for \"click\" event on \"a.foo\" children only.\n *\t\t\t\t'click@a.foo': bind.to( 'clicked' )\n *\n *\t\t\t\t// An array schema, makes the observable propagate multiple events.\n *\t\t\t\tclick: [\n *\t\t\t\t\tbind.to( 'clicked' ),\n *\t\t\t\t\tbind.to( 'executed' )\n *\t\t\t\t],\n *\n *\t\t\t\t// An array schema with a custom callback.\n *\t\t\t\t'click@a.foo': {\n *\t\t\t\t\tbind.to( 'clicked' ),\n *\t\t\t\t\tbind.to( evt => {\n *\t\t\t\t\t\tconsole.log( `${ evt.target } has been clicked!` );\n *\t\t\t\t\t} }\n *\t\t\t\t}\n *\t\t\t}\n *\t\t} );\n *\n * @typedef module:ui/template~TemplateListenerSchema\n * @type {Object|String|Array}\n */\n\n/**\n * The return value of {@link ~Template.bind `Template.bind()`}. It provides `to()` and `if()`\n * methods to create the {@link module:utils/observablemixin~Observable observable} attribute and event bindings.\n *\n * @interface module:ui/template~BindChain\n */\n\n/**\n * Binds an {@link module:utils/observablemixin~Observable observable} to either:\n *\n * * an HTML element attribute or a text node `textContent`, so it remains in sync with the observable\n * attribute as it changes,\n * * or an HTML element DOM event, so the DOM events are propagated through an observable.\n *\n * Some common use cases of `to()` bindings are presented below:\n *\n *\t\tconst bind = Template.bind( observable, emitter );\n *\n *\t\tnew Template( {\n *\t\t\ttag: 'p',\n *\t\t\tattributes: {\n *\t\t\t\t// class=\"...\" attribute gets bound to `observable#a`\n *\t\t\t\tclass: bind.to( 'a' )\n *\t\t\t},\n *\t\t\tchildren: [\n *\t\t\t\t// <p>...</p> gets bound to observable#b; always `toUpperCase()`.\n *\t\t\t\t{\n *\t\t\t\t\ttext: bind.to( 'b', ( value, node ) => value.toUpperCase() )\n *\t\t\t\t}\n *\t\t\t],\n *\t\t\ton: {\n *\t\t\t\tclick: [\n *\t\t\t\t\t// An observable will fire \"clicked\" upon \"click\" in the DOM.\n *\t\t\t\t\tbind.to( 'clicked' ),\n *\n *\t\t\t\t\t// A custom callback will be executed upon \"click\" in the DOM.\n *\t\t\t\t\tbind.to( () => {\n *\t\t\t\t\t\t...\n *\t\t\t\t\t} )\n *\t\t\t\t]\n *\t\t\t}\n *\t\t} ).render();\n *\n * Learn more about using `to()` in the {@link module:ui/template~TemplateValueSchema} and\n * {@link module:ui/template~TemplateListenerSchema}.\n *\n * @method #to\n * @param {String|Function} eventNameOrFunctionOrAttribute An attribute name of\n * {@link module:utils/observablemixin~Observable} or a DOM event name or an event callback.\n * @param {Function} [callback] Allows for processing of the value. Accepts `Node` and `value` as arguments.\n * @returns {module:ui/template~TemplateBinding}\n */\n\n/**\n * Binds an {@link module:utils/observablemixin~Observable observable} to an HTML element attribute or a text\n * node `textContent` so it remains in sync with the observable attribute as it changes.\n *\n * Unlike {@link module:ui/template~BindChain#to}, it controls the presence of the attribute or `textContent`\n * depending on the \"falseness\" of an {@link module:utils/observablemixin~Observable} attribute.\n *\n *\t\tconst bind = Template.bind( observable, emitter );\n *\n *\t\tnew Template( {\n *\t\t\ttag: 'input',\n *\t\t\tattributes: {\n *\t\t\t\t// <input checked> when `observable#a` is not undefined/null/false/''\n *\t\t\t\t// <input> when `observable#a` is undefined/null/false\n *\t\t\t\tchecked: bind.if( 'a' )\n *\t\t\t},\n *\t\t\tchildren: [\n *\t\t\t\t{\n *\t\t\t\t\t// <input>\"b-is-not-set\"</input> when `observable#b` is undefined/null/false/''\n *\t\t\t\t\t// <input></input> when `observable#b` is not \"falsy\"\n *\t\t\t\t\ttext: bind.if( 'b', 'b-is-not-set', ( value, node ) => !value )\n *\t\t\t\t}\n *\t\t\t]\n *\t\t} ).render();\n *\n * Learn more about using `if()` in the {@link module:ui/template~TemplateValueSchema}.\n *\n * @method #if\n * @param {String} attribute An attribute name of {@link module:utils/observablemixin~Observable} used in the binding.\n * @param {String} [valueIfTrue] Value set when the {@link module:utils/observablemixin~Observable} attribute is not\n * undefined/null/false/'' (empty string).\n * @param {Function} [callback] Allows for processing of the value. Accepts `Node` and `value` as arguments.\n * @returns {module:ui/template~TemplateBinding}\n */\n\n/**\n * The {@link module:ui/template~Template#_renderNode} configuration.\n *\n * @private\n * @interface module:ui/template~RenderData\n */\n\n/**\n * Tells {@link module:ui/template~Template#_renderNode} to render\n * children into `DocumentFragment` first and then append the fragment\n * to the parent element. It is a speed optimization.\n *\n * @member {Boolean} #intoFragment\n */\n\n/**\n * A node which is being rendered.\n *\n * @member {HTMLElement|Text} #node\n */\n\n/**\n * Indicates whether the {@module:ui/template~RenderNodeOptions#node} has\n * been provided by {@module:ui/template~Template#apply}.\n *\n * @member {Boolean} #isApplying\n */\n\n/**\n * An object storing the data that helps {@module:ui/template~Template#revert}\n * bringing back an element to its initial state, i.e. before\n * {@module:ui/template~Template#apply} was called.\n *\n * @member {Object} #revertData\n */","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/toolbar/enabletoolbarkeyboardfocus\n */\n\n/**\n * Enables focus/blur toolbar navigation using `Alt+F10` and `Esc` keystrokes.\n *\n * @param {Object} options Options of the utility.\n * @param {*} options.origin A view to which the focus will return when `Esc` is pressed and\n * `options.toolbar` is focused.\n * @param {module:utils/keystrokehandler~KeystrokeHandler} options.originKeystrokeHandler A keystroke\n * handler to register `Alt+F10` keystroke.\n * @param {module:utils/focustracker~FocusTracker} options.originFocusTracker A focus tracker\n * for `options.origin`.\n * @param {module:ui/toolbar/toolbarview~ToolbarView} options.toolbar A toolbar which is to gain\n * focus when `Alt+F10` is pressed.\n * @param {Function} [options.beforeFocus] A callback executed before the `options.toolbar` gains focus\n * upon the `Alt+F10` keystroke.\n * @param {Function} [options.afterBlur] A callback executed after `options.toolbar` loses focus upon\n * `Esc` keystroke but before the focus goes back to `options.origin`.\n */\nexport default function enableToolbarKeyboardFocus(_ref) {\n  var origin = _ref.origin,\n    originKeystrokeHandler = _ref.originKeystrokeHandler,\n    originFocusTracker = _ref.originFocusTracker,\n    toolbar = _ref.toolbar,\n    beforeFocus = _ref.beforeFocus,\n    afterBlur = _ref.afterBlur;\n  // Because toolbar items can get focus, the overall state of the toolbar must\n  // also be tracked.\n  originFocusTracker.add(toolbar.element);\n\n  // Focus the toolbar on the keystroke, if not already focused.\n  originKeystrokeHandler.set('Alt+F10', function (data, cancel) {\n    if (originFocusTracker.isFocused && !toolbar.focusTracker.isFocused) {\n      if (beforeFocus) {\n        beforeFocus();\n      }\n      toolbar.focus();\n      cancel();\n    }\n  });\n\n  // Blur the toolbar and bring the focus back to origin.\n  toolbar.keystrokes.set('Esc', function (data, cancel) {\n    if (toolbar.focusTracker.isFocused) {\n      origin.focus();\n      if (afterBlur) {\n        afterBlur();\n      }\n      cancel();\n    }\n  });\n}","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/toolbar/normalizetoolbarconfig\n */\n\n/**\n * Normalizes the toolbar configuration (`config.toolbar`), which:\n *\n * * may be defined as an `Array`:\n *\n * \t\ttoolbar: [ 'heading', 'bold', 'italic', 'link', ... ]\n *\n * * or an `Object`:\n *\n *\t\ttoolbar: {\n *\t\t\titems: [ 'heading', 'bold', 'italic', 'link', ... ],\n *\t\t\t...\n *\t\t}\n *\n * * or may not be defined at all (`undefined`)\n *\n * and returns it in the object form.\n *\n * @param {Array|Object|undefined} config The value of `config.toolbar`.\n * @returns {Object} A normalized toolbar config object.\n */\nexport default function normalizeToolbarConfig(config) {\n  if (Array.isArray(config)) {\n    return {\n      items: config\n    };\n  }\n  if (!config) {\n    return {\n      items: []\n    };\n  }\n  return Object.assign({\n    items: []\n  }, config);\n}","import _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/toolbar/toolbarseparatorview\n */\n\nimport View from '../view';\n\n/**\n * The toolbar separator view class.\n *\n * @extends module:ui/view~View\n */\nvar ToolbarSeparatorView = /*#__PURE__*/function (_View) {\n  /**\n   * @inheritDoc\n   */\n  function ToolbarSeparatorView(locale) {\n    var _this;\n    _classCallCheck(this, ToolbarSeparatorView);\n    _this = _callSuper(this, ToolbarSeparatorView, [locale]);\n    _this.setTemplate({\n      tag: 'span',\n      attributes: {\n        class: ['ck', 'ck-toolbar__separator']\n      }\n    });\n    return _this;\n  }\n  _inherits(ToolbarSeparatorView, _View);\n  return _createClass(ToolbarSeparatorView);\n}(View);\nexport { ToolbarSeparatorView as default };","import _slicedToArray from '/github/workspace/node_modules/@babel/runtime/helpers/esm/slicedToArray.js';\nimport _createForOfIteratorHelper from '/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js';\nimport _classCallCheck from '/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js';\nimport _createClass from '/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js';\nimport _callSuper from '/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js';\nimport _superPropGet from '/github/workspace/node_modules/@babel/runtime/helpers/esm/superPropGet.js';\nimport _inherits from '/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js';\nimport 'core-js/modules/es.array.map.js';\nimport 'core-js/modules/es.iterator.constructor.js';\nimport 'core-js/modules/es.iterator.map.js';\nimport 'core-js/modules/es.number.parse-int.js';\nimport 'core-js/modules/es.object.to-string.js';\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/toolbar/toolbarview\n */\n/* globals console */\nimport View from '../view';\nimport FocusTracker from '@ckeditor/ckeditor5-utils/src/focustracker';\nimport FocusCycler from '../focuscycler';\nimport KeystrokeHandler from '@ckeditor/ckeditor5-utils/src/keystrokehandler';\nimport ToolbarSeparatorView from './toolbarseparatorview';\nimport getResizeObserver from '@ckeditor/ckeditor5-utils/src/dom/getresizeobserver';\nimport preventDefault from '../bindings/preventdefault.js';\nimport Rect from '@ckeditor/ckeditor5-utils/src/dom/rect';\nimport global from '@ckeditor/ckeditor5-utils/src/dom/global';\nimport {\n    createDropdown,\n    addToolbarToDropdown\n} from '../dropdown/utils';\nimport { attachLinkToDocumentation } from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport verticalDotsIcon from '@ckeditor/ckeditor5-core/theme/icons/three-vertical-dots.svg';\nimport '../../theme/components/toolbar/toolbar.css';\n/**\n * The toolbar view class.\n *\n * @extends module:ui/view~View\n * @implements module:ui/dropdown/dropdownpanelfocusable~DropdownPanelFocusable\n */\nvar ToolbarView = /*#__PURE__*/\nfunction (_View) {\n    /**\n   * Creates an instance of the {@link module:ui/toolbar/toolbarview~ToolbarView} class.\n   *\n   * Also see {@link #render}.\n   *\n   * @param {module:utils/locale~Locale} locale The localization services instance.\n   * @param {module:ui/toolbar/toolbarview~ToolbarOptions} [options] Configuration options of the toolbar.\n   */\n    function ToolbarView(locale, options) {\n        var _this;\n        _classCallCheck(this, ToolbarView);\n        _this = _callSuper(this, ToolbarView, [locale]);\n        var bind = _this.bindTemplate;\n        var t = _this.t;\n        /**\n     * A reference to the options object passed to the constructor.\n     *\n     * @readonly\n     * @member {module:ui/toolbar/toolbarview~ToolbarOptions}\n     */\n        _this.options = options || {};\n        /**\n     * Label used by assistive technologies to describe this toolbar element.\n     *\n     * @default 'Editor toolbar'\n     * @member {String} #ariaLabel\n     */\n        _this.set('ariaLabel', t('Editor toolbar'));\n        /**\n     * A collection of toolbar items (buttons, dropdowns, etc.).\n     *\n     * @readonly\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n        _this.items = _this.createCollection();\n        /**\n     * Tracks information about the DOM focus in the toolbar.\n     *\n     * @readonly\n     * @member {module:utils/focustracker~FocusTracker}\n     */\n        _this.focusTracker = new FocusTracker();\n        /**\n     * An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}\n     * to handle keyboard navigation in the toolbar.\n     *\n     * @readonly\n     * @member {module:utils/keystrokehandler~KeystrokeHandler}\n     */\n        _this.keystrokes = new KeystrokeHandler();\n        /**\n     * An additional CSS class added to the {@link #element}.\n     *\n     * @observable\n     * @member {String} #class\n     */\n        _this.set('class');\n        /**\n     * A (child) view containing {@link #items toolbar items}.\n     *\n     * @readonly\n     * @member {module:ui/toolbar/toolbarview~ItemsView}\n     */\n        _this.itemsView = new ItemsView(locale);\n        /**\n     * A top–level collection aggregating building blocks of the toolbar.\n     *\n     *\t┌───────────────── ToolbarView ─────────────────┐\n     *\t| ┌──────────────── #children ────────────────┐ |\n     *\t| |   ┌──────────── #itemsView ───────────┐   | |\n     *\t| |   | [ item1 ] [ item2 ] ... [ itemN ] |   | |\n     *\t| |   └──────────────────────────────────-┘   | |\n     *\t| └───────────────────────────────────────────┘ |\n     *\t└───────────────────────────────────────────────┘\n     *\n     * By default, it contains the {@link #itemsView} but it can be extended with additional\n     * UI elements when necessary.\n     *\n     * @readonly\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n        _this.children = _this.createCollection();\n        _this.children.add(_this.itemsView);\n        /**\n     * A collection of {@link #items} that take part in the focus cycling\n     * (i.e. navigation using the keyboard). Usually, it contains a subset of {@link #items} with\n     * some optional UI elements that also belong to the toolbar and should be focusable\n     * by the user.\n     *\n     * @readonly\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n        _this.focusables = _this.createCollection();\n        /**\n     * Controls the orientation of toolbar items. Only available when\n     * {@link module:ui/toolbar/toolbarview~ToolbarOptions#shouldGroupWhenFull dynamic items grouping}\n     * is **disabled**.\n     *\n     * @observable\n     * @member {Boolean} #isVertical\n     */\n        /**\n     * Helps cycling over {@link #focusables focusable items} in the toolbar.\n     *\n     * @readonly\n     * @protected\n     * @member {module:ui/focuscycler~FocusCycler}\n     */\n        _this._focusCycler = new FocusCycler({\n            focusables: _this.focusables,\n            focusTracker: _this.focusTracker,\n            keystrokeHandler: _this.keystrokes,\n            actions: {\n                // Navigate toolbar items backwards using the arrow[left,up] keys.\n                focusPrevious: [\n                    'arrowleft',\n                    'arrowup'\n                ],\n                // Navigate toolbar items forwards using the arrow[right,down] keys.\n                focusNext: [\n                    'arrowright',\n                    'arrowdown'\n                ]\n            }\n        });\n        _this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-toolbar',\n                    bind.to('class')\n                ],\n                role: 'toolbar',\n                'aria-label': bind.to('ariaLabel')\n            },\n            children: _this.children,\n            on: {\n                // https://github.com/ckeditor/ckeditor5-ui/issues/206\n                mousedown: preventDefault(_this)\n            }\n        });\n        /**\n     * An instance of the active toolbar behavior that shapes its look and functionality.\n     *\n     * See {@link module:ui/toolbar/toolbarview~ToolbarBehavior} to learn more.\n     *\n     * @protected\n     * @readonly\n     * @member {module:ui/toolbar/toolbarview~ToolbarBehavior}\n     */\n        _this._behavior = _this.options.shouldGroupWhenFull ? new DynamicGrouping(_this) : new StaticLayout(_this);\n        return _this;\n    }\n    /**\n   * @inheritDoc\n   */\n    _inherits(ToolbarView, _View);\n    return _createClass(ToolbarView, [\n        {\n            key: 'render',\n            value: function render() {\n                var _this2 = this;\n                _superPropGet(ToolbarView, 'render', this, 3)([]);\n                // Children added before rendering should be known to the #focusTracker.\n                var _iterator = _createForOfIteratorHelper(this.items), _step;\n                try {\n                    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n                        var item = _step.value;\n                        this.focusTracker.add(item.element);\n                    }\n                } catch (err) {\n                    _iterator.e(err);\n                } finally {\n                    _iterator.f();\n                }\n                this.items.on('add', function (evt, item) {\n                    _this2.focusTracker.add(item.element);\n                });\n                this.items.on('remove', function (evt, item) {\n                    _this2.focusTracker.remove(item.element);\n                });\n                // Start listening for the keystrokes coming from #element.\n                this.keystrokes.listenTo(this.element);\n                this._behavior.render(this);\n            }    /**\n     * @inheritDoc\n     */\n        },\n        {\n            key: 'destroy',\n            value: function destroy() {\n                this._behavior.destroy();\n                return _superPropGet(ToolbarView, 'destroy', this, 3)([]);\n            }    /**\n     * Focuses the first focusable in {@link #focusables}.\n     */\n        },\n        {\n            key: 'focus',\n            value: function focus() {\n                this._focusCycler.focusFirst();\n            }    /**\n     * Focuses the last focusable in {@link #focusables}.\n     */\n        },\n        {\n            key: 'focusLast',\n            value: function focusLast() {\n                this._focusCycler.focusLast();\n            }    /**\n     * A utility that expands the plain toolbar configuration into\n     * {@link module:ui/toolbar/toolbarview~ToolbarView#items} using a given component factory.\n     *\n     * @param {Array.<String>} config The toolbar items configuration.\n     * @param {module:ui/componentfactory~ComponentFactory} factory A factory producing toolbar items.\n     */\n        },\n        {\n            key: 'fillFromConfig',\n            value: function fillFromConfig(config, factory) {\n                var _this3 = this;\n                config.map(function (name) {\n                    if (name == '|') {\n                        _this3.items.add(new ToolbarSeparatorView());\n                    } else if (factory.has(name)) {\n                        _this3.items.add(factory.create(name));\n                    } else {\n                        /**\n           * There was a problem processing the configuration of the toolbar. The item with the given\n           * name does not exist so it was omitted when rendering the toolbar.\n           *\n           * This warning usually shows up when the {@link module:core/plugin~Plugin} which is supposed\n           * to provide a toolbar item has not been loaded or there is a typo in the configuration.\n           *\n           * Make sure the plugin responsible for this toolbar item is loaded and the toolbar configuration\n           * is correct, e.g. {@link module:basic-styles/bold~Bold} is loaded for the `'bold'` toolbar item.\n           *\n           * You can use the following snippet to retrieve all available toolbar items:\n           *\n           *\t\tArray.from( editor.ui.componentFactory.names() );\n           *\n           * @error toolbarview-item-unavailable\n           * @param {String} name The name of the component.\n           */\n                        console.warn(attachLinkToDocumentation('toolbarview-item-unavailable: The requested toolbar item is unavailable.'), { name: name });\n                    }\n                });\n            }\n        }\n    ]);\n}(View);\n/**\n * An inner block of the {@link module:ui/toolbar/toolbarview~ToolbarView} hosting its\n * {@link module:ui/toolbar/toolbarview~ToolbarView#items}.\n *\n * @private\n * @extends module:ui/view~View\n */\nexport {\n    ToolbarView as default\n};\nvar ItemsView = /*#__PURE__*/\nfunction (_View2) {\n    /**\n   * @inheritDoc\n   */\n    function ItemsView(locale) {\n        var _this4;\n        _classCallCheck(this, ItemsView);\n        _this4 = _callSuper(this, ItemsView, [locale]);\n        /**\n     * A collection of items (buttons, dropdowns, etc.).\n     *\n     * @readonly\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n        _this4.children = _this4.createCollection();\n        _this4.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-toolbar__items'\n                ]\n            },\n            children: _this4.children\n        });\n        return _this4;\n    }\n    _inherits(ItemsView, _View2);\n    return _createClass(ItemsView);\n}(View);\n/**\n * A toolbar behavior that makes it static and unresponsive to the changes of the environment.\n * At the same time, it also makes it possible to display a toolbar with a vertical layout\n * using the {@link module:ui/toolbar/toolbarview~ToolbarView#isVertical} property.\n *\n * @private\n * @implements module:ui/toolbar/toolbarview~ToolbarBehavior\n */\nvar StaticLayout = /*#__PURE__*/\nfunction () {\n    /**\n   * Creates an instance of the {@link module:ui/toolbar/toolbarview~StaticLayout} toolbar\n   * behavior.\n   *\n   * @param {module:ui/toolbar/toolbarview~ToolbarView} view An instance of the toolbar that this behavior\n   * is added to.\n   */\n    function StaticLayout(view) {\n        _classCallCheck(this, StaticLayout);\n        var bind = view.bindTemplate;\n        // Static toolbar can be vertical when needed.\n        view.set('isVertical', false);\n        // 1:1 pass–through binding, all ToolbarView#items are visible.\n        view.itemsView.children.bindTo(view.items).using(function (item) {\n            return item;\n        });\n        // 1:1 pass–through binding, all ToolbarView#items are focusable.\n        view.focusables.bindTo(view.items).using(function (item) {\n            return item;\n        });\n        view.extendTemplate({\n            attributes: {\n                class: [// When vertical, the toolbar has an additional CSS class.\n                    bind.if('isVertical', 'ck-toolbar_vertical')]\n            }\n        });\n    }\n    /**\n   * @inheritDoc\n   */\n    return _createClass(StaticLayout, [\n        {\n            key: 'render',\n            value: function render() {\n            }    /**\n     * @inheritDoc\n     */\n        },\n        {\n            key: 'destroy',\n            value: function destroy() {\n            }\n        }\n    ]);\n}();\n/**\n * A toolbar behavior that makes the items respond to changes in the geometry.\n *\n * In a nutshell, it groups {@link module:ui/toolbar/toolbarview~ToolbarView#items}\n * that do not fit visually into a single row of the toolbar (due to limited space).\n * Items that do not fit are aggregated in a dropdown displayed at the end of the toolbar.\n *\n *\t┌──────────────────────────────────────── ToolbarView ──────────────────────────────────────────┐\n *\t| ┌─────────────────────────────────────── #children ─────────────────────────────────────────┐ |\n *\t| |   ┌─────── #itemsView ────────┐ ┌──────────────────────┐ ┌── #groupedItemsDropdown ───┐   | |\n *\t| |   |       #ungroupedItems     | | ToolbarSeparatorView | |        #groupedItems       |   | |\n *\t| |   └──────────────────────────-┘ └──────────────────────┘ └────────────────────────────┘   | |\n *\t| |                                  \\---------- only when toolbar items overflow --------/    | |\n *\t| └───────────────────────────────────────────────────────────────────────────────────────────┘ |\n *\t└───────────────────────────────────────────────────────────────────────────────────────────────┘\n *\n * @private\n * @implements module:ui/toolbar/toolbarview~ToolbarBehavior\n */\nvar DynamicGrouping = /*#__PURE__*/\nfunction () {\n    /**\n   * Creates an instance of the {@link module:ui/toolbar/toolbarview~DynamicGrouping} toolbar\n   * behavior.\n   *\n   * @param {module:ui/toolbar/toolbarview~ToolbarView} view An instance of the toolbar that this behavior\n   * is added to.\n   */\n    function DynamicGrouping(view) {\n        var _this5 = this;\n        _classCallCheck(this, DynamicGrouping);\n        /**\n     * A collection of toolbar children.\n     *\n     * @readonly\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n        this.viewChildren = view.children;\n        /**\n     * A collection of focusable toolbar elements.\n     *\n     * @readonly\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n        this.viewFocusables = view.focusables;\n        /**\n     * A view containing toolbar items.\n     *\n     * @readonly\n     * @member {module:ui/toolbar/toolbarview~ItemsView}\n     */\n        this.viewItemsView = view.itemsView;\n        /**\n     * Toolbar focus tracker.\n     *\n     * @readonly\n     * @member {module:utils/focustracker~FocusTracker}\n     */\n        this.viewFocusTracker = view.focusTracker;\n        /**\n     * Toolbar locale.\n     *\n     * @readonly\n     * @member {module:utils/locale~Locale}\n     */\n        this.viewLocale = view.locale;\n        /**\n     * Toolbar element.\n     *\n     * @readonly\n     * @member {HTMLElement} #viewElement\n     */\n        /**\n     * A subset of toolbar {@link module:ui/toolbar/toolbarview~ToolbarView#items}.\n     * Aggregates items that fit into a single row of the toolbar and were not {@link #groupedItems grouped}\n     * into a {@link #groupedItemsDropdown dropdown}. Items of this collection are displayed in the\n     * {@link module:ui/toolbar/toolbarview~ToolbarView#itemsView}.\n     *\n     * When none of the {@link module:ui/toolbar/toolbarview~ToolbarView#items} were grouped, it\n     * matches the {@link module:ui/toolbar/toolbarview~ToolbarView#items} collection in size and order.\n     *\n     * @readonly\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n        this.ungroupedItems = view.createCollection();\n        /**\n     * A subset of toolbar {@link module:ui/toolbar/toolbarview~ToolbarView#items}.\n     * A collection of the toolbar items that do not fit into a single row of the toolbar.\n     * Grouped items are displayed in a dedicated {@link #groupedItemsDropdown dropdown}.\n     *\n     * When none of the {@link module:ui/toolbar/toolbarview~ToolbarView#items} were grouped,\n     * this collection is empty.\n     *\n     * @readonly\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n        this.groupedItems = view.createCollection();\n        /**\n     * The dropdown that aggregates {@link #groupedItems grouped items} that do not fit into a single\n     * row of the toolbar. It is displayed on demand as the last of\n     * {@link module:ui/toolbar/toolbarview~ToolbarView#children toolbar children} and offers another\n     * (nested) toolbar which displays items that would normally overflow.\n     *\n     * @readonly\n     * @member {module:ui/dropdown/dropdownview~DropdownView}\n     */\n        this.groupedItemsDropdown = this._createGroupedItemsDropdown();\n        /**\n     * An instance of the resize observer that helps dynamically determine the geometry of the toolbar\n     * and manage items that do not fit into a single row.\n     *\n     * **Note:** Created in {@link #_enableGroupingOnResize}.\n     *\n     * @readonly\n     * @member {module:utils/dom/getresizeobserver~ResizeObserver}\n     */\n        this.resizeObserver = null;\n        /**\n     * A cached value of the horizontal padding style used by {@link #_updateGrouping}\n     * to manage the {@link module:ui/toolbar/toolbarview~ToolbarView#items} that do not fit into\n     * a single toolbar line. This value can be reused between updates because it is unlikely that\n     * the padding will change and re–using `Window.getComputedStyle()` is expensive.\n     *\n     * @readonly\n     * @member {Number}\n     */\n        this.cachedPadding = null;\n        // Only those items that were not grouped are visible to the user.\n        view.itemsView.children.bindTo(this.ungroupedItems).using(function (item) {\n            return item;\n        });\n        // Make sure all #items visible in the main space of the toolbar are \"focuscycleable\".\n        this.ungroupedItems.on('add', this._updateFocusCycleableItems.bind(this));\n        this.ungroupedItems.on('remove', this._updateFocusCycleableItems.bind(this));\n        // Make sure the #groupedItemsDropdown is also included in cycling when it appears.\n        view.children.on('add', this._updateFocusCycleableItems.bind(this));\n        view.children.on('remove', this._updateFocusCycleableItems.bind(this));\n        // ToolbarView#items is dynamic. When an item is added, it should be automatically\n        // represented in either grouped or ungrouped items at the right index.\n        // In other words #items == concat( #ungroupedItems, #groupedItems )\n        // (in length and order).\n        view.items.on('add', function (evt, item, index) {\n            if (index > _this5.ungroupedItems.length) {\n                _this5.groupedItems.add(item, index - _this5.ungroupedItems.length);\n            } else {\n                _this5.ungroupedItems.add(item, index);\n            }\n            // When a new ungrouped item joins in and lands in #ungroupedItems, there's a chance it causes\n            // the toolbar to overflow.\n            _this5._updateGrouping();\n        });\n        // When an item is removed from ToolbarView#items, it should be automatically\n        // removed from either grouped or ungrouped items.\n        view.items.on('remove', function (evt, item, index) {\n            if (index > _this5.ungroupedItems.length) {\n                _this5.groupedItems.remove(item);\n            } else {\n                _this5.ungroupedItems.remove(item);\n            }\n            // Whether removed from grouped or ungrouped items, there is a chance\n            // some new space is available and we could do some ungrouping.\n            _this5._updateGrouping();\n        });\n        view.extendTemplate({\n            attributes: {\n                class: [// To group items dynamically, the toolbar needs a dedicated CSS class.\n                    'ck-toolbar_grouping']\n            }\n        });\n    }\n    /**\n   * Enables dynamic items grouping based on the dimensions of the toolbar.\n   *\n   * @param {module:ui/toolbar/toolbarview~ToolbarView} view An instance of the toolbar that this behavior\n   * is added to.\n   */\n    return _createClass(DynamicGrouping, [\n        {\n            key: 'render',\n            value: function render(view) {\n                this.viewElement = view.element;\n                this._enableGroupingOnResize();\n            }    /**\n     * Cleans up the internals used by this behavior.\n     */\n        },\n        {\n            key: 'destroy',\n            value: function destroy() {\n                // The dropdown may not be in ToolbarView#children at the moment of toolbar destruction\n                // so let's make sure it's actually destroyed along with the toolbar.\n                this.groupedItemsDropdown.destroy();\n                this.resizeObserver.disconnect();\n            }    /**\n     * When called, it will check if any of the {@link #ungroupedItems} do not fit into a single row of the toolbar,\n     * and it will move them to the {@link #groupedItems} when it happens.\n     *\n     * At the same time, it will also check if there is enough space in the toolbar for the first of the\n     * {@link #groupedItems} to be returned back to {@link #ungroupedItems} and still fit into a single row\n     * without the toolbar wrapping.\n     *\n     * @protected\n     */\n        },\n        {\n            key: '_updateGrouping',\n            value: function _updateGrouping() {\n                // Do no grouping–related geometry analysis when the toolbar is detached from visible DOM,\n                // for instance before #render(), or after render but without a parent or a parent detached\n                // from DOM. DOMRects won't work anyway and there will be tons of warning in the console and\n                // nothing else.\n                if (!this.viewElement.ownerDocument.body.contains(this.viewElement)) {\n                    return;\n                }\n                var wereItemsGrouped;\n                // Group #items as long as some wrap to the next row. This will happen, for instance,\n                // when the toolbar is getting narrow and there is not enough space to display all items in\n                // a single row.\n                while (this._areItemsOverflowing) {\n                    this._groupLastItem();\n                    wereItemsGrouped = true;\n                }\n                // If none were grouped now but there were some items already grouped before,\n                // then, what the hell, maybe let's see if some of them can be ungrouped. This happens when,\n                // for instance, the toolbar is stretching and there's more space in it than before.\n                if (!wereItemsGrouped && this.groupedItems.length) {\n                    // Ungroup items as long as none are overflowing or there are none to ungroup left.\n                    while (this.groupedItems.length && !this._areItemsOverflowing) {\n                        this._ungroupFirstItem();\n                    }\n                    // If the ungrouping ended up with some item wrapping to the next row,\n                    // put it back to the group toolbar (\"undo the last ungroup\"). We don't know whether\n                    // an item will wrap or not until we ungroup it (that's a DOM/CSS thing) so this\n                    // clean–up is vital for the algorithm.\n                    if (this._areItemsOverflowing) {\n                        this._groupLastItem();\n                    }\n                }\n            }    /**\n     * Returns `true` when {@link module:ui/toolbar/toolbarview~ToolbarView#element} children visually overflow,\n     * for instance if the toolbar is narrower than its members. Returns `false` otherwise.\n     *\n     * @private\n     * @type {Boolean}\n     */\n        },\n        {\n            key: '_areItemsOverflowing',\n            get: function get() {\n                // An empty toolbar cannot overflow.\n                if (!this.ungroupedItems.length) {\n                    return false;\n                }\n                var element = this.viewElement;\n                var uiLanguageDirection = this.viewLocale.uiLanguageDirection;\n                var lastChildRect = new Rect(element.lastChild);\n                var toolbarRect = new Rect(element);\n                if (!this.cachedPadding) {\n                    var computedStyle = global.window.getComputedStyle(element);\n                    var paddingProperty = uiLanguageDirection === 'ltr' ? 'paddingRight' : 'paddingLeft';\n                    // parseInt() is essential because of quirky floating point numbers logic and DOM.\n                    // If the padding turned out too big because of that, the grouped items dropdown would\n                    // always look (from the Rect perspective) like it overflows (while it's not).\n                    this.cachedPadding = Number.parseInt(computedStyle[paddingProperty]);\n                }\n                if (uiLanguageDirection === 'ltr') {\n                    return lastChildRect.right > toolbarRect.right - this.cachedPadding;\n                } else {\n                    return lastChildRect.left < toolbarRect.left + this.cachedPadding;\n                }\n            }    /**\n     * Enables the functionality that prevents {@link #ungroupedItems} from overflowing (wrapping to the next row)\n     * upon resize when there is little space available. Instead, the toolbar items are moved to the\n     * {@link #groupedItems} collection and displayed in a dropdown at the end of the row (which has its own nested toolbar).\n     *\n     * When called, the toolbar will automatically analyze the location of its {@link #ungroupedItems} and \"group\"\n     * them in the dropdown if necessary. It will also observe the browser window for size changes in\n     * the future and respond to them by grouping more items or reverting already grouped back, depending\n     * on the visual space available.\n     *\n     * @private\n     */\n        },\n        {\n            key: '_enableGroupingOnResize',\n            value: function _enableGroupingOnResize() {\n                var _this6 = this;\n                var previousWidth;\n                // TODO: Consider debounce.\n                this.resizeObserver = getResizeObserver(function (_ref) {\n                    var _ref2 = _slicedToArray(_ref, 1), entry = _ref2[0];\n                    if (!previousWidth || previousWidth !== entry.contentRect.width) {\n                        _this6._updateGrouping();\n                        previousWidth = entry.contentRect.width;\n                    }\n                });\n                this.resizeObserver.observe(this.viewElement);\n                this._updateGrouping();\n            }    /**\n     * When called, it will remove the last item from {@link #ungroupedItems} and move it back\n     * to the {@link #groupedItems} collection.\n     *\n     * The opposite of {@link #_ungroupFirstItem}.\n     *\n     * @private\n     */\n        },\n        {\n            key: '_groupLastItem',\n            value: function _groupLastItem() {\n                if (!this.groupedItems.length) {\n                    this.viewChildren.add(new ToolbarSeparatorView());\n                    this.viewChildren.add(this.groupedItemsDropdown);\n                    this.viewFocusTracker.add(this.groupedItemsDropdown.element);\n                }\n                this.groupedItems.add(this.ungroupedItems.remove(this.ungroupedItems.last), 0);\n            }    /**\n     * Moves the very first item belonging to {@link #groupedItems} back\n     * to the {@link #ungroupedItems} collection.\n     *\n     * The opposite of {@link #_groupLastItem}.\n     *\n     * @private\n     */\n        },\n        {\n            key: '_ungroupFirstItem',\n            value: function _ungroupFirstItem() {\n                this.ungroupedItems.add(this.groupedItems.remove(this.groupedItems.first));\n                if (!this.groupedItems.length) {\n                    this.viewChildren.remove(this.groupedItemsDropdown);\n                    this.viewChildren.remove(this.viewChildren.last);\n                    this.viewFocusTracker.remove(this.groupedItemsDropdown.element);\n                }\n            }    /**\n     * Creates the {@link #groupedItemsDropdown} that hosts the members of the {@link #groupedItems}\n     * collection when there is not enough space in the toolbar to display all items in a single row.\n     *\n     * @private\n     * @returns {module:ui/dropdown/dropdownview~DropdownView}\n     */\n        },\n        {\n            key: '_createGroupedItemsDropdown',\n            value: function _createGroupedItemsDropdown() {\n                var locale = this.viewLocale;\n                var t = locale.t;\n                var dropdown = createDropdown(locale);\n                dropdown.class = 'ck-toolbar__grouped-dropdown';\n                // Make sure the dropdown never sticks out to the left/right. It should be under the main toolbar.\n                // (https://github.com/ckeditor/ckeditor5/issues/5608)\n                dropdown.panelPosition = locale.uiLanguageDirection === 'ltr' ? 'sw' : 'se';\n                addToolbarToDropdown(dropdown, []);\n                dropdown.buttonView.set({\n                    label: t('Show more items'),\n                    tooltip: true,\n                    icon: verticalDotsIcon\n                });\n                // 1:1 pass–through binding.\n                dropdown.toolbarView.items.bindTo(this.groupedItems).using(function (item) {\n                    return item;\n                });\n                return dropdown;\n            }    /**\n     * Updates the {@link module:ui/toolbar/toolbarview~ToolbarView#focusables focus–cycleable items}\n     * collection so it represents the up–to–date state of the UI from the perspective of the user.\n     *\n     * For instance, the {@link #groupedItemsDropdown} can show up and hide but when it is visible,\n     * it must be subject to focus cycling in the toolbar.\n     *\n     * See the {@link module:ui/toolbar/toolbarview~ToolbarView#focusables collection} documentation\n     * to learn more about the purpose of this method.\n     *\n     * @private\n     */\n        },\n        {\n            key: '_updateFocusCycleableItems',\n            value: function _updateFocusCycleableItems() {\n                var _this7 = this;\n                this.viewFocusables.clear();\n                this.ungroupedItems.map(function (item) {\n                    _this7.viewFocusables.add(item);\n                });\n                if (this.groupedItems.length) {\n                    this.viewFocusables.add(this.groupedItemsDropdown);\n                }\n            }\n        }\n    ]);\n}();    /**\n * Options passed to the {@link module:ui/toolbar/toolbarview~ToolbarView#constructor} of the toolbar.\n *\n * @interface module:ui/toolbar/toolbarview~ToolbarOptions\n */\n        /**\n * When set to `true`, the toolbar will automatically group {@link module:ui/toolbar/toolbarview~ToolbarView#items} that\n * would normally wrap to the next line when there is not enough space to display them in a single row, for\n * instance, if the parent container of the toolbar is narrow.\n *\n * @member {Boolean} module:ui/toolbar/toolbarview~ToolbarOptions#shouldGroupWhenFull\n */\n        /**\n * A class interface defining the behavior of the {@link module:ui/toolbar/toolbarview~ToolbarView}.\n *\n * Toolbar behaviors extend its look and functionality and have an impact on the\n * {@link module:ui/toolbar/toolbarview~ToolbarView#element} template or\n * {@link module:ui/toolbar/toolbarview~ToolbarView#render rendering}. They can be enabled\n * conditionally, e.g. depending on the configuration of the toolbar.\n *\n * @private\n * @interface module:ui/toolbar/toolbarview~ToolbarBehavior\n */\n        /**\n * Creates a new toolbar behavior instance.\n *\n * The instance is created in the {@link module:ui/toolbar/toolbarview~ToolbarView#constructor} of the toolbar.\n * This is the right place to extend the {@link module:ui/toolbar/toolbarview~ToolbarView#template} of\n * the toolbar, define extra toolbar properties, etc.\n *\n * @method #constructor\n * @param {module:ui/toolbar/toolbarview~ToolbarView} view An instance of the toolbar that this behavior is added to.\n */\n        /**\n * A method called after the toolbar has been {@link module:ui/toolbar/toolbarview~ToolbarView#render rendered}.\n * It can be used to, for example, customize the behavior of the toolbar when its {@link module:ui/toolbar/toolbarview~ToolbarView#element}\n * is available.\n *\n * @readonly\n * @member {Function} #render\n * @param {module:ui/toolbar/toolbarview~ToolbarView} view An instance of the toolbar being rendered.\n */\n        /**\n * A method called after the toolbar has been {@link module:ui/toolbar/toolbarview~ToolbarView#destroy destroyed}.\n * It allows cleaning up after the toolbar behavior, for instance, this is the right place to detach\n * event listeners, free up references, etc.\n *\n * @readonly\n * @member {Function} #destroy\n */","import _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.string.trim.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/tooltip/tooltipview\n */\n\nimport View from '../view';\nimport '../../theme/components/tooltip/tooltip.css';\n\n/**\n * The tooltip view class.\n *\n * @extends module:ui/view~View\n */\nvar TooltipView = /*#__PURE__*/function (_View) {\n  /**\n   * @inheritDoc\n   */\n  function TooltipView(locale) {\n    var _this;\n    _classCallCheck(this, TooltipView);\n    _this = _callSuper(this, TooltipView, [locale]);\n\n    /**\n     * The text of the tooltip visible to the user.\n     *\n     * @observable\n     * @member {String} #text\n     */\n    _this.set('text', '');\n\n    /**\n     * The position of the tooltip (south or north).\n     *\n     *\t\t+-----------+\n     *\t\t|   north   |\n     *\t\t+-----------+\n     *\t\t      V\n     *\t\t  [element]\n     *\n     *\t\t  [element]\n     *\t\t      ^\n     *\t\t+-----------+\n     *\t\t|   south   |\n     *\t\t+-----------+\n     *\n     * @observable\n     * @default 's'\n     * @member {'s'|'n'} #position\n     */\n    _this.set('position', 's');\n    var bind = _this.bindTemplate;\n    _this.setTemplate({\n      tag: 'span',\n      attributes: {\n        class: ['ck', 'ck-tooltip', bind.to('position', function (position) {\n          return 'ck-tooltip_' + position;\n        }), bind.if('text', 'ck-hidden', function (value) {\n          return !value.trim();\n        })]\n      },\n      children: [{\n        tag: 'span',\n        attributes: {\n          class: ['ck', 'ck-tooltip__text']\n        },\n        children: [{\n          text: bind.to('text')\n        }]\n      }]\n    });\n    return _this;\n  }\n  _inherits(TooltipView, _View);\n  return _createClass(TooltipView);\n}(View);\nexport { TooltipView as default };","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/view\n */\n\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport ViewCollection from './viewcollection';\nimport Template from './template';\nimport DomEmitterMixin from '@ckeditor/ckeditor5-utils/src/dom/emittermixin';\nimport ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';\nimport Collection from '@ckeditor/ckeditor5-utils/src/collection';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport isIterable from '@ckeditor/ckeditor5-utils/src/isiterable';\nimport '../theme/globals/globals.css';\n\n/**\n * The basic view class, which represents an HTML element created out of a\n * {@link module:ui/view~View#template}. Views are building blocks of the user interface and handle\n * interaction\n *\n * Views {@link module:ui/view~View#registerChild aggregate} children in\n * {@link module:ui/view~View#createCollection collections} and manage the life cycle of DOM\n * listeners e.g. by handling rendering and destruction.\n *\n * See the {@link module:ui/template~TemplateDefinition} syntax to learn more about shaping view\n * elements, attributes and listeners.\n *\n *\t\tclass SampleView extends View {\n *\t\t\tconstructor( locale ) {\n *\t\t\t\tsuper( locale );\n *\n *\t\t\t\tconst bind = this.bindTemplate;\n *\n *\t\t\t\t// Views define their interface (state) using observable attributes.\n *\t\t\t\tthis.set( 'elementClass', 'bar' );\n *\n *\t\t\t\tthis.setTemplate( {\n *\t\t\t\t\ttag: 'p',\n *\n *\t\t\t\t\t// The element of the view can be defined with its children.\n *\t\t\t\t\tchildren: [\n *\t\t\t\t\t\t'Hello',\n *\t\t\t\t\t\t{\n *\t\t\t\t\t\t\ttag: 'b',\n *\t\t\t\t\t\t\tchildren: [ 'world!' ]\n *\t\t\t\t\t\t}\n *\t\t\t\t\t],\n *\t\t\t\t\tattributes: {\n *\t\t\t\t\t\tclass: [\n *\t\t\t\t\t\t\t'foo',\n *\n *\t\t\t\t\t\t\t// Observable attributes control the state of the view in DOM.\n *\t\t\t\t\t\t\tbind.to( 'elementClass' )\n *\t\t\t\t\t\t]\n *\t\t\t\t\t},\n *\t\t\t\t\ton: {\n *\t\t\t\t\t\t// Views listen to DOM events and propagate them.\n *\t\t\t\t\t\tclick: bind.to( 'clicked' )\n *\t\t\t\t\t}\n *\t\t\t\t} );\n *\t\t\t}\n *\t\t}\n *\n *\t\tconst view = new SampleView( locale );\n *\n *\t\tview.render();\n *\n *\t\t// Append <p class=\"foo bar\">Hello<b>world</b></p> to the <body>\n *\t\tdocument.body.appendChild( view.element );\n *\n *\t\t// Change the class attribute to <p class=\"foo baz\">Hello<b>world</b></p>\n *\t\tview.elementClass = 'baz';\n *\n *\t\t// Respond to the \"click\" event in DOM by executing a custom action.\n *\t\tview.on( 'clicked', () => {\n *\t\t\tconsole.log( 'The view has been clicked!' );\n *\t\t} );\n *\n * @mixes module:utils/observablemixin~ObservableMixin\n */\nvar View = /*#__PURE__*/function () {\n  /**\n   * Creates an instance of the {@link module:ui/view~View} class.\n   *\n   * Also see {@link #render}.\n   *\n   * @param {module:utils/locale~Locale} [locale] The localization services instance.\n   */\n  function View(locale) {\n    _classCallCheck(this, View);\n    /**\n     * An HTML element of the view. `null` until {@link #render rendered}\n     * from the {@link #template}.\n     *\n     *\t\tclass SampleView extends View {\n     *\t\t\tconstructor() {\n     *\t\t\t\tsuper();\n     *\n     *\t\t\t\t// A template instance the #element will be created from.\n     *\t\t\t\tthis.setTemplate( {\n     *\t\t\t\t\ttag: 'p'\n     *\n     *\t\t\t\t\t// ...\n     *\t\t\t\t} );\n     *\t\t\t}\n     *\t\t}\n     *\n     *\t\tconst view = new SampleView();\n     *\n     *\t\t// Renders the #template.\n     *\t\tview.render();\n     *\n     *\t\t// Append the HTML element of the view to <body>.\n     *\t\tdocument.body.appendChild( view.element );\n     *\n     * **Note**: The element of the view can also be assigned directly:\n     *\n     *\t\tview.element = document.querySelector( '#my-container' );\n     *\n     * @member {HTMLElement}\n     */\n    this.element = null;\n\n    /**\n     * Set `true` when the view has already been {@link module:ui/view~View#render rendered}.\n     *\n     * @readonly\n     * @member {Boolean} #isRendered\n     */\n    this.isRendered = false;\n\n    /**\n     * A set of tools to localize the user interface.\n     *\n     * Also see {@link module:core/editor/editor~Editor#locale}.\n     *\n     * @readonly\n     * @member {module:utils/locale~Locale}\n     */\n    this.locale = locale;\n\n    /**\n     * Shorthand for {@link module:utils/locale~Locale#t}.\n     *\n     * Note: If {@link #locale} instance hasn't been passed to the view this method may not\n     * be available.\n     *\n     * @see module:utils/locale~Locale#t\n     * @method\n     */\n    this.t = locale && locale.t;\n\n    /**\n     * Collections registered with {@link #createCollection}.\n     *\n     * @protected\n     * @member {Set.<module:ui/viewcollection~ViewCollection>}\n     */\n    this._viewCollections = new Collection();\n\n    /**\n     * A collection of view instances, which have been added directly\n     * into the {@link module:ui/template~Template#children}.\n     *\n     * @protected\n     * @member {module:ui/viewcollection~ViewCollection}\n     */\n    this._unboundChildren = this.createCollection();\n\n    // Pass parent locale to its children.\n    this._viewCollections.on('add', function (evt, collection) {\n      collection.locale = locale;\n    });\n\n    /**\n     * Template of this view. It provides the {@link #element} representing\n     * the view in DOM, which is {@link #render rendered}.\n     *\n     * @member {module:ui/template~Template} #template\n     */\n\n    /**\n     * Cached {@link module:ui/template~BindChain bind chain} object created by the\n     * {@link #template}. See {@link #bindTemplate}.\n     *\n     * @private\n     * @member {Object} #_bindTemplate\n     */\n\n    this.decorate('render');\n  }\n\n  /**\n   * Shorthand for {@link module:ui/template~Template.bind}, a binding\n   * {@link module:ui/template~BindChain interface} pre–configured for the view instance.\n   *\n   * It provides {@link module:ui/template~BindChain#to `to()`} and\n   * {@link module:ui/template~BindChain#if `if()`} methods that initialize bindings with\n   * observable attributes and attach DOM listeners.\n   *\n   *\t\tclass SampleView extends View {\n   *\t\t\tconstructor( locale ) {\n   *\t\t\t\tsuper( locale );\n   *\n   *\t\t\t\tconst bind = this.bindTemplate;\n   *\n   *\t\t\t\t// These {@link module:utils/observablemixin~Observable observable} attributes will control\n   *\t\t\t\t// the state of the view in DOM.\n   *\t\t\t\tthis.set( {\n   *\t\t\t\t\telementClass: 'foo',\n   *\t\t\t\t \tisEnabled: true\n   *\t\t\t\t } );\n   *\n   *\t\t\t\tthis.setTemplate( {\n   *\t\t\t\t\ttag: 'p',\n   *\n   *\t\t\t\t\tattributes: {\n   *\t\t\t\t\t\t// The class HTML attribute will follow elementClass\n   *\t\t\t\t\t\t// and isEnabled view attributes.\n   *\t\t\t\t\t\tclass: [\n   *\t\t\t\t\t\t\tbind.to( 'elementClass' )\n   *\t\t\t\t\t\t\tbind.if( 'isEnabled', 'present-when-enabled' )\n   *\t\t\t\t\t\t]\n   *\t\t\t\t\t},\n   *\n   *\t\t\t\t\ton: {\n   *\t\t\t\t\t\t// The view will fire the \"clicked\" event upon clicking <p> in DOM.\n   *\t\t\t\t\t\tclick: bind.to( 'clicked' )\n   *\t\t\t\t\t}\n   *\t\t\t\t} );\n   *\t\t\t}\n   *\t\t}\n   *\n   * @method #bindTemplate\n   */\n  return _createClass(View, [{\n    key: \"bindTemplate\",\n    get: function get() {\n      if (this._bindTemplate) {\n        return this._bindTemplate;\n      }\n      return this._bindTemplate = Template.bind(this, this);\n    }\n\n    /**\n     * Creates a new collection of views, which can be used as\n     * {@link module:ui/template~Template#children} of this view.\n     *\n     *\t\tclass SampleView extends View {\n     *\t\t\tconstructor( locale ) {\n     *\t\t\t\tsuper( locale );\n     *\n     *\t\t\t\tthis.items = this.createCollection();\n    \t *\n     *\t\t\t\tthis.setTemplate( {\n     *\t\t\t\t\ttag: 'p',\n     *\n     *\t\t\t\t\t// `items` collection will render here.\n     *\t\t\t\t\tchildren: this.items\n     *\t\t\t\t} );\n     *\t\t\t}\n     *\t\t}\n     *\n     *\t\tconst view = new SampleView( locale );\n     *\t\tconst child = new ChildView( locale );\n     *\n     *\t\tview.render();\n     *\n     *\t\t// It will append <p></p> to the <body>.\n     *\t\tdocument.body.appendChild( view.element );\n     *\n     *\t\t// From now on the child is nested under its parent, which is also reflected in DOM.\n     *\t\t// <p><child#element></p>\n     *\t\tview.items.add( child );\n     *\n     * @returns {module:ui/viewcollection~ViewCollection} A new collection of view instances.\n     */\n  }, {\n    key: \"createCollection\",\n    value: function createCollection() {\n      var collection = new ViewCollection();\n      this._viewCollections.add(collection);\n      return collection;\n    }\n\n    /**\n     * Registers a new child view under the view instance. Once registered, a child\n     * view is managed by its parent, including {@link #render rendering}\n     * and {@link #destroy destruction}.\n     *\n     * To revert this, use {@link #deregisterChild}.\n     *\n     *\t\tclass SampleView extends View {\n     *\t\t\tconstructor( locale ) {\n     *\t\t\t\tsuper( locale );\n     *\n     *\t\t\t\tthis.childA = new SomeChildView( locale );\n     *\t\t\t\tthis.childB = new SomeChildView( locale );\n     *\n     *\t\t\t\tthis.setTemplate( { tag: 'p' } );\n     *\n     *\t\t\t\t// Register the children.\n     *\t\t\t\tthis.registerChild( [ this.childA, this.childB ] );\n     *\t\t\t}\n     *\n     *\t\t\trender() {\n     *\t\t\t\tsuper.render();\n     *\n     *\t\t\t\tthis.element.appendChild( this.childA.element );\n     *\t\t\t\tthis.element.appendChild( this.childB.element );\n     *\t\t\t}\n     *\t\t}\n     *\n     *\t\tconst view = new SampleView( locale );\n     *\n     *\t\tview.render();\n     *\n     *\t\t// Will append <p><childA#element><b></b><childB#element></p>.\n     *\t\tdocument.body.appendChild( view.element );\n     *\n     * **Note**: There's no need to add child views if they're already referenced in the\n     * {@link #template}:\n     *\n     *\t\tclass SampleView extends View {\n     *\t\t\tconstructor( locale ) {\n     *\t\t\t\tsuper( locale );\n     *\n     *\t\t\t\tthis.childA = new SomeChildView( locale );\n     *\t\t\t\tthis.childB = new SomeChildView( locale );\n     *\n     *\t\t\t\tthis.setTemplate( {\n     *\t\t\t\t\ttag: 'p',\n     *\n    \t *\t\t\t\t\t// These children will be added automatically. There's no\n    \t *\t\t\t\t\t// need to call {@link #registerChild} for any of them.\n     *\t\t\t\t\tchildren: [ this.childA, this.childB ]\n     *\t\t\t\t} );\n     *\t\t\t}\n     *\n     *\t\t\t// ...\n     *\t\t}\n     *\n     * @param {module:ui/view~View|Iterable.<module:ui/view~View>} children Children views to be registered.\n     */\n  }, {\n    key: \"registerChild\",\n    value: function registerChild(children) {\n      if (!isIterable(children)) {\n        children = [children];\n      }\n      var _iterator = _createForOfIteratorHelper(children),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var child = _step.value;\n          this._unboundChildren.add(child);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n\n    /**\n     * The opposite of {@link #registerChild}. Removes a child view from this view instance.\n     * Once removed, the child is no longer managed by its parent, e.g. it can safely\n     * become a child of another parent view.\n     *\n     * @see #registerChild\n     * @param {module:ui/view~View|Iterable.<module:ui/view~View>} children Child views to be removed.\n     */\n  }, {\n    key: \"deregisterChild\",\n    value: function deregisterChild(children) {\n      if (!isIterable(children)) {\n        children = [children];\n      }\n      var _iterator2 = _createForOfIteratorHelper(children),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var child = _step2.value;\n          this._unboundChildren.remove(child);\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n    }\n\n    /**\n     * Sets the {@link #template} of the view with with given definition.\n     *\n     * A shorthand for:\n     *\n     *\t\tview.setTemplate( definition );\n     *\n     * @param {module:ui/template~TemplateDefinition} definition Definition of view's template.\n     */\n  }, {\n    key: \"setTemplate\",\n    value: function setTemplate(definition) {\n      this.template = new Template(definition);\n    }\n\n    /**\n     * {@link module:ui/template~Template.extend Extends} the {@link #template} of the view with\n     * with given definition.\n     *\n     * A shorthand for:\n     *\n     *\t\tTemplate.extend( view.template, definition );\n     *\n     * **Note**: Is requires the {@link #template} to be already set. See {@link #setTemplate}.\n     *\n     * @param {module:ui/template~TemplateDefinition} definition Definition which\n     * extends the {@link #template}.\n     */\n  }, {\n    key: \"extendTemplate\",\n    value: function extendTemplate(definition) {\n      Template.extend(this.template, definition);\n    }\n\n    /**\n     * Recursively renders the view.\n     *\n     * Once the view is rendered:\n     * * the {@link #element} becomes an HTML element out of {@link #template},\n     * * the {@link #isRendered} flag is set `true`.\n     *\n     * **Note**: The children of the view:\n     * * defined directly in the {@link #template}\n     * * residing in collections created by the {@link #createCollection} method,\n     * * and added by {@link #registerChild}\n     * are also rendered in the process.\n     *\n     * In general, `render()` method is the right place to keep the code which refers to the\n     * {@link #element} and should be executed at the very beginning of the view's life cycle.\n     *\n     * It is possible to {@link module:ui/template~Template.extend} the {@link #template} before\n     * the view is rendered. To allow an early customization of the view (e.g. by its parent),\n     * such references should be done in `render()`.\n     *\n     *\t\tclass SampleView extends View {\n     *\t\t\tconstructor() {\n     *\t\t\t\tthis.setTemplate( {\n     *\t\t\t\t\t// ...\n     *\t\t\t\t} );\n     *\t\t\t},\n     *\n     *\t\t\trender() {\n     *\t\t\t\t// View#element becomes available.\n     *\t\t\t\tsuper.render();\n     *\n     *\t\t\t\t// The \"scroll\" listener depends on #element.\n     *\t\t\t\tthis.listenTo( window, 'scroll', () => {\n     *\t\t\t\t\t// A reference to #element would render the #template and make it non-extendable.\n     *\t\t\t\t\tif ( window.scrollY > 0 ) {\n     *\t\t\t\t\t\tthis.element.scrollLeft = 100;\n     *\t\t\t\t\t} else {\n     *\t\t\t\t\t\tthis.element.scrollLeft = 0;\n     *\t\t\t\t\t}\n     *\t\t\t\t} );\n     *\t\t\t}\n     *\t\t}\n     *\n     *\t\tconst view = new SampleView();\n     *\n     *\t\t// Let's customize the view before it gets rendered.\n     *\t\tview.extendTemplate( {\n     *\t\t\tattributes: {\n     *\t\t\t\tclass: [\n     *\t\t\t\t\t'additional-class'\n     *\t\t\t\t]\n     *\t\t\t}\n     *\t\t} );\n     *\n     *\t\t// Late rendering allows customization of the view.\n     *\t\tview.render();\n     */\n  }, {\n    key: \"render\",\n    value: function render() {\n      if (this.isRendered) {\n        /**\n         * This View has already been rendered.\n         *\n         * @error ui-view-render-rendered\n         */\n        throw new CKEditorError('ui-view-render-already-rendered: This View has already been rendered.', this);\n      }\n\n      // Render #element of the view.\n      if (this.template) {\n        this.element = this.template.render();\n\n        // Auto–register view children from #template.\n        this.registerChild(this.template.getViews());\n      }\n      this.isRendered = true;\n    }\n\n    /**\n     * Recursively destroys the view instance and child views added by {@link #registerChild} and\n     * residing in collections created by the {@link #createCollection}.\n     *\n     * Destruction disables all event listeners:\n     * * created on the view, e.g. `view.on( 'event', () => {} )`,\n     * * defined in the {@link #template} for DOM events.\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.stopListening();\n      this._viewCollections.map(function (c) {\n        return c.destroy();\n      });\n\n      // Template isn't obligatory for views.\n      if (this.template && this.template._revertData) {\n        this.template.revert(this.element);\n      }\n    }\n\n    /**\n     * Event fired by the {@link #render} method. Actual rendering is executed as a listener to\n     * this event with the default priority.\n     *\n     * See {@link module:utils/observablemixin~ObservableMixin#decorate} for more information and samples.\n     *\n     * @event render\n     */\n  }]);\n}();\nexport { View as default };\nmix(View, DomEmitterMixin);\nmix(View, ObservableMixin);","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.every.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module ui/viewcollection\n */\n\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport Collection from '@ckeditor/ckeditor5-utils/src/collection';\n\n/**\n * Collects {@link module:ui/view~View} instances.\n *\n *\t\tconst parentView = new ParentView( locale );\n *\t\tconst collection = new ViewCollection( locale );\n *\n *\t\tcollection.setParent( parentView.element );\n *\n *\t\tconst viewA = new ChildView( locale );\n *\t\tconst viewB = new ChildView( locale );\n *\n * View collection renders and manages view {@link module:ui/view~View#element elements}:\n *\n *\t\tcollection.add( viewA );\n *\t\tcollection.add( viewB );\n *\n *\t\tconsole.log( parentView.element.firsChild ); // -> viewA.element\n *\t\tconsole.log( parentView.element.lastChild ); // -> viewB.element\n *\n * It {@link module:ui/viewcollection~ViewCollection#delegate propagates} DOM events too:\n *\n *\t\t// Delegate #click and #keydown events from viewA and viewB to the parentView.\n *\t\tcollection.delegate( 'click' ).to( parentView );\n *\n *\t\tparentView.on( 'click', ( evt ) => {\n *\t\t\tconsole.log( `${ evt.source } has been clicked.` );\n *\t\t} );\n *\n *\t\t// This event will be delegated to the parentView.\n *\t\tviewB.fire( 'click' );\n *\n * **Note**: A view collection can be used directly in the {@link module:ui/template~TemplateDefinition definition}\n * of a {@link module:ui/template~Template template}.\n *\n * @extends module:utils/collection~Collection\n * @mixes module:utils/observablemixin~ObservableMixin\n */\nvar ViewCollection = /*#__PURE__*/function (_Collection) {\n  /**\n   * Creates a new instance of the {@link module:ui/viewcollection~ViewCollection}.\n   *\n   * @param {module:utils/locale~Locale} [locale] The {@link module:core/editor/editor~Editor editor's locale} instance.\n   */\n  function ViewCollection(locale) {\n    var _this;\n    _classCallCheck(this, ViewCollection);\n    _this = _callSuper(this, ViewCollection, [{\n      // An #id Number attribute should be legal and not break the `ViewCollection` instance.\n      // https://github.com/ckeditor/ckeditor5-ui/issues/93\n      idProperty: 'viewUid'\n    }]);\n\n    // Handle {@link module:ui/view~View#element} in DOM when a new view is added to the collection.\n    _this.on('add', function (evt, view, index) {\n      if (!view.isRendered) {\n        view.render();\n      }\n      if (view.element && _this._parentElement) {\n        _this._parentElement.insertBefore(view.element, _this._parentElement.children[index]);\n      }\n    });\n\n    // Handle {@link module:ui/view~View#element} in DOM when a view is removed from the collection.\n    _this.on('remove', function (evt, view) {\n      if (view.element && _this._parentElement) {\n        view.element.remove();\n      }\n    });\n\n    /**\n     * The {@link module:core/editor/editor~Editor#locale editor's locale} instance.\n     * See the view {@link module:ui/view~View#locale locale} property.\n     *\n     * @member {module:utils/locale~Locale}\n     */\n    _this.locale = locale;\n\n    /**\n     * A parent element within which child views are rendered and managed in DOM.\n     *\n     * @protected\n     * @member {HTMLElement}\n     */\n    _this._parentElement = null;\n    return _this;\n  }\n\n  /**\n   * Destroys the view collection along with child views.\n   * See the view {@link module:ui/view~View#destroy} method.\n   */\n  _inherits(ViewCollection, _Collection);\n  return _createClass(ViewCollection, [{\n    key: \"destroy\",\n    value: function destroy() {\n      this.map(function (view) {\n        return view.destroy();\n      });\n    }\n\n    /**\n     * Sets the parent HTML element of this collection. When parent is set, {@link #add adding} and\n     * {@link #remove removing} views in the collection synchronizes their\n     * {@link module:ui/view~View#element elements} in the parent element.\n     *\n     * @param {HTMLElement} element A new parent element.\n     */\n  }, {\n    key: \"setParent\",\n    value: function setParent(elementOrDocFragment) {\n      this._parentElement = elementOrDocFragment;\n    }\n\n    /**\n     * Delegates selected events coming from within views in the collection to any\n     * {@link module:utils/emittermixin~Emitter}.\n     *\n     * For the following views and collection:\n     *\n     *\t\tconst viewA = new View();\n     *\t\tconst viewB = new View();\n     *\t\tconst viewC = new View();\n     *\n     *\t\tconst views = parentView.createCollection();\n     *\n     *\t\tviews.delegate( 'eventX' ).to( viewB );\n     *\t\tviews.delegate( 'eventX', 'eventY' ).to( viewC );\n     *\n     *\t\tviews.add( viewA );\n     *\n     * the `eventX` is delegated (fired by) `viewB` and `viewC` along with `customData`:\n     *\n     *\t\tviewA.fire( 'eventX', customData );\n     *\n     * and `eventY` is delegated (fired by) `viewC` along with `customData`:\n     *\n     *\t\tviewA.fire( 'eventY', customData );\n     *\n     * See {@link module:utils/emittermixin~Emitter#delegate}.\n     *\n     * @param {...String} events {@link module:ui/view~View} event names to be delegated to another\n     * {@link module:utils/emittermixin~Emitter}.\n     * @returns {Object}\n     * @returns {Function} return.to A function which accepts the destination of\n     * {@link module:utils/emittermixin~Emitter#delegate delegated} events.\n     */\n  }, {\n    key: \"delegate\",\n    value: function delegate() {\n      var _this2 = this;\n      for (var _len = arguments.length, events = new Array(_len), _key = 0; _key < _len; _key++) {\n        events[_key] = arguments[_key];\n      }\n      if (!events.length || !isStringArray(events)) {\n        /**\n         * All event names must be strings.\n         *\n         * @error ui-viewcollection-delegate-wrong-events\n         */\n        throw new CKEditorError('ui-viewcollection-delegate-wrong-events: All event names must be strings.', this);\n      }\n      return {\n        /**\n         * Selects destination for {@link module:utils/emittermixin~Emitter#delegate} events.\n         *\n         * @memberOf module:ui/viewcollection~ViewCollection#delegate\n         * @function module:ui/viewcollection~ViewCollection#delegate.to\n         * @param {module:utils/emittermixin~Emitter} dest An `Emitter` instance which is\n         * the destination for delegated events.\n         */\n        to: function to(dest) {\n          // Activate delegating on existing views in this collection.\n          var _iterator = _createForOfIteratorHelper(_this2),\n            _step;\n          try {\n            for (_iterator.s(); !(_step = _iterator.n()).done;) {\n              var view = _step.value;\n              for (var _i3 = 0, _events3 = events; _i3 < _events3.length; _i3++) {\n                var evtName = _events3[_i3];\n                view.delegate(evtName).to(dest);\n              }\n            }\n\n            // Activate delegating on future views in this collection.\n          } catch (err) {\n            _iterator.e(err);\n          } finally {\n            _iterator.f();\n          }\n          _this2.on('add', function (evt, view) {\n            for (var _i = 0, _events = events; _i < _events.length; _i++) {\n              var evtName = _events[_i];\n              view.delegate(evtName).to(dest);\n            }\n          });\n\n          // Deactivate delegating when view is removed from this collection.\n          _this2.on('remove', function (evt, view) {\n            for (var _i2 = 0, _events2 = events; _i2 < _events2.length; _i2++) {\n              var evtName = _events2[_i2];\n              view.stopDelegating(evtName, dest);\n            }\n          });\n        }\n      };\n    }\n\n    /**\n     * Removes a child view from the collection. If the {@link #setParent parent element} of the\n     * collection has been set, the {@link module:ui/view~View#element element} of the view is also removed\n     * in DOM, reflecting the order of the collection.\n     *\n     * See the {@link #add} method.\n     *\n     * @method #remove\n     * @param {module:ui/view~View|Number|String} subject The view to remove, its id or index in the collection.\n     * @returns {Object} The removed view.\n     */\n  }]);\n}(Collection); // Check if all entries of the array are of `String` type.\n//\n// @private\n// @param {Array} arr An array to be checked.\n// @returns {Boolean}\nexport { ViewCollection as default };\nfunction isStringArray(arr) {\n  return arr.every(function (a) {\n    return typeof a == 'string';\n  });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./button.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"2bef2b26\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./button.css\", function() {\n     var newContent = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./button.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./switchbutton.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"670bf7a6\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./switchbutton.css\", function() {\n     var newContent = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./switchbutton.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./dropdown.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"476711f2\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./dropdown.css\", function() {\n     var newContent = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./dropdown.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./listdropdown.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"4e432272\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./listdropdown.css\", function() {\n     var newContent = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./listdropdown.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./toolbardropdown.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"c1bb0cb6\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./toolbardropdown.css\", function() {\n     var newContent = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./toolbardropdown.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./editorui.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"5b333352\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./editorui.css\", function() {\n     var newContent = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./editorui.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./icon.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"4a5825c2\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./icon.css\", function() {\n     var newContent = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./icon.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./inputtext.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"63783da7\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./inputtext.css\", function() {\n     var newContent = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./inputtext.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./label.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"1e59c278\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./label.css\", function() {\n     var newContent = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./label.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./labeledinput.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"35efe5fe\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./labeledinput.css\", function() {\n     var newContent = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./labeledinput.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./list.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"f5874b8c\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./list.css\", function() {\n     var newContent = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./list.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./balloonpanel.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"61359056\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./balloonpanel.css\", function() {\n     var newContent = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./balloonpanel.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./balloonrotator.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"70db63e8\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./balloonrotator.css\", function() {\n     var newContent = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./balloonrotator.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./fakepanel.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"0e237b74\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./fakepanel.css\", function() {\n     var newContent = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./fakepanel.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./stickypanel.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"f28e2398\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./stickypanel.css\", function() {\n     var newContent = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./stickypanel.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./toolbar.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"28d6cceb\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./toolbar.css\", function() {\n     var newContent = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./toolbar.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./tooltip.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"7942d71a\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./tooltip.css\", function() {\n     var newContent = require(\"!!../../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../../postcss-loader/src/index.js??ref--16-0!./tooltip.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../postcss-loader/src/index.js??ref--16-0!./globals.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"0636f04a\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../postcss-loader/src/index.js??ref--16-0!./globals.css\", function() {\n     var newContent = require(\"!!../../../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../../../postcss-loader/src/index.js??ref--7-oneOf-3-2!../../../../postcss-loader/src/index.js??ref--16-0!./globals.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","export default \"<svg viewBox=\\\"0 0 10 10\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M.941 4.523a.75.75 0 1 1 1.06-1.06l3.006 3.005 3.005-3.005a.75.75 0 1 1 1.06 1.06l-3.549 3.55a.75.75 0 0 1-1.168-.136L.941 4.523z\\\"/></svg>\"","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M8.537 14.813a.888.888 0 1 1-1.254-1.255L10.84 10 7.283 6.442a.888.888 0 1 1 1.254-1.255L12.74 9.39a.888.888 0 0 1-.16 1.382l-4.043 4.042z\\\"/></svg>\\n\"","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M11.463 5.187a.888.888 0 1 1 1.254 1.255L9.16 10l3.557 3.557a.888.888 0 1 1-1.254 1.255L7.26 10.61a.888.888 0 0 1 .16-1.382l4.043-4.042z\\\" /></svg>\\n\"","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.find.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-set.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module undo/basecommand\n */\n\nimport Command from '@ckeditor/ckeditor5-core/src/command';\nimport { transformSets } from '@ckeditor/ckeditor5-engine/src/model/operation/transform';\n\n/**\n * Base class for undo feature commands: {@link module:undo/undocommand~UndoCommand} and {@link module:undo/redocommand~RedoCommand}.\n *\n * @protected\n * @extends module:core/command~Command\n */\nvar BaseCommand = /*#__PURE__*/function (_Command) {\n  function BaseCommand(editor) {\n    var _this;\n    _classCallCheck(this, BaseCommand);\n    _this = _callSuper(this, BaseCommand, [editor]);\n\n    /**\n     * Stack of items stored by the command. These are pairs of:\n     *\n     * * {@link module:engine/model/batch~Batch batch} saved by the command,\n     * * {@link module:engine/model/selection~Selection selection} state at the moment of saving the batch.\n     *\n     * @protected\n     * @member {Array} #_stack\n     */\n    _this._stack = [];\n\n    /**\n     * Stores all batches that were created by this command.\n     *\n     * @protected\n     * @member {WeakSet.<module:engine/model/batch~Batch>} #_createdBatches\n     */\n    _this._createdBatches = new WeakSet();\n\n    // Refresh state, so the command is inactive right after initialization.\n    _this.refresh();\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(BaseCommand, _Command);\n  return _createClass(BaseCommand, [{\n    key: \"refresh\",\n    value: function refresh() {\n      this.isEnabled = this._stack.length > 0;\n    }\n\n    /**\n     * Stores a batch in the command, together with the selection state of the {@link module:engine/model/document~Document document}\n     * created by the editor which this command is registered to.\n     *\n     * @param {module:engine/model/batch~Batch} batch The batch to add.\n     */\n  }, {\n    key: \"addBatch\",\n    value: function addBatch(batch) {\n      var docSelection = this.editor.model.document.selection;\n      var selection = {\n        ranges: docSelection.hasOwnRange ? Array.from(docSelection.getRanges()) : [],\n        isBackward: docSelection.isBackward\n      };\n      this._stack.push({\n        batch: batch,\n        selection: selection\n      });\n      this.refresh();\n    }\n\n    /**\n     * Removes all items from the stack.\n     */\n  }, {\n    key: \"clearStack\",\n    value: function clearStack() {\n      this._stack = [];\n      this.refresh();\n    }\n\n    /**\n     * Restores the {@link module:engine/model/document~Document#selection document selection} state after a batch was undone.\n     *\n     * @protected\n     * @param {Array.<module:engine/model/range~Range>} ranges Ranges to be restored.\n     * @param {Boolean} isBackward A flag describing whether the restored range was selected forward or backward.\n     * @param {Array.<module:engine/model/operation/operation~Operation>} operations Operations which has been applied\n     * since selection has been stored.\n     */\n  }, {\n    key: \"_restoreSelection\",\n    value: function _restoreSelection(ranges, isBackward, operations) {\n      var model = this.editor.model;\n      var document = model.document;\n\n      // This will keep the transformed selection ranges.\n      var selectionRanges = [];\n\n      // Transform all ranges from the restored selection.\n      var _iterator = _createForOfIteratorHelper(ranges),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var range = _step.value;\n          var transformed = transformSelectionRange(range, operations);\n\n          // For each `range` from `ranges`, we take only one transformed range.\n          // This is because we want to prevent situation where single-range selection\n          // got transformed to multi-range selection. We will take the first range that\n          // is not in the graveyard.\n          var newRange = transformed.find(function (range) {\n            return range.start.root != document.graveyard;\n          });\n\n          // `transformedRange` might be `undefined` if transformed range ended up in graveyard.\n          if (newRange) {\n            selectionRanges.push(newRange);\n          }\n        }\n\n        // `selectionRanges` may be empty if all ranges ended up in graveyard. If that is the case, do not restore selection.\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      if (selectionRanges.length) {\n        model.change(function (writer) {\n          writer.setSelection(selectionRanges, {\n            backward: isBackward\n          });\n        });\n      }\n    }\n\n    /**\n     * Undoes a batch by reversing that batch, transforming reversed batch and finally applying it.\n     * This is a helper method for {@link #execute}.\n     *\n     * @protected\n     * @param {module:engine/model/batch~Batch} batchToUndo The batch to be undone.\n     * @param {module:engine/model/batch~Batch} undoingBatch The batch that will contain undoing changes.\n     */\n  }, {\n    key: \"_undo\",\n    value: function _undo(batchToUndo, undoingBatch) {\n      var model = this.editor.model;\n      var document = model.document;\n\n      // All changes done by the command execution will be saved as one batch.\n      this._createdBatches.add(undoingBatch);\n      var operationsToUndo = batchToUndo.operations.slice().filter(function (operation) {\n        return operation.isDocumentOperation;\n      });\n      operationsToUndo.reverse();\n\n      // We will process each operation from `batchToUndo`, in reverse order. If there were operations A, B and C in undone batch,\n      // we need to revert them in reverse order, so first C' (reversed C), then B', then A'.\n      var _iterator2 = _createForOfIteratorHelper(operationsToUndo),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var operationToUndo = _step2.value;\n          var nextBaseVersion = operationToUndo.baseVersion + 1;\n          var historyOperations = Array.from(document.history.getOperations(nextBaseVersion));\n          var transformedSets = transformSets([operationToUndo.getReversed()], historyOperations, {\n            useRelations: true,\n            document: this.editor.model.document,\n            padWithNoOps: false,\n            forceWeakRemove: true\n          });\n          var reversedOperations = transformedSets.operationsA;\n\n          // After reversed operation has been transformed by all history operations, apply it.\n          var _iterator3 = _createForOfIteratorHelper(reversedOperations),\n            _step3;\n          try {\n            for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n              var operation = _step3.value;\n              // Before applying, add the operation to the `undoingBatch`.\n              undoingBatch.addOperation(operation);\n              model.applyOperation(operation);\n              document.history.setOperationAsUndone(operationToUndo, operation);\n            }\n          } catch (err) {\n            _iterator3.e(err);\n          } finally {\n            _iterator3.f();\n          }\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n    }\n  }]);\n}(Command); // Transforms given range `range` by given `operations`.\n// Returns an array containing one or more ranges, which are result of the transformation.\nexport { BaseCommand as default };\nfunction transformSelectionRange(range, operations) {\n  var transformed = range.getTransformedByOperations(operations);\n\n  // After `range` got transformed, we have an array of ranges. Some of those\n  // ranges may be \"touching\" -- they can be next to each other and could be merged.\n  // First, we have to sort those ranges to assure that they are in order.\n  transformed.sort(function (a, b) {\n    return a.start.isBefore(b.start) ? -1 : 1;\n  });\n\n  // Then, we check if two consecutive ranges are touching.\n  for (var i = 1; i < transformed.length; i++) {\n    var a = transformed[i - 1];\n    var b = transformed[i];\n    if (a.end.isTouching(b.start)) {\n      // And join them together if they are.\n      a.end = b.end;\n      transformed.splice(i, 1);\n      i--;\n    }\n  }\n  return transformed;\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module undo/redocommand\n */\n\nimport BaseCommand from './basecommand';\n\n/**\n * The redo command stores {@link module:engine/model/batch~Batch batches} that were used to undo a batch by\n * {@link module:undo/undocommand~UndoCommand}. It is able to redo a previously undone batch by reversing the undoing\n * batches created by `UndoCommand`. The reversed batch is transformed by all the batches from\n * {@link module:engine/model/document~Document#history history} that happened after the reversed undo batch.\n *\n * The redo command also takes care of restoring the {@link module:engine/model/document~Document#selection document selection}.\n *\n * @extends module:undo/basecommand~BaseCommand\n */\nvar RedoCommand = /*#__PURE__*/function (_BaseCommand) {\n  function RedoCommand() {\n    _classCallCheck(this, RedoCommand);\n    return _callSuper(this, RedoCommand, arguments);\n  }\n  _inherits(RedoCommand, _BaseCommand);\n  return _createClass(RedoCommand, [{\n    key: \"execute\",\n    value:\n    /**\n     * Executes the command. This method reverts the last {@link module:engine/model/batch~Batch batch} added to\n     * the command's stack, applies the reverted and transformed version on the\n     * {@link module:engine/model/document~Document document} and removes the batch from the stack.\n     * Then, it restores the {@link module:engine/model/document~Document#selection document selection}.\n     *\n     * @fires execute\n     */\n    function execute() {\n      var _this = this;\n      var item = this._stack.pop();\n      var redoingBatch = this.editor.model.createBatch('transparent');\n\n      // All changes have to be done in one `enqueueChange` callback so other listeners will not step between consecutive\n      // operations, or won't do changes to the document before selection is properly restored.\n      this.editor.model.enqueueChange(redoingBatch, function () {\n        var lastOperation = item.batch.operations[item.batch.operations.length - 1];\n        var nextBaseVersion = lastOperation.baseVersion + 1;\n        var operations = _this.editor.model.document.history.getOperations(nextBaseVersion);\n        _this._restoreSelection(item.selection.ranges, item.selection.isBackward, operations);\n        _this._undo(item.batch, redoingBatch);\n      });\n      this.refresh();\n    }\n  }]);\n}(BaseCommand);\nexport { RedoCommand as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module undo/undo\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport UndoEditing from './undoediting';\nimport UndoUI from './undoui';\n\n/**\n * The undo feature.\n *\n * This is a \"glue\" plugin which loads the {@link module:undo/undoediting~UndoEditing undo editing feature}\n * and {@link module:undo/undoui~UndoUI undo UI feature}.\n *\n * Below is the explanation of the undo mechanism working together with {@link module:engine/model/history~History History}:\n *\n * Whenever a {@link module:engine/model/operation/operation~Operation operation} is applied to the\n * {@link module:engine/model/document~Document document}, it is saved to `History` as is.\n * The {@link module:engine/model/batch~Batch batch} that owns that operation is also saved, in\n * {@link module:undo/undocommand~UndoCommand}, together with the selection that was present in the document before the\n * operation was applied. A batch is saved instead of the operation because changes are undone batch-by-batch, not operation-by-operation\n * and a batch is seen as one undo step.\n *\n * After some changes happen to the document, the `History` and `UndoCommand` stack can be represented as follows:\n *\n *\t\t    History                            Undo stack\n *\t\t==============             ==================================\n *\t\t[operation A1]                         [batch A]\n *\t\t[operation B1]                         [batch B]\n *\t\t[operation B2]                         [batch C]\n *\t\t[operation C1]\n *\t\t[operation C2]\n *\t\t[operation B3]\n *\t\t[operation C3]\n *\n * Where operations starting with the same letter are from same batch.\n *\n * Undoing a batch means that a set of operations which will reverse the effects of that batch needs to be generated.\n * For example, if a batch added several letters, undoing the batch should remove them. It is important to apply undoing\n * operations in the reversed order, so if a batch has operation `X`, `Y`, `Z`, reversed operations `Zr`, `Yr` and `Xr`\n * need to be applied. Otherwise reversed operation `Xr` would operate on a wrong document state, because operation `X`\n * does not know that operations `Y` and `Z` happened.\n *\n * After operations from an undone batch got {@link module:engine/model/operation/operation~Operation#getReversed reversed},\n * one needs to make sure if they are ready to be applied. In the scenario above, operation `C3` is the last operation and `C3r`\n * bases on up-to-date document state, so it can be applied to the document.\n *\n *\t\t     History                             Undo stack\n *\t\t=================             ==================================\n *\t\t[ operation A1  ]                      [  batch A  ]\n *\t\t[ operation B1  ]                      [  batch B  ]\n *\t\t[ operation B2  ]             [   processing undoing batch C   ]\n *\t\t[ operation C1  ]\n *\t\t[ operation C2  ]\n *\t\t[ operation B3  ]\n *\t\t[ operation C3  ]\n *\t\t[ operation C3r ]\n *\n * Next is operation `C2`, reversed to `C2r`. `C2r` bases on `C2`, so it bases on the wrong document state. It needs to be\n * transformed by operations from history that happened after it, so it \"knows\" about them. Let us assume that `C2' = C2r * B3 * C3 * C3r`,\n * where `*` means \"transformed by\". Rest of operations from that batch are processed in the same fashion.\n *\n *\t\t     History                             Undo stack                                      Redo stack\n *\t\t=================             ==================================             ==================================\n *\t\t[ operation A1  ]                      [  batch A  ]                                    [ batch Cr ]\n *\t\t[ operation B1  ]                      [  batch B  ]\n *\t\t[ operation B2  ]\n *\t\t[ operation C1  ]\n *\t\t[ operation C2  ]\n *\t\t[ operation B3  ]\n *\t\t[ operation C3  ]\n *\t\t[ operation C3r ]\n *\t\t[ operation C2' ]\n *\t\t[ operation C1' ]\n *\n * Selective undo works on the same basis, however, instead of undoing the last batch in the undo stack, any batch can be undone.\n * The same algorithm applies: operations from a batch (i.e. `A1`) are reversed and then transformed by operations stored in history.\n *\n * Redo also is very similar to undo. It has its own stack that is filled with undoing (reversed batches). Operations from\n * batch that is re-done are reversed-back, transformed in proper order and applied to the document.\n *\n *\t\t     History                             Undo stack                                      Redo stack\n *\t\t=================             ==================================             ==================================\n *\t\t[ operation A1  ]                      [  batch A  ]\n *\t\t[ operation B1  ]                      [  batch B  ]\n *\t\t[ operation B2  ]                      [ batch Crr ]\n *\t\t[ operation C1  ]\n *\t\t[ operation C2  ]\n *\t\t[ operation B3  ]\n *\t\t[ operation C3  ]\n *\t\t[ operation C3r ]\n *\t\t[ operation C2' ]\n *\t\t[ operation C1' ]\n *\t\t[ operation C1'r]\n *\t\t[ operation C2'r]\n *\t\t[ operation C3rr]\n *\n * @extends module:core/plugin~Plugin\n */\nvar Undo = /*#__PURE__*/function (_Plugin) {\n  function Undo() {\n    _classCallCheck(this, Undo);\n    return _callSuper(this, Undo, arguments);\n  }\n  _inherits(Undo, _Plugin);\n  return _createClass(Undo, null, [{\n    key: \"requires\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return [UndoEditing, UndoUI];\n    }\n\n    /**\n     * @inheritDoc\n     */\n  }, {\n    key: \"pluginName\",\n    get: function get() {\n      return 'Undo';\n    }\n  }]);\n}(Plugin);\nexport { Undo as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.array.find-index.js\";\nimport \"core-js/modules/es.array.splice.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module undo/undocommand\n */\n\nimport BaseCommand from './basecommand';\n\n/**\n * The undo command stores {@link module:engine/model/batch~Batch batches} applied to the\n * {@link module:engine/model/document~Document document} and is able to undo a batch by reversing it and transforming by\n * batches from {@link module:engine/model/document~Document#history history} that happened after the reversed batch.\n *\n * The undo command also takes care of restoring the {@link module:engine/model/document~Document#selection document selection}.\n *\n * @extends module:undo/basecommand~BaseCommand\n */\nvar UndoCommand = /*#__PURE__*/function (_BaseCommand) {\n  function UndoCommand() {\n    _classCallCheck(this, UndoCommand);\n    return _callSuper(this, UndoCommand, arguments);\n  }\n  _inherits(UndoCommand, _BaseCommand);\n  return _createClass(UndoCommand, [{\n    key: \"execute\",\n    value:\n    /**\n     * Executes the command. This method reverts a {@link module:engine/model/batch~Batch batch} added to the command's stack, transforms\n     * and applies the reverted version on the {@link module:engine/model/document~Document document} and removes the batch from the stack.\n     * Then, it restores the {@link module:engine/model/document~Document#selection document selection}.\n     *\n     * @fires execute\n     * @fires revert\n     * @param {module:engine/model/batch~Batch} [batch] A batch that should be undone. If not set, the last added batch will be undone.\n     */\n    function execute() {\n      var _this = this;\n      var batch = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      // If batch is not given, set `batchIndex` to the last index in command stack.\n      var batchIndex = batch ? this._stack.findIndex(function (a) {\n        return a.batch == batch;\n      }) : this._stack.length - 1;\n      var item = this._stack.splice(batchIndex, 1)[0];\n      var undoingBatch = this.editor.model.createBatch('transparent');\n\n      // All changes has to be done in one `enqueueChange` callback so other listeners will not\n      // step between consecutive operations, or won't do changes to the document before selection is properly restored.\n      this.editor.model.enqueueChange(undoingBatch, function () {\n        _this._undo(item.batch, undoingBatch);\n        var operations = _this.editor.model.document.history.getOperations(item.batch.baseVersion);\n        _this._restoreSelection(item.selection.ranges, item.selection.isBackward, operations);\n        _this.fire('revert', item.batch, undoingBatch);\n      });\n      this.refresh();\n    }\n  }]);\n}(BaseCommand);\n/**\n * Fired when execution of the command reverts some batch.\n *\n * @event revert\n */\nexport { UndoCommand as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-set.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module undo/undoediting\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport UndoCommand from './undocommand';\nimport RedoCommand from './redocommand';\n\n/**\n * The undo engine feature.\n *\n * It introduces the `'undo'` and `'redo'` commands to the editor.\n *\n * @extends module:core/plugin~Plugin\n */\nvar UndoEditing = /*#__PURE__*/function (_Plugin) {\n  /**\n   * @inheritDoc\n   */\n  function UndoEditing(editor) {\n    var _this;\n    _classCallCheck(this, UndoEditing);\n    _this = _callSuper(this, UndoEditing, [editor]);\n\n    /**\n     * The command that manages undo {@link module:engine/model/batch~Batch batches} stack (history).\n     * Created and registered during the {@link #init feature initialization}.\n     *\n     * @private\n     * @member {module:undo/undocommand~UndoCommand} #_undoCommand\n     */\n\n    /**\n     * The command that manages redo {@link module:engine/model/batch~Batch batches} stack (history).\n     * Created and registered during the {@link #init feature initialization}.\n     *\n     * @private\n     * @member {module:undo/undocommand~UndoCommand} #_redoCommand\n     */\n\n    /**\n     * Keeps track of which batches were registered in undo.\n     *\n     * @private\n     * @member {WeakSet.<module:engine/model/batch~Batch>}\n     */\n    _this._batchRegistry = new WeakSet();\n    return _this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  _inherits(UndoEditing, _Plugin);\n  return _createClass(UndoEditing, [{\n    key: \"init\",\n    value: function init() {\n      var _this2 = this;\n      var editor = this.editor;\n\n      // Create commands.\n      this._undoCommand = new UndoCommand(editor);\n      this._redoCommand = new RedoCommand(editor);\n\n      // Register command to the editor.\n      editor.commands.add('undo', this._undoCommand);\n      editor.commands.add('redo', this._redoCommand);\n      this.listenTo(editor.model, 'applyOperation', function (evt, args) {\n        var operation = args[0];\n\n        // Do not register batch if the operation is not a document operation.\n        // This prevents from creating empty undo steps, where all operations where non-document operations.\n        // Non-document operations creates and alters content in detached tree fragments (for example, document fragments).\n        // Most of time this is preparing data before it is inserted into actual tree (for example during copy & paste).\n        // Such operations should not be reversed.\n        if (!operation.isDocumentOperation) {\n          return;\n        }\n        var batch = operation.batch;\n        var isRedoBatch = _this2._redoCommand._createdBatches.has(batch);\n        var isUndoBatch = _this2._undoCommand._createdBatches.has(batch);\n        var isRegisteredBatch = _this2._batchRegistry.has(batch);\n\n        // If changes are not a part of a batch or this is not a new batch, omit those changes.\n        if (isRegisteredBatch || batch.type == 'transparent' && !isRedoBatch && !isUndoBatch) {\n          return;\n        } else {\n          if (isRedoBatch) {\n            // If this batch comes from `redoCommand`, add it to `undoCommand` stack.\n            _this2._undoCommand.addBatch(batch);\n          } else if (!isUndoBatch) {\n            // A default batch - these are new changes in the document, not introduced by undo feature.\n            // Add them to `undoCommand` stack and clear `redoCommand` stack.\n            _this2._undoCommand.addBatch(batch);\n            _this2._redoCommand.clearStack();\n          }\n        }\n\n        // Add the batch to the registry so it will not be processed again.\n        _this2._batchRegistry.add(batch);\n      }, {\n        priority: 'highest'\n      });\n      this.listenTo(this._undoCommand, 'revert', function (evt, undoneBatch, undoingBatch) {\n        _this2._redoCommand.addBatch(undoingBatch);\n      });\n      editor.keystrokes.set('CTRL+Z', 'undo');\n      editor.keystrokes.set('CTRL+Y', 'redo');\n      editor.keystrokes.set('CTRL+SHIFT+Z', 'redo');\n    }\n  }], [{\n    key: \"pluginName\",\n    get:\n    /**\n     * @inheritDoc\n     */\n    function get() {\n      return 'UndoEditing';\n    }\n  }]);\n}(Plugin);\nexport { UndoEditing as default };","import _classCallCheck from '/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js';\nimport _createClass from '/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js';\nimport _callSuper from '/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js';\nimport _inherits from '/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js';\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module undo/undoui\n */\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview';\nimport undoIcon from '../theme/icons/undo.svg';\nimport redoIcon from '../theme/icons/redo.svg';\n/**\n * The undo UI feature. It introduces the `'undo'` and `'redo'` buttons to the editor.\n *\n * @extends module:core/plugin~Plugin\n */\nvar UndoUI = /*#__PURE__*/\nfunction (_Plugin) {\n    function UndoUI() {\n        _classCallCheck(this, UndoUI);\n        return _callSuper(this, UndoUI, arguments);\n    }\n    _inherits(UndoUI, _Plugin);\n    return _createClass(UndoUI, [\n        {\n            key: 'init',\n            value: /**\n     * @inheritDoc\n     */\n            function init() {\n                var editor = this.editor;\n                var locale = editor.locale;\n                var t = editor.t;\n                var localizedUndoIcon = locale.uiLanguageDirection == 'ltr' ? undoIcon : redoIcon;\n                var localizedRedoIcon = locale.uiLanguageDirection == 'ltr' ? redoIcon : undoIcon;\n                this._addButton('undo', t('Undo'), 'CTRL+Z', localizedUndoIcon);\n                this._addButton('redo', t('Redo'), 'CTRL+Y', localizedRedoIcon);\n            }    /**\n     * Creates a button for the specified command.\n     *\n     * @private\n     * @param {String} name Command name.\n     * @param {String} label Button label.\n     * @param {String} keystroke Command keystroke.\n     * @param {String} Icon Source of the icon.\n     */\n        },\n        {\n            key: '_addButton',\n            value: function _addButton(name, label, keystroke, Icon) {\n                var _this = this;\n                var editor = this.editor;\n                editor.ui.componentFactory.add(name, function (locale) {\n                    var command = editor.commands.get(name);\n                    var view = new ButtonView(locale);\n                    view.set({\n                        label: label,\n                        icon: Icon,\n                        keystroke: keystroke,\n                        tooltip: true\n                    });\n                    view.bind('isEnabled').to(command, 'isEnabled');\n                    _this.listenTo(view, 'execute', function () {\n                        return editor.execute(name);\n                    });\n                    return view;\n                });\n            }\n        }\n    ]);\n}(Plugin);\nexport {\n    UndoUI as default\n};","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M14.958 9.367l-2.189 1.837a.75.75 0 0 0 .965 1.149l3.788-3.18a.747.747 0 0 0 .21-.284.75.75 0 0 0-.17-.945L13.77 4.762a.75.75 0 1 0-.964 1.15l2.331 1.955H6.22A.75.75 0 0 0 6 7.9a4 4 0 1 0 1.477 7.718l-.344-1.489A2.5 2.5 0 1 1 6.039 9.4l-.008-.032h8.927z\\\"/></svg>\"","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M5.042 9.367l2.189 1.837a.75.75 0 0 1-.965 1.149l-3.788-3.18a.747.747 0 0 1-.21-.284.75.75 0 0 1 .17-.945L6.23 4.762a.75.75 0 1 1 .964 1.15L4.863 7.866h8.917A.75.75 0 0 1 14 7.9a4 4 0 1 1-1.477 7.718l.344-1.489a2.5 2.5 0 1 0 1.094-4.73l.008-.032H5.042z\\\"/></svg>\"","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport _wrapNativeSuper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js\";\nimport \"core-js/modules/es.error.cause.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.match.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/ckeditorerror\n */\n\n/**\n * URL to the documentation with error codes.\n */\nexport var DOCUMENTATION_URL = 'https://ckeditor.com/docs/ckeditor5/latest/framework/guides/support/error-codes.html';\n\n/**\n * The CKEditor error class.\n *\n * You should throw `CKEditorError` when:\n *\n * * An unexpected situation occurred and the editor (most probably) will not work properly. Such exception will be handled\n * by the {@link module:watchdog/watchdog~Watchdog watchdog} (if it is integrated),\n * * If the editor is incorrectly integrated or the editor API is used in the wrong way. This way you will give\n * feedback to the developer as soon as possible. Keep in mind that for common integration issues which should not\n * stop editor initialization (like missing upload adapter, wrong name of a toolbar component) we use `console.warn()` with\n * {@link module:utils/ckeditorerror~attachLinkToDocumentation `attachLinkToDocumentation()`}\n * to improve developers experience and let them see the working editor as soon as possible.\n *\n *\t\t/**\n *\t\t * Error thrown when a plugin cannot be loaded due to JavaScript errors, lack of plugins with a given name, etc.\n *\t\t *\n *\t\t * @error plugin-load\n *\t\t * @param pluginName The name of the plugin that could not be loaded.\n *\t\t * @param moduleName The name of the module which tried to load this plugin.\n *\t\t * /\n *\t\tthrow new CKEditorError( 'plugin-load: It was not possible to load the \"{$pluginName}\" plugin in module \"{$moduleName}', {\n *\t\t\tpluginName: 'foo',\n *\t\t\tmoduleName: 'bar'\n *\t\t} );\n *\n * @extends Error\n */\nvar CKEditorError = /*#__PURE__*/function (_Error) {\n  /**\n   * Creates an instance of the CKEditorError class.\n   *\n   * @param {String} message The error message in an `error-name: Error message.` format.\n   * During the minification process the \"Error message\" part will be removed to limit the code size\n   * and a link to this error documentation will be added to the `message`.\n   * @param {Object|null} context A context of the error by which the {@link module:watchdog/watchdog~Watchdog watchdog}\n   * is able to determine which editor crashed. It should be an editor instance or a property connected to it. It can be also\n   * a `null` value if the editor should not be restarted in case of the error (e.g. during the editor initialization).\n   * The error context should be checked using the `areConnectedThroughProperties( editor, context )` utility\n   * to check if the object works as the context.\n   * @param {Object} [data] Additional data describing the error. A stringified version of this object\n   * will be appended to the error message, so the data are quickly visible in the console. The original\n   * data object will also be later available under the {@link #data} property.\n   */\n  function CKEditorError(message, context, data) {\n    var _this;\n    _classCallCheck(this, CKEditorError);\n    message = attachLinkToDocumentation(message);\n    if (data) {\n      message += ' ' + JSON.stringify(data);\n    }\n    _this = _callSuper(this, CKEditorError, [message]);\n\n    /**\n     * @type {String}\n     */\n    _this.name = 'CKEditorError';\n\n    /**\n     * A context of the error by which the Watchdog is able to determine which editor crashed.\n     *\n     * @type {Object|null}\n     */\n    _this.context = context;\n\n    /**\n     * The additional error data passed to the constructor. Undefined if none was passed.\n     *\n     * @type {Object|undefined}\n     */\n    _this.data = data;\n    return _this;\n  }\n\n  /**\n   * Checks if the error is of the `CKEditorError` type.\n   */\n  _inherits(CKEditorError, _Error);\n  return _createClass(CKEditorError, [{\n    key: \"is\",\n    value: function is(type) {\n      return type === 'CKEditorError';\n    }\n\n    /**\n     * A utility that ensures the the thrown error is a {@link module:utils/ckeditorerror~CKEditorError} one.\n     * It is uesful when combined with the {@link module:watchdog/watchdog~Watchdog} feature, which can restart the editor in case\n     * of a {@link module:utils/ckeditorerror~CKEditorError} error.\n     *\n     * @param {Error} err An error.\n     * @param {Object} context An object conected through properties with the editor instance. This context will be used\n     * by the watchdog to verify which editor should be restarted.\n     */\n  }], [{\n    key: \"rethrowUnexpectedError\",\n    value: function rethrowUnexpectedError(err, context) {\n      if (err.is && err.is('CKEditorError')) {\n        throw err;\n      }\n\n      /**\n       * An unexpected error occurred inside the CKEditor 5 codebase. The `error.data.originalError` property\n       * shows the original error properties.\n       *\n       * This error is only useful when the editor is initialized using the {@link module:watchdog/watchdog~Watchdog} feature.\n       * In case of such error (or any {@link module:utils/ckeditorerror~CKEditorError} error) the wathcdog should restart the editor.\n       *\n       * @error unexpected-error\n       */\n      throw new CKEditorError('unexpected-error', context, {\n        originalError: {\n          message: err.message,\n          stack: err.stack,\n          name: err.name\n        }\n      });\n    }\n  }]);\n}(/*#__PURE__*/_wrapNativeSuper(Error));\n/**\n * Attaches the link to the documentation at the end of the error message. Use whenever you log a warning or error on the\n * console. It is also used by {@link module:utils/ckeditorerror~CKEditorError}.\n *\n *\t\t /**\n *\t\t  * There was a problem processing the configuration of the toolbar. The item with the given\n *\t\t  * name does not exist so it was omitted when rendering the toolbar.\n *\t\t  *\n *\t\t  * @error toolbarview-item-unavailable\n *\t\t  * @param {String} name The name of the component.\n *\t\t  * /\n *\t\t console.warn( attachLinkToDocumentation(\n *\t\t \t'toolbarview-item-unavailable: The requested toolbar item is unavailable.' ), { name } );\n *\n * @param {String} message Message to be logged.\n * @returns {String}\n */\nexport { CKEditorError as default };\nexport function attachLinkToDocumentation(message) {\n  var matchedErrorName = message.match(/^([^:]+):/);\n  if (!matchedErrorName) {\n    return message;\n  }\n  return message + \" Read more: \".concat(DOCUMENTATION_URL, \"#error-\").concat(matchedErrorName[1], \"\\n\");\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.find.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.reduce.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/collection\n */\n\nimport EmitterMixin from './emittermixin';\nimport CKEditorError from './ckeditorerror';\nimport uid from './uid';\nimport mix from './mix';\n\n/**\n * Collections are ordered sets of objects. Items in the collection can be retrieved by their indexes\n * in the collection (like in an array) or by their ids.\n *\n * If an object without an `id` property is being added to the collection, the `id` property will be generated\n * automatically. Note that the automatically generated id is unique only within this single collection instance.\n *\n * By default an item in the collection is identified by its `id` property. The name of the identifier can be\n * configured through the constructor of the collection.\n *\n * @mixes module:utils/emittermixin~EmitterMixin\n */\nvar Collection = /*#__PURE__*/function () {\n  /**\n   * Creates a new Collection instance.\n   *\n   * @param {Object} [options={}] The options object.\n   * @param {String} [options.idProperty='id'] The name of the property which is considered to identify an item.\n   */\n  function Collection() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _classCallCheck(this, Collection);\n    /**\n     * The internal list of items in the collection.\n     *\n     * @private\n     * @member {Object[]}\n     */\n    this._items = [];\n\n    /**\n     * The internal map of items in the collection.\n     *\n     * @private\n     * @member {Map}\n     */\n    this._itemMap = new Map();\n\n    /**\n     * The name of the property which is considered to identify an item.\n     *\n     * @private\n     * @member {String}\n     */\n    this._idProperty = options.idProperty || 'id';\n\n    /**\n     * A helper mapping external items of a bound collection ({@link #bindTo})\n     * and actual items of this collection. It provides information\n     * necessary to properly remove items bound to another collection.\n     *\n     * See {@link #_bindToInternalToExternalMap}.\n     *\n     * @protected\n     * @member {WeakMap}\n     */\n    this._bindToExternalToInternalMap = new WeakMap();\n\n    /**\n     * A helper mapping items of this collection to external items of a bound collection\n     * ({@link #bindTo}). It provides information necessary to manage the bindings, e.g.\n     * to avoid loops in two–way bindings.\n     *\n     * See {@link #_bindToExternalToInternalMap}.\n     *\n     * @protected\n     * @member {WeakMap}\n     */\n    this._bindToInternalToExternalMap = new WeakMap();\n\n    /**\n     * Stores indexes of skipped items from bound external collection.\n     *\n     * @private\n     * @member {Array}\n     */\n    this._skippedIndexesFromExternal = [];\n\n    /**\n     * A collection instance this collection is bound to as a result\n     * of calling {@link #bindTo} method.\n     *\n     * @protected\n     * @member {module:utils/collection~Collection} #_bindToCollection\n     */\n  }\n\n  /**\n   * The number of items available in the collection.\n   *\n   * @member {Number} #length\n   */\n  return _createClass(Collection, [{\n    key: \"length\",\n    get: function get() {\n      return this._items.length;\n    }\n\n    /**\n     * Returns the first item from the collection or null when collection is empty.\n     *\n     * @returns {Object|null} The first item or `null` if collection is empty.\n     */\n  }, {\n    key: \"first\",\n    get: function get() {\n      return this._items[0] || null;\n    }\n\n    /**\n     * Returns the last item from the collection or null when collection is empty.\n     *\n     * @returns {Object|null} The last item or `null` if collection is empty.\n     */\n  }, {\n    key: \"last\",\n    get: function get() {\n      return this._items[this.length - 1] || null;\n    }\n\n    /**\n     * Adds an item into the collection.\n     *\n     * If the item does not have an id, then it will be automatically generated and set on the item.\n     *\n     * @chainable\n     * @param {Object} item\n     * @param {Number} [index] The position of the item in the collection. The item\n     * is pushed to the collection when `index` not specified.\n     * @fires add\n     */\n  }, {\n    key: \"add\",\n    value: function add(item, index) {\n      var itemId;\n      var idProperty = this._idProperty;\n      if (idProperty in item) {\n        itemId = item[idProperty];\n        if (typeof itemId != 'string') {\n          /**\n           * This item's id should be a string.\n           *\n           * @error collection-add-invalid-id\n           */\n          throw new CKEditorError('collection-add-invalid-id', this);\n        }\n        if (this.get(itemId)) {\n          /**\n           * This item already exists in the collection.\n           *\n           * @error collection-add-item-already-exists\n           */\n          throw new CKEditorError('collection-add-item-already-exists', this);\n        }\n      } else {\n        item[idProperty] = itemId = uid();\n      }\n\n      // TODO: Use ES6 default function argument.\n      if (index === undefined) {\n        index = this._items.length;\n      } else if (index > this._items.length || index < 0) {\n        /**\n         * The index number has invalid value.\n         *\n         * @error collection-add-item-bad-index\n         */\n        throw new CKEditorError('collection-add-item-invalid-index', this);\n      }\n      this._items.splice(index, 0, item);\n      this._itemMap.set(itemId, item);\n      this.fire('add', item, index);\n      return this;\n    }\n\n    /**\n     * Gets item by its id or index.\n     *\n     * @param {String|Number} idOrIndex The item id or index in the collection.\n     * @returns {Object|null} The requested item or `null` if such item does not exist.\n     */\n  }, {\n    key: \"get\",\n    value: function get(idOrIndex) {\n      var item;\n      if (typeof idOrIndex == 'string') {\n        item = this._itemMap.get(idOrIndex);\n      } else if (typeof idOrIndex == 'number') {\n        item = this._items[idOrIndex];\n      } else {\n        /**\n         * Index or id must be given.\n         *\n         * @error collection-get-invalid-arg\n         */\n        throw new CKEditorError('collection-get-invalid-arg: Index or id must be given.', this);\n      }\n      return item || null;\n    }\n\n    /**\n     * Returns a boolean indicating whether the collection contains an item.\n     *\n     * @param {Object|String} itemOrId The item or its id in the collection.\n     * @returns {Boolean} `true` if the collection contains the item, `false` otherwise.\n     */\n  }, {\n    key: \"has\",\n    value: function has(itemOrId) {\n      if (typeof itemOrId == 'string') {\n        return this._itemMap.has(itemOrId);\n      } else {\n        // Object\n        var idProperty = this._idProperty;\n        var id = itemOrId[idProperty];\n        return this._itemMap.has(id);\n      }\n    }\n\n    /**\n     * Gets index of item in the collection.\n     * When item is not defined in the collection then index will be equal -1.\n     *\n     * @param {Object|String} itemOrId The item or its id in the collection.\n     * @returns {Number} Index of given item.\n     */\n  }, {\n    key: \"getIndex\",\n    value: function getIndex(itemOrId) {\n      var item;\n      if (typeof itemOrId == 'string') {\n        item = this._itemMap.get(itemOrId);\n      } else {\n        item = itemOrId;\n      }\n      return this._items.indexOf(item);\n    }\n\n    /**\n     * Removes an item from the collection.\n     *\n     * @param {Object|Number|String} subject The item to remove, its id or index in the collection.\n     * @returns {Object} The removed item.\n     * @fires remove\n     */\n  }, {\n    key: \"remove\",\n    value: function remove(subject) {\n      var index, id, item;\n      var itemDoesNotExist = false;\n      var idProperty = this._idProperty;\n      if (typeof subject == 'string') {\n        id = subject;\n        item = this._itemMap.get(id);\n        itemDoesNotExist = !item;\n        if (item) {\n          index = this._items.indexOf(item);\n        }\n      } else if (typeof subject == 'number') {\n        index = subject;\n        item = this._items[index];\n        itemDoesNotExist = !item;\n        if (item) {\n          id = item[idProperty];\n        }\n      } else {\n        item = subject;\n        id = item[idProperty];\n        index = this._items.indexOf(item);\n        itemDoesNotExist = index == -1 || !this._itemMap.get(id);\n      }\n      if (itemDoesNotExist) {\n        /**\n         * Item not found.\n         *\n         * @error collection-remove-404\n         */\n        throw new CKEditorError('collection-remove-404: Item not found.', this);\n      }\n      this._items.splice(index, 1);\n      this._itemMap.delete(id);\n      var externalItem = this._bindToInternalToExternalMap.get(item);\n      this._bindToInternalToExternalMap.delete(item);\n      this._bindToExternalToInternalMap.delete(externalItem);\n      this.fire('remove', item, index);\n      return item;\n    }\n\n    /**\n     * Executes the callback for each item in the collection and composes an array or values returned by this callback.\n     *\n     * @param {Function} callback\n     * @param {Object} callback.item\n     * @param {Number} callback.index\n     * @param {Object} ctx Context in which the `callback` will be called.\n     * @returns {Array} The result of mapping.\n     */\n  }, {\n    key: \"map\",\n    value: function map(callback, ctx) {\n      return this._items.map(callback, ctx);\n    }\n\n    /**\n     * Finds the first item in the collection for which the `callback` returns a true value.\n     *\n     * @param {Function} callback\n     * @param {Object} callback.item\n     * @param {Number} callback.index\n     * @param {Object} ctx Context in which the `callback` will be called.\n     * @returns {Object} The item for which `callback` returned a true value.\n     */\n  }, {\n    key: \"find\",\n    value: function find(callback, ctx) {\n      return this._items.find(callback, ctx);\n    }\n\n    /**\n     * Returns an array with items for which the `callback` returned a true value.\n     *\n     * @param {Function} callback\n     * @param {Object} callback.item\n     * @param {Number} callback.index\n     * @param {Object} ctx Context in which the `callback` will be called.\n     * @returns {Object[]} The array with matching items.\n     */\n  }, {\n    key: \"filter\",\n    value: function filter(callback, ctx) {\n      return this._items.filter(callback, ctx);\n    }\n\n    /**\n     * Removes all items from the collection and destroys the binding created using\n     * {@link #bindTo}.\n     */\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      if (this._bindToCollection) {\n        this.stopListening(this._bindToCollection);\n        this._bindToCollection = null;\n      }\n      while (this.length) {\n        this.remove(0);\n      }\n    }\n\n    /**\n     * Binds and synchronizes the collection with another one.\n     *\n     * The binding can be a simple factory:\n     *\n     *\t\tclass FactoryClass {\n     *\t\t\tconstructor( data ) {\n     *\t\t\t\tthis.label = data.label;\n     *\t\t\t}\n     *\t\t}\n     *\n     *\t\tconst source = new Collection( { idProperty: 'label' } );\n     *\t\tconst target = new Collection();\n     *\n     *\t\ttarget.bindTo( source ).as( FactoryClass );\n     *\n     *\t\tsource.add( { label: 'foo' } );\n     *\t\tsource.add( { label: 'bar' } );\n     *\n     *\t\tconsole.log( target.length ); // 2\n     *\t\tconsole.log( target.get( 1 ).label ); // 'bar'\n     *\n     *\t\tsource.remove( 0 );\n     *\t\tconsole.log( target.length ); // 1\n     *\t\tconsole.log( target.get( 0 ).label ); // 'bar'\n     *\n     * or the factory driven by a custom callback:\n     *\n     *\t\tclass FooClass {\n     *\t\t\tconstructor( data ) {\n     *\t\t\t\tthis.label = data.label;\n     *\t\t\t}\n     *\t\t}\n     *\n     *\t\tclass BarClass {\n     *\t\t\tconstructor( data ) {\n     *\t\t\t\tthis.label = data.label;\n     *\t\t\t}\n     *\t\t}\n     *\n     *\t\tconst source = new Collection( { idProperty: 'label' } );\n     *\t\tconst target = new Collection();\n     *\n     *\t\ttarget.bindTo( source ).using( ( item ) => {\n     *\t\t\tif ( item.label == 'foo' ) {\n     *\t\t\t\treturn new FooClass( item );\n     *\t\t\t} else {\n     *\t\t\t\treturn new BarClass( item );\n     *\t\t\t}\n     *\t\t} );\n     *\n     *\t\tsource.add( { label: 'foo' } );\n     *\t\tsource.add( { label: 'bar' } );\n     *\n     *\t\tconsole.log( target.length ); // 2\n     *\t\tconsole.log( target.get( 0 ) instanceof FooClass ); // true\n     *\t\tconsole.log( target.get( 1 ) instanceof BarClass ); // true\n     *\n     * or the factory out of property name:\n     *\n     *\t\tconst source = new Collection( { idProperty: 'label' } );\n     *\t\tconst target = new Collection();\n     *\n     *\t\ttarget.bindTo( source ).using( 'label' );\n     *\n     *\t\tsource.add( { label: { value: 'foo' } } );\n     *\t\tsource.add( { label: { value: 'bar' } } );\n     *\n     *\t\tconsole.log( target.length ); // 2\n     *\t\tconsole.log( target.get( 0 ).value ); // 'foo'\n     *\t\tconsole.log( target.get( 1 ).value ); // 'bar'\n     *\n     * It's possible to skip specified items by returning falsy value:\n     *\n     *\t\tconst source = new Collection();\n     *\t\tconst target = new Collection();\n     *\n     *\t\ttarget.bindTo( source ).using( item => {\n     *\t\t\tif ( item.hidden ) {\n     *\t\t\t\treturn null;\n     *\t\t\t}\n     *\n     *\t\t\treturn item;\n     *\t\t} );\n     *\n     *\t\tsource.add( { hidden: true } );\n     *\t\tsource.add( { hidden: false } );\n     *\n     *\t\tconsole.log( source.length ); // 2\n     *\t\tconsole.log( target.length ); // 1\n     *\n     * **Note**: {@link #clear} can be used to break the binding.\n     *\n     * @param {module:utils/collection~Collection} externalCollection A collection to be bound.\n     * @returns {Object}\n     * @returns {module:utils/collection~CollectionBindToChain} The binding chain object.\n     */\n  }, {\n    key: \"bindTo\",\n    value: function bindTo(externalCollection) {\n      var _this = this;\n      if (this._bindToCollection) {\n        /**\n         * The collection cannot be bound more than once.\n         *\n         * @error collection-bind-to-rebind\n         */\n        throw new CKEditorError('collection-bind-to-rebind: The collection cannot be bound more than once.', this);\n      }\n      this._bindToCollection = externalCollection;\n      return {\n        as: function as(Class) {\n          _this._setUpBindToBinding(function (item) {\n            return new Class(item);\n          });\n        },\n        using: function using(callbackOrProperty) {\n          if (typeof callbackOrProperty == 'function') {\n            _this._setUpBindToBinding(function (item) {\n              return callbackOrProperty(item);\n            });\n          } else {\n            _this._setUpBindToBinding(function (item) {\n              return item[callbackOrProperty];\n            });\n          }\n        }\n      };\n    }\n\n    /**\n     * Finalizes and activates a binding initiated by {#bindTo}.\n     *\n     * @protected\n     * @param {Function} factory A function which produces collection items.\n     */\n  }, {\n    key: \"_setUpBindToBinding\",\n    value: function _setUpBindToBinding(factory) {\n      var _this2 = this;\n      var externalCollection = this._bindToCollection;\n\n      // Adds the item to the collection once a change has been done to the external collection.\n      //\n      // @private\n      var addItem = function addItem(evt, externalItem, index) {\n        var isExternalBoundToThis = externalCollection._bindToCollection == _this2;\n        var externalItemBound = externalCollection._bindToInternalToExternalMap.get(externalItem);\n\n        // If an external collection is bound to this collection, which makes it a 2–way binding,\n        // and the particular external collection item is already bound, don't add it here.\n        // The external item has been created **out of this collection's item** and (re)adding it will\n        // cause a loop.\n        if (isExternalBoundToThis && externalItemBound) {\n          _this2._bindToExternalToInternalMap.set(externalItem, externalItemBound);\n          _this2._bindToInternalToExternalMap.set(externalItemBound, externalItem);\n        } else {\n          var item = factory(externalItem);\n\n          // When there is no item we need to remember skipped index first and then we can skip this item.\n          if (!item) {\n            _this2._skippedIndexesFromExternal.push(index);\n            return;\n          }\n\n          // Lets try to put item at the same index as index in external collection\n          // but when there are a skipped items in one or both collections we need to recalculate this index.\n          var finalIndex = index;\n\n          // When we try to insert item after some skipped items from external collection we need\n          // to include this skipped items and decrease index.\n          //\n          // For the following example:\n          // external -> [ 'A', 'B - skipped for internal', 'C - skipped for internal' ]\n          // internal -> [ A ]\n          //\n          // Another item is been added at the end of external collection:\n          // external.add( 'D' )\n          // external -> [ 'A', 'B - skipped for internal', 'C - skipped for internal', 'D' ]\n          //\n          // We can't just add 'D' to internal at the same index as index in external because\n          // this will produce empty indexes what is invalid:\n          // internal -> [ 'A', empty, empty, 'D' ]\n          //\n          // So we need to include skipped items and decrease index\n          // internal -> [ 'A', 'D' ]\n          var _iterator = _createForOfIteratorHelper(_this2._skippedIndexesFromExternal),\n            _step;\n          try {\n            for (_iterator.s(); !(_step = _iterator.n()).done;) {\n              var skipped = _step.value;\n              if (index > skipped) {\n                finalIndex--;\n              }\n            }\n\n            // We need to take into consideration that external collection could skip some items from\n            // internal collection.\n            //\n            // For the following example:\n            // internal -> [ 'A', 'B - skipped for external', 'C - skipped for external' ]\n            // external -> [ A ]\n            //\n            // Another item is been added at the end of external collection:\n            // external.add( 'D' )\n            // external -> [ 'A', 'D' ]\n            //\n            // We need to include skipped items and place new item after them:\n            // internal -> [ 'A', 'B - skipped for external', 'C - skipped for external', 'D' ]\n          } catch (err) {\n            _iterator.e(err);\n          } finally {\n            _iterator.f();\n          }\n          var _iterator2 = _createForOfIteratorHelper(externalCollection._skippedIndexesFromExternal),\n            _step2;\n          try {\n            for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n              var _skipped = _step2.value;\n              if (finalIndex >= _skipped) {\n                finalIndex++;\n              }\n            }\n          } catch (err) {\n            _iterator2.e(err);\n          } finally {\n            _iterator2.f();\n          }\n          _this2._bindToExternalToInternalMap.set(externalItem, item);\n          _this2._bindToInternalToExternalMap.set(item, externalItem);\n          _this2.add(item, finalIndex);\n\n          // After adding new element to internal collection we need update indexes\n          // of skipped items in external collection.\n          for (var i = 0; i < externalCollection._skippedIndexesFromExternal.length; i++) {\n            if (finalIndex <= externalCollection._skippedIndexesFromExternal[i]) {\n              externalCollection._skippedIndexesFromExternal[i]++;\n            }\n          }\n        }\n      };\n\n      // Load the initial content of the collection.\n      var _iterator3 = _createForOfIteratorHelper(externalCollection),\n        _step3;\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var externalItem = _step3.value;\n          addItem(null, externalItem, externalCollection.getIndex(externalItem));\n        }\n\n        // Synchronize the with collection as new items are added.\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n      this.listenTo(externalCollection, 'add', addItem);\n\n      // Synchronize the with collection as new items are removed.\n      this.listenTo(externalCollection, 'remove', function (evt, externalItem, index) {\n        var item = _this2._bindToExternalToInternalMap.get(externalItem);\n        if (item) {\n          _this2.remove(item);\n        }\n\n        // After removing element from external collection we need update/remove indexes\n        // of skipped items in internal collection.\n        _this2._skippedIndexesFromExternal = _this2._skippedIndexesFromExternal.reduce(function (result, skipped) {\n          if (index < skipped) {\n            result.push(skipped - 1);\n          }\n          if (index > skipped) {\n            result.push(skipped);\n          }\n          return result;\n        }, []);\n      });\n    }\n\n    /**\n     * Iterable interface.\n     *\n     * @returns {Iterable.<*>}\n     */\n  }, {\n    key: Symbol.iterator,\n    value: function value() {\n      return this._items[Symbol.iterator]();\n    }\n\n    /**\n     * Fired when an item is added to the collection.\n     *\n     * @event add\n     * @param {Object} item The added item.\n     */\n\n    /**\n     * Fired when an item is removed from the collection.\n     *\n     * @event remove\n     * @param {Object} item The removed item.\n     * @param {Number} index Index from which item was removed.\n     */\n  }]);\n}();\nexport { Collection as default };\nmix(Collection, EmitterMixin);\n\n/**\n * An object returned by the {@link module:utils/collection~Collection#bindTo `bindTo()`} method\n * providing functions that specify the type of the binding.\n *\n * See the {@link module:utils/collection~Collection#bindTo `bindTo()`} documentation for examples.\n *\n * @interface module:utils/collection~CollectionBindToChain\n */\n\n/**\n * Creates a callback or a property binding.\n *\n * @method #using\n * @param {Function|String} callbackOrProperty  When the function is passed, it should return\n * the collection items. When the string is provided, the property value is used to create the bound collection items.\n */\n\n/**\n * Creates the class factory binding in which items of the source collection are passed to\n * the constructor of the specified class.\n *\n * @method #as\n * @param {Function} Class The class constructor used to create instances in the factory.\n */","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/comparearrays\n */\n\n/**\n * Compares how given arrays relate to each other. One array can be: same as another array, prefix of another array\n * or completely different. If arrays are different, first index at which they differ is returned. Otherwise,\n * a flag specifying the relation is returned. Flags are negative numbers, so whenever a number >= 0 is returned\n * it means that arrays differ.\n *\n *\t\tcompareArrays( [ 0, 2 ], [ 0, 2 ] );\t\t// 'same'\n *\t\tcompareArrays( [ 0, 2 ], [ 0, 2, 1 ] );\t\t// 'prefix'\n *\t\tcompareArrays( [ 0, 2 ], [ 0 ] );\t\t\t// 'extension'\n *\t\tcompareArrays( [ 0, 2 ], [ 1, 2 ] );\t\t// 0\n *\t\tcompareArrays( [ 0, 2 ], [ 0, 1 ] );\t\t// 1\n *\n * @param {Array} a Array that is compared.\n * @param {Array} b Array to compare with.\n * @returns {module:utils/comparearrays~ArrayRelation} How array `a` is related to `b`.\n */\nexport default function compareArrays(a, b) {\n  var minLen = Math.min(a.length, b.length);\n  for (var i = 0; i < minLen; i++) {\n    if (a[i] != b[i]) {\n      // The arrays are different.\n      return i;\n    }\n  }\n\n  // Both arrays were same at all points.\n  if (a.length == b.length) {\n    // If their length is also same, they are the same.\n    return 'same';\n  } else if (a.length < b.length) {\n    // Compared array is shorter so it is a prefix of the other array.\n    return 'prefix';\n  } else {\n    // Compared array is longer so it is an extension of the other array.\n    return 'extension';\n  }\n}\n\n/**\n * @typedef {'extension'|'same'|'prefix'} module:utils/comparearrays~ArrayRelation\n */","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/config\n */\n\nimport { isPlainObject, isElement, cloneDeepWith } from 'lodash-es';\n\n/**\n * Handles a configuration dictionary.\n */\nvar Config = /*#__PURE__*/function () {\n  /**\n   * Creates an instance of the {@link ~Config} class.\n   *\n   * @param {Object} [configurations] The initial configurations to be set. Usually, provided by the user.\n   * @param {Object} [defaultConfigurations] The default configurations. Usually, provided by the system.\n   */\n  function Config(configurations, defaultConfigurations) {\n    _classCallCheck(this, Config);\n    /**\n     * Store for the whole configuration.\n     *\n     * @private\n     * @member {Object}\n     */\n    this._config = {};\n\n    // Set default configuration.\n    if (defaultConfigurations) {\n      this.define(defaultConfigurations);\n    }\n\n    // Set initial configuration.\n    if (configurations) {\n      this._setObjectToTarget(this._config, configurations);\n    }\n  }\n\n  /**\n   * Set configuration values.\n   *\n   * It accepts both a name/value pair or an object, which properties and values will be used to set\n   * configurations.\n   *\n   * It also accepts setting a \"deep configuration\" by using dots in the name. For example, `'resize.width'` sets\n   * the value for the `width` configuration in the `resize` subset.\n   *\n   *\t\tconfig.set( 'width', 500 );\n   *\t\tconfig.set( 'toolbar.collapsed', true );\n   *\n   *\t\t// Equivalent to:\n   *\t\tconfig.set( {\n   *\t\t\twidth: 500\n   *\t\t\ttoolbar: {\n   *\t\t\t\tcollapsed: true\n   *\t\t\t}\n   *\t\t} );\n   *\n   * Passing an object as the value will amend the configuration, not replace it.\n   *\n   *\t\tconfig.set( 'toolbar', {\n   *\t\t\tcollapsed: true,\n   *\t\t} );\n   *\n   *\t\tconfig.set( 'toolbar', {\n   *\t\t\tcolor: 'red',\n   *\t\t} );\n   *\n   *\t\tconfig.get( 'toolbar.collapsed' ); // true\n   *\t\tconfig.get( 'toolbar.color' ); // 'red'\n   *\n   * @param {String|Object} name The configuration name or an object from which take properties as\n   * configuration entries. Configuration names are case-sensitive.\n   * @param {*} value The configuration value. Used if a name is passed.\n   */\n  return _createClass(Config, [{\n    key: \"set\",\n    value: function set(name, value) {\n      this._setToTarget(this._config, name, value);\n    }\n\n    /**\n     * Does exactly the same as {@link #set} with one exception – passed configuration extends\n     * existing one, but does not overwrite already defined values.\n     *\n     * This method is supposed to be called by plugin developers to setup plugin's configurations. It would be\n     * rarely used for other needs.\n     *\n     * @param {String|Object} name The configuration name or an object from which take properties as\n     * configuration entries. Configuration names are case-sensitive.\n     * @param {*} value The configuration value. Used if a name is passed.\n     */\n  }, {\n    key: \"define\",\n    value: function define(name, value) {\n      var isDefine = true;\n      this._setToTarget(this._config, name, value, isDefine);\n    }\n\n    /**\n     * Gets the value for a configuration entry.\n     *\n     *\t\tconfig.get( 'name' );\n     *\n     * Deep configurations can be retrieved by separating each part with a dot.\n     *\n     *\t\tconfig.get( 'toolbar.collapsed' );\n     *\n     * @param {String} name The configuration name. Configuration names are case-sensitive.\n     * @returns {*} The configuration value or `undefined` if the configuration entry was not found.\n     */\n  }, {\n    key: \"get\",\n    value: function get(name) {\n      return this._getFromSource(this._config, name);\n    }\n\n    /**\n     * Saves passed configuration to the specified target (nested object).\n     *\n     * @private\n     * @param {Object} target Nested config object.\n     * @param {String|Object} name The configuration name or an object from which take properties as\n     * configuration entries. Configuration names are case-sensitive.\n     * @param {*} value The configuration value. Used if a name is passed.\n     * @param {Boolean} [isDefine=false] Define if passed configuration should overwrite existing one.\n     */\n  }, {\n    key: \"_setToTarget\",\n    value: function _setToTarget(target, name, value) {\n      var isDefine = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n      // In case of an object, iterate through it and call `_setToTarget` again for each property.\n      if (isPlainObject(name)) {\n        this._setObjectToTarget(target, name, isDefine);\n        return;\n      }\n\n      // The configuration name should be split into parts if it has dots. E.g. `resize.width` -> [`resize`, `width`].\n      var parts = name.split('.');\n\n      // Take the name of the configuration out of the parts. E.g. `resize.width` -> `width`.\n      name = parts.pop();\n\n      // Iterate over parts to check if currently stored configuration has proper structure.\n      var _iterator = _createForOfIteratorHelper(parts),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var part = _step.value;\n          // If there is no object for specified part then create one.\n          if (!isPlainObject(target[part])) {\n            target[part] = {};\n          }\n\n          // Nested object becomes a target.\n          target = target[part];\n        }\n\n        // In case of value is an object.\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      if (isPlainObject(value)) {\n        // We take care of proper config structure.\n        if (!isPlainObject(target[name])) {\n          target[name] = {};\n        }\n        target = target[name];\n\n        // And iterate through this object calling `_setToTarget` again for each property.\n        this._setObjectToTarget(target, value, isDefine);\n        return;\n      }\n\n      // Do nothing if we are defining configuration for non empty name.\n      if (isDefine && typeof target[name] != 'undefined') {\n        return;\n      }\n      target[name] = value;\n    }\n\n    /**\n     * Get specified configuration from specified source (nested object).\n     *\n     * @private\n     * @param {Object} source level of nested object.\n     * @param {String} name The configuration name. Configuration names are case-sensitive.\n     * @returns {*} The configuration value or `undefined` if the configuration entry was not found.\n     */\n  }, {\n    key: \"_getFromSource\",\n    value: function _getFromSource(source, name) {\n      // The configuration name should be split into parts if it has dots. E.g. `resize.width` -> [`resize`, `width`].\n      var parts = name.split('.');\n\n      // Take the name of the configuration out of the parts. E.g. `resize.width` -> `width`.\n      name = parts.pop();\n\n      // Iterate over parts to check if currently stored configuration has proper structure.\n      var _iterator2 = _createForOfIteratorHelper(parts),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var part = _step2.value;\n          if (!isPlainObject(source[part])) {\n            source = null;\n            break;\n          }\n\n          // Nested object becomes a source.\n          source = source[part];\n        }\n\n        // Always returns undefined for non existing configuration.\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      return source ? cloneConfig(source[name]) : undefined;\n    }\n\n    /**\n     * Iterates through passed object and calls {@link #_setToTarget} method with object key and value for each property.\n     *\n     * @private\n     * @param {Object} target Nested config object.\n     * @param {Object} configuration Configuration data set\n     * @param {Boolean} [isDefine] Defines if passed configuration is default configuration or not.\n     */\n  }, {\n    key: \"_setObjectToTarget\",\n    value: function _setObjectToTarget(target, configuration, isDefine) {\n      var _this = this;\n      Object.keys(configuration).forEach(function (key) {\n        _this._setToTarget(target, key, configuration[key], isDefine);\n      });\n    }\n  }]);\n}(); // Clones configuration object or value.\n// @param {*} source Source configuration\n// @returns {*} Cloned configuration value.\nexport { Config as default };\nfunction cloneConfig(source) {\n  return cloneDeepWith(source, leaveDOMReferences);\n}\n\n// A customizer function for cloneDeepWith.\n// It will leave references to DOM Elements instead of cloning them.\n//\n// @param {*} value\n// @returns {Element|undefined}\nfunction leaveDOMReferences(value) {\n  return isElement(value) ? value : undefined;\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/count\n */\n\n/**\n * Returns the number of items return by the iterator.\n *\n *\t\tcount( [ 1, 2, 3, 4, 5 ] ); // 5;\n *\n * @param {Iterable.<*>} iterator Any iterator.\n * @returns {Number} Number of items returned by that iterator.\n */\nexport default function count(iterator) {\n  var count = 0;\n  var _iterator = _createForOfIteratorHelper(iterator),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var _ = _step.value;\n      // eslint-disable-line no-unused-vars\n      count++;\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  return count;\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.slice.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/diff\n */\n\nimport fastDiff from '../src/fastdiff';\n\n// The following code is based on the \"O(NP) Sequence Comparison Algorithm\"\n// by Sun Wu, Udi Manber, Gene Myers, Webb Miller.\n\n/**\n * Calculates the difference between two arrays or strings producing an array containing a list of changes\n * necessary to transform input into output.\n *\n *\t\tdiff( 'aba', 'acca' ); // [ 'equal', 'insert', 'insert', 'delete', 'equal' ]\n *\n * This function is based on the \"O(NP) Sequence Comparison Algorithm\" by Sun Wu, Udi Manber, Gene Myers, Webb Miller.\n * Unfortunately, while it gives the most precise results, its to complex for longer strings/arrow (above 200 items).\n * Therefore, `diff()` automatically switches to {@link module:utils/fastdiff~fastDiff `fastDiff()`} when detecting\n * such a scenario. The return formats of both functions are identical.\n *\n * @param {Array|String} a Input array or string.\n * @param {Array|String} b Output array or string.\n * @param {Function} [cmp] Optional function used to compare array values, by default === is used.\n * @returns {Array} Array of changes.\n */\nexport default function diff(a, b, cmp) {\n  // Set the comparator function.\n  cmp = cmp || function (a, b) {\n    return a === b;\n  };\n  var aLength = a.length;\n  var bLength = b.length;\n\n  // Perform `fastDiff` for longer strings/arrays (see #269).\n  if (aLength > 200 || bLength > 200 || aLength + bLength > 300) {\n    return diff.fastDiff(a, b, cmp, true);\n  }\n\n  // Temporary action type statics.\n  var _insert, _delete;\n\n  // Swapped the arrays to use the shorter one as the first one.\n  if (bLength < aLength) {\n    var tmp = a;\n    a = b;\n    b = tmp;\n\n    // We swap the action types as well.\n    _insert = 'delete';\n    _delete = 'insert';\n  } else {\n    _insert = 'insert';\n    _delete = 'delete';\n  }\n  var m = a.length;\n  var n = b.length;\n  var delta = n - m;\n\n  // Edit scripts, for each diagonal.\n  var es = {};\n  // Furthest points, the furthest y we can get on each diagonal.\n  var fp = {};\n  function snake(k) {\n    // We use -1 as an alternative below to handle initial values ( instead of filling the fp with -1 first ).\n    // Furthest points (y) on the diagonal below k.\n    var y1 = (fp[k - 1] !== undefined ? fp[k - 1] : -1) + 1;\n    // Furthest points (y) on the diagonal above k.\n    var y2 = fp[k + 1] !== undefined ? fp[k + 1] : -1;\n    // The way we should go to get further.\n    var dir = y1 > y2 ? -1 : 1;\n\n    // Clone previous changes array (if any).\n    if (es[k + dir]) {\n      es[k] = es[k + dir].slice(0);\n    }\n\n    // Create changes array.\n    if (!es[k]) {\n      es[k] = [];\n    }\n\n    // Push the action.\n    es[k].push(y1 > y2 ? _insert : _delete);\n\n    // Set the beginning coordinates.\n    var y = Math.max(y1, y2);\n    var x = y - k;\n\n    // Traverse the diagonal as long as the values match.\n    while (x < m && y < n && cmp(a[x], b[y])) {\n      x++;\n      y++;\n      // Push no change action.\n      es[k].push('equal');\n    }\n    return y;\n  }\n  var p = 0;\n  var k;\n\n  // Traverse the graph until we reach the end of the longer string.\n  do {\n    // Updates furthest points and edit scripts for diagonals below delta.\n    for (k = -p; k < delta; k++) {\n      fp[k] = snake(k);\n    }\n\n    // Updates furthest points and edit scripts for diagonals above delta.\n    for (k = delta + p; k > delta; k--) {\n      fp[k] = snake(k);\n    }\n\n    // Updates furthest point and edit script for the delta diagonal.\n    // note that the delta diagonal is the one which goes through the sink (m, n).\n    fp[delta] = snake(delta);\n    p++;\n  } while (fp[delta] !== n);\n\n  // Return the final list of edit changes.\n  // We remove the first item that represents the action for the injected nulls.\n  return es[delta].slice(1);\n}\n\n// Store the API in static property to easily overwrite it in tests.\n// Too bad dependency injection does not work in Webpack + ES 6 (const) + Babel.\ndiff.fastDiff = fastDiff;","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/difftochanges\n */\n\n/**\n * Creates a set of changes which need to be applied to the input in order to transform\n * it into the output. This function can be used with strings or arrays.\n *\n *\t\tconst input = Array.from( 'abc' );\n *\t\tconst output = Array.from( 'xaby' );\n *\t\tconst changes = diffToChanges( diff( input, output ), output );\n *\n *\t\tchanges.forEach( change => {\n *\t\t\tif ( change.type == 'insert' ) {\n *\t\t\t\tinput.splice( change.index, 0, ...change.values );\n *\t\t\t} else if ( change.type == 'delete' ) {\n *\t\t\t\tinput.splice( change.index, change.howMany );\n *\t\t\t}\n *\t\t} );\n *\n *\t\tinput.join( '' ) == output.join( '' ); // -> true\n *\n * @param {Array.<'equal'|'insert'|'delete'>} diff Result of {@link module:utils/diff~diff}.\n * @param {String|Array} output The string or array which was passed as diff's output.\n * @returns {Array.<Object>} Set of changes (insert or delete) which need to be applied to the input\n * in order to transform it into the output.\n */\nexport default function diffToChanges(diff, output) {\n  var changes = [];\n  var index = 0;\n  var lastOperation;\n  diff.forEach(function (change) {\n    if (change == 'equal') {\n      pushLast();\n      index++;\n    } else if (change == 'insert') {\n      if (isContinuationOf('insert')) {\n        lastOperation.values.push(output[index]);\n      } else {\n        pushLast();\n        lastOperation = {\n          type: 'insert',\n          index: index,\n          values: [output[index]]\n        };\n      }\n      index++;\n    } else /* if ( change == 'delete' ) */{\n        if (isContinuationOf('delete')) {\n          lastOperation.howMany++;\n        } else {\n          pushLast();\n          lastOperation = {\n            type: 'delete',\n            index: index,\n            howMany: 1\n          };\n        }\n      }\n  });\n  pushLast();\n  return changes;\n  function pushLast() {\n    if (lastOperation) {\n      changes.push(lastOperation);\n      lastOperation = null;\n    }\n  }\n  function isContinuationOf(expected) {\n    return lastOperation && lastOperation.type == expected;\n  }\n}","import _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport \"core-js/modules/es.array.concat.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/emittermixin\n */\n\nimport { default as EmitterMixin, _getEmitterListenedTo, _setEmitterId } from '../emittermixin';\nimport uid from '../uid';\nimport isNode from './isnode';\nimport isWindow from './iswindow';\nimport { extend } from 'lodash-es';\n\n/**\n * Mixin that injects the DOM events API into its host. It provides the API\n * compatible with {@link module:utils/emittermixin~EmitterMixin}.\n *\n * DOM emitter mixin is by default available in the {@link module:ui/view~View} class,\n * but it can also be mixed into any other class:\n *\n *\t\timport mix from '../utils/mix.js';\n *\t\timport DomEmitterMixin from '../utils/dom/emittermixin.js';\n *\n *\t\tclass SomeView {}\n *\t\tmix( SomeView, DomEmitterMixin );\n *\n *\t\tconst view = new SomeView();\n *\t\tview.listenTo( domElement, ( evt, domEvt ) => {\n *\t\t\tconsole.log( evt, domEvt );\n *\t\t} );\n *\n * @mixin EmitterMixin\n * @mixes module:utils/emittermixin~EmitterMixin\n * @implements module:utils/dom/emittermixin~Emitter\n */\nvar DomEmitterMixin = extend({}, EmitterMixin, {\n  /**\n   * Registers a callback function to be executed when an event is fired in a specific Emitter or DOM Node.\n   * It is backwards compatible with {@link module:utils/emittermixin~EmitterMixin#listenTo}.\n   *\n   * @param {module:utils/emittermixin~Emitter|Node} emitter The object that fires the event.\n   * @param {String} event The name of the event.\n   * @param {Function} callback The function to be called on event.\n   * @param {Object} [options={}] Additional options.\n   * @param {module:utils/priorities~PriorityString|Number} [options.priority='normal'] The priority of this event callback. The higher\n   * the priority value the sooner the callback will be fired. Events having the same priority are called in the\n   * order they were added.\n   * @param {Boolean} [options.useCapture=false] Indicates that events of this type will be dispatched to the registered\n   * listener before being dispatched to any EventTarget beneath it in the DOM tree.\n   */\n  listenTo: function listenTo(emitter) {\n    var _EmitterMixin$listenT;\n    for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      rest[_key - 1] = arguments[_key];\n    }\n    // Check if emitter is an instance of DOM Node. If so, replace the argument with\n    // corresponding ProxyEmitter (or create one if not existing).\n    if (isNode(emitter) || isWindow(emitter)) {\n      var proxy = this._getProxyEmitter(emitter) || new ProxyEmitter(emitter);\n      proxy.attach.apply(proxy, rest);\n      emitter = proxy;\n    }\n\n    // Execute parent class method with Emitter (or ProxyEmitter) instance.\n    (_EmitterMixin$listenT = EmitterMixin.listenTo).call.apply(_EmitterMixin$listenT, [this, emitter].concat(rest));\n  },\n  /**\n   * Stops listening for events. It can be used at different levels:\n   * It is backwards compatible with {@link module:utils/emittermixin~EmitterMixin#listenTo}.\n   *\n   * * To stop listening to a specific callback.\n   * * To stop listening to a specific event.\n   * * To stop listening to all events fired by a specific object.\n   * * To stop listening to all events fired by all object.\n   *\n   * @param {module:utils/emittermixin~Emitter|Node} [emitter] The object to stop listening to. If omitted, stops it for all objects.\n   * @param {String} [event] (Requires the `emitter`) The name of the event to stop listening to. If omitted, stops it\n   * for all events from `emitter`.\n   * @param {Function} [callback] (Requires the `event`) The function to be removed from the call list for the given\n   * `event`.\n   */\n  stopListening: function stopListening(emitter, event, callback) {\n    // Check if emitter is an instance of DOM Node. If so, replace the argument with corresponding ProxyEmitter.\n    if (isNode(emitter) || isWindow(emitter)) {\n      var proxy = this._getProxyEmitter(emitter);\n\n      // Element has no listeners.\n      if (!proxy) {\n        return;\n      }\n      emitter = proxy;\n    }\n\n    // Execute parent class method with Emitter (or ProxyEmitter) instance.\n    EmitterMixin.stopListening.call(this, emitter, event, callback);\n    if (emitter instanceof ProxyEmitter) {\n      emitter.detach(event);\n    }\n  },\n  /**\n   * Retrieves ProxyEmitter instance for given DOM Node residing in this Host.\n   *\n   * @pivate\n   * @param {Node} node DOM Node of the ProxyEmitter.\n   * @returns {module:utils/dom/emittermixin~ProxyEmitter} ProxyEmitter instance or null.\n   */\n  _getProxyEmitter: function _getProxyEmitter(node) {\n    return _getEmitterListenedTo(this, getNodeUID(node));\n  }\n});\nexport default DomEmitterMixin;\n\n/**\n * Creates a ProxyEmitter instance. Such an instance is a bridge between a DOM Node firing events\n * and any Host listening to them. It is backwards compatible with {@link module:utils/emittermixin~EmitterMixin#on}.\n *\n *                                  listenTo( click, ... )\n *                    +-----------------------------------------+\n *                    |              stopListening( ... )       |\n *     +----------------------------+                           |             addEventListener( click, ... )\n *     | Host                       |                           |   +---------------------------------------------+\n *     +----------------------------+                           |   |       removeEventListener( click, ... )     |\n *     | _listeningTo: {            |                +----------v-------------+                                   |\n *     |   UID: {                   |                | ProxyEmitter           |                                   |\n *     |     emitter: ProxyEmitter, |                +------------------------+                      +------------v----------+\n *     |     callbacks: {           |                | events: {              |                      | Node (HTMLElement)    |\n *     |       click: [ callbacks ] |                |   click: [ callbacks ] |                      +-----------------------+\n *     |     }                      |                | },                     |                      | data-ck-expando: UID  |\n *     |   }                        |                | _domNode: Node,        |                      +-----------------------+\n *     | }                          |                | _domListeners: {},     |                                   |\n *     | +------------------------+ |                | _emitterId: UID        |                                   |\n *     | | DomEmitterMixin        | |                +--------------^---------+                                   |\n *     | +------------------------+ |                           |   |                                             |\n *     +--------------^-------------+                           |   +---------------------------------------------+\n *                    |                                         |                  click (DOM Event)\n *                    +-----------------------------------------+\n *                                fire( click, DOM Event )\n *\n * @mixes module:utils/emittermixin~EmitterMixin\n * @implements module:utils/dom/emittermixin~Emitter\n * @private\n */\nvar ProxyEmitter = /*#__PURE__*/_createClass(\n/**\n * @param {Node} node DOM Node that fires events.\n * @returns {Object} ProxyEmitter instance bound to the DOM Node.\n */\nfunction ProxyEmitter(node) {\n  _classCallCheck(this, ProxyEmitter);\n  // Set emitter ID to match DOM Node \"expando\" property.\n  _setEmitterId(this, getNodeUID(node));\n\n  // Remember the DOM Node this ProxyEmitter is bound to.\n  this._domNode = node;\n});\nextend(ProxyEmitter.prototype, EmitterMixin, {\n  /**\n   * Collection of native DOM listeners.\n   *\n   * @private\n   * @member {Object} module:utils/dom/emittermixin~ProxyEmitter#_domListeners\n   */\n  /**\n   * Registers a callback function to be executed when an event is fired.\n   *\n   * It attaches a native DOM listener to the DOM Node. When fired,\n   * a corresponding Emitter event will also fire with DOM Event object as an argument.\n   *\n   * @method module:utils/dom/emittermixin~ProxyEmitter#attach\n   * @param {String} event The name of the event.\n   * @param {Function} callback The function to be called on event.\n   * @param {Object} [options={}] Additional options.\n   * @param {Boolean} [options.useCapture=false] Indicates that events of this type will be dispatched to the registered\n   * listener before being dispatched to any EventTarget beneath it in the DOM tree.\n   */\n  attach: function attach(event, callback) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    // If the DOM Listener for given event already exist it is pointless\n    // to attach another one.\n    if (this._domListeners && this._domListeners[event]) {\n      return;\n    }\n    var domListener = this._createDomListener(event, !!options.useCapture);\n\n    // Attach the native DOM listener to DOM Node.\n    this._domNode.addEventListener(event, domListener, !!options.useCapture);\n    if (!this._domListeners) {\n      this._domListeners = {};\n    }\n\n    // Store the native DOM listener in this ProxyEmitter. It will be helpful\n    // when stopping listening to the event.\n    this._domListeners[event] = domListener;\n  },\n  /**\n   * Stops executing the callback on the given event.\n   *\n   * @method module:utils/dom/emittermixin~ProxyEmitter#detach\n   * @param {String} event The name of the event.\n   */\n  detach: function detach(event) {\n    var events;\n\n    // Remove native DOM listeners which are orphans. If no callbacks\n    // are awaiting given event, detach native DOM listener from DOM Node.\n    // See: {@link attach}.\n\n    if (this._domListeners[event] && (!(events = this._events[event]) || !events.callbacks.length)) {\n      this._domListeners[event].removeListener();\n    }\n  },\n  /**\n   * Creates a native DOM listener callback. When the native DOM event\n   * is fired it will fire corresponding event on this ProxyEmitter.\n   * Note: A native DOM Event is passed as an argument.\n   *\n   * @private\n   * @method module:utils/dom/emittermixin~ProxyEmitter#_createDomListener\n   * @param {String} event The name of the event.\n   * @param {Boolean} useCapture Indicates whether the listener was created for capturing event.\n   * @returns {Function} The DOM listener callback.\n   */\n  _createDomListener: function _createDomListener(event, useCapture) {\n    var _this = this;\n    var domListener = function domListener(domEvt) {\n      _this.fire(event, domEvt);\n    };\n\n    // Supply the DOM listener callback with a function that will help\n    // detach it from the DOM Node, when it is no longer necessary.\n    // See: {@link detach}.\n    domListener.removeListener = function () {\n      _this._domNode.removeEventListener(event, domListener, useCapture);\n      delete _this._domListeners[event];\n    };\n    return domListener;\n  }\n});\n\n// Gets an unique DOM Node identifier. The identifier will be set if not defined.\n//\n// @private\n// @param {Node} node\n// @returns {String} UID for given DOM Node.\nfunction getNodeUID(node) {\n  return node['data-ck-expando'] || (node['data-ck-expando'] = uid());\n}\n\n/**\n * Interface representing classes which mix in {@link module:utils/dom/emittermixin~EmitterMixin}.\n *\n * @interface Emitter\n */","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* globals Node */\n\n/**\n * @module utils/dom/getancestors\n */\n\n/**\n * Returns all ancestors of given DOM node, starting from the top-most (root). Includes the given node itself. If the\n * node is a part of `DocumentFragment` that `DocumentFragment` will be returned. In contrary, if the node is\n * appended to a `Document`, that `Document` will not be returned (algorithms operating on DOM tree care for `Document#documentElement`\n * at most, which will be returned).\n *\n * @param {Node} node DOM node.\n * @returns {Array.<Node|DocumentFragment>} Array of given `node` parents.\n */\nexport default function getAncestors(node) {\n  var nodes = [];\n\n  // We are interested in `Node`s `DocumentFragment`s only.\n  while (node && node.nodeType != Node.DOCUMENT_NODE) {\n    nodes.unshift(node);\n    node = node.parentNode;\n  }\n  return nodes;\n}","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/getborderwidths\n */\n\n/**\n * Returns an object containing CSS border widths of a specified HTML element.\n *\n * @param {HTMLElement} element An element which has CSS borders.\n * @returns {Object} An object containing `top`, `left`, `right` and `bottom` properties\n * with numerical values of the `border-[top,left,right,bottom]-width` CSS styles.\n */\nexport default function getBorderWidths(element) {\n  // Call getComputedStyle on the window the element document belongs to.\n  var style = element.ownerDocument.defaultView.getComputedStyle(element);\n  return {\n    top: parseInt(style.borderTopWidth, 10),\n    right: parseInt(style.borderRightWidth, 10),\n    bottom: parseInt(style.borderBottomWidth, 10),\n    left: parseInt(style.borderLeftWidth, 10)\n  };\n}","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/getcommonancestor\n */\n\nimport getAncestors from './getancestors';\n\n/**\n * Searches and returns the lowest common ancestor of two given nodes.\n *\n * @param {Node} nodeA First node.\n * @param {Node} nodeB Second node.\n * @returns {Node|DocumentFragment|Document|null} Lowest common ancestor of both nodes or `null` if nodes do not have a common ancestor.\n */\nexport default function getCommonAncestor(nodeA, nodeB) {\n  var ancestorsA = getAncestors(nodeA);\n  var ancestorsB = getAncestors(nodeB);\n  var i = 0;\n\n  // It does not matter which array is shorter.\n  while (ancestorsA[i] == ancestorsB[i] && ancestorsA[i]) {\n    i++;\n  }\n  return i === 0 ? null : ancestorsA[i - 1];\n}","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* globals HTMLTextAreaElement */\n\n/**\n * @module utils/dom/getdatafromelement\n */\n\n/**\n * Gets data from a given source element.\n *\n * @param {HTMLElement} el The element from which the data will be retrieved.\n * @returns {String} The data string.\n */\nexport default function getDataFromElement(el) {\n  if (el instanceof HTMLTextAreaElement) {\n    return el.value;\n  }\n  return el.innerHTML;\n}","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/getpositionedancestor\n */\n\nimport global from './global';\n\n/**\n * For a given element, returns the nearest ancestor element which CSS position is not \"static\".\n *\n * @param {HTMLElement} element The native DOM element to be checked.\n * @returns {HTMLElement|null}\n */\nexport default function getPositionedAncestor(element) {\n  while (element && element.tagName.toLowerCase() != 'html') {\n    if (global.window.getComputedStyle(element).position != 'static') {\n      return element;\n    }\n    element = element.parentElement;\n  }\n  return null;\n}","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/getresizeobserver\n */\n\n/* globals setTimeout, clearTimeout */\n\nimport mix from '../mix';\nimport global from './global';\nimport Rect from './rect';\nimport DomEmitterMixin from './emittermixin';\nvar RESIZE_CHECK_INTERVAL = 100;\n\n/**\n * Returns an instance of [`ResizeObserver`](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver).\n * In browsers that support the `ResizeObserver` API, the native observer instance is returned.\n * In other browsers, a polyfilled instance is returned instead with a compatible API.\n *\n * [Learn more](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver) about the native API.\n *\n * @param {Function} callback A function called when any observed element was resized. Refer to the\n * native [`ResizeObserver`](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver) API to\n * learn more.\n * @returns {module:utils/dom/getresizeobserver~ResizeObserver} An observer instance.\n */\nexport default function getResizeObserver(callback) {\n  // TODO: One day, the `ResizeObserver` API will be supported in all modern web browsers.\n  // When it happens, this module will no longer make sense and should be removed and\n  // the native implementation should be used across the project to save bytes.\n  // Check out https://caniuse.com/#feat=resizeobserver.\n  if (typeof global.window.ResizeObserver === 'function') {\n    return new global.window.ResizeObserver(callback);\n  } else {\n    return new ResizeObserverPolyfill(callback);\n  }\n}\n\n/**\n * A polyfill class for the native [`ResizeObserver`](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver).\n *\n * @private\n * @mixes module:utils/domemittermixin~DomEmitterMixin\n */\nvar ResizeObserverPolyfill = /*#__PURE__*/function () {\n  /**\n   * Creates an instance of the {@link module:utils/dom/getresizeobserver~ResizeObserverPolyfill} class.\n   *\n   * It synchronously reacts to resize of the window to check if observed elements' geometry changed.\n   *\n   * Additionally, the polyfilled observer uses a timeout to check if observed elements' geometry has changed\n   * in some other way (dynamic layouts, scrollbars showing up, etc.), so its response can also be asynchronous.\n   *\n   * @param {Function} callback A function called when any observed element was resized. Refer to the\n   * native [`ResizeObserver`](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver) API to\n   * learn more.\n   */\n  function ResizeObserverPolyfill(callback) {\n    _classCallCheck(this, ResizeObserverPolyfill);\n    /**\n     * A function called when any observed {@link #_elements element} was resized.\n     *\n     * @readonly\n     * @protected\n     * @member {Function}\n     */\n    this._callback = callback;\n\n    /**\n     * DOM elements currently observed by the observer instance.\n     *\n     * @readonly\n     * @protected\n     * @member {Set}\n     */\n    this._elements = new Set();\n\n    /**\n     * Cached DOM {@link #_elements elements} bounding rects to compare to upon the next check.\n     *\n     * @readonly\n     * @protected\n     * @member {Map.<HTMLElement,module:utils/dom/rect~Rect>}\n     */\n    this._previousRects = new Map();\n\n    /**\n     * An UID of the current timeout upon which the observed elements rects\n     * will be compared to the {@link #_previousRects previous rects} from the past.\n     *\n     * @readonly\n     * @protected\n     * @member {Map.<HTMLElement,module:utils/dom/rect~Rect>}\n     */\n    this._periodicCheckTimeout = null;\n  }\n\n  /**\n   * Starts observing a DOM element.\n   *\n   * Learn more in the\n   * [native method documentation](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/observe).\n   *\n   * @param {HTMLElement} element\n   */\n  return _createClass(ResizeObserverPolyfill, [{\n    key: \"observe\",\n    value: function observe(element) {\n      this._elements.add(element);\n      if (this._elements.size === 1) {\n        this._startPeriodicCheck();\n      }\n    }\n\n    /**\n     * Stops observing a DOM element.\n     *\n     * Learn more in the\n     * [native method documentation](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/unobserve).\n     *\n     * @param {HTMLElement} element\n     */\n  }, {\n    key: \"unobserve\",\n    value: function unobserve(element) {\n      this._elements.delete(element);\n      this._previousRects.delete(element);\n      if (!this._elements.size) {\n        this._stopPeriodicCheck();\n      }\n    }\n\n    /**\n     * Stops observing all observed DOM elements.\n     *\n     * Learn more in the\n     * [native method documentation](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/disconnect).\n     *\n     * @param {HTMLElement} element\n     */\n  }, {\n    key: \"disconnect\",\n    value: function disconnect() {\n      var _this = this;\n      this._elements.forEach(function (element) {\n        return _this.unobserve(element);\n      });\n    }\n\n    /**\n     * When called, the observer calls the {@link #_callback resize callback} for all observed\n     * {@link #_elements elements} but also starts checking periodically for changes in the elements' geometry.\n     * If some are detected, {@link #_callback resize callback} is called for relevant elements that were resized.\n     *\n     * @protected\n     */\n  }, {\n    key: \"_startPeriodicCheck\",\n    value: function _startPeriodicCheck() {\n      var _this2 = this;\n      var _periodicCheck = function periodicCheck() {\n        _this2._checkElementRectsAndExecuteCallback();\n        _this2._periodicCheckTimeout = setTimeout(_periodicCheck, RESIZE_CHECK_INTERVAL);\n      };\n      this.listenTo(global.window, 'resize', function () {\n        _this2._checkElementRectsAndExecuteCallback();\n      });\n      _periodicCheck();\n    }\n\n    /**\n     * Stops checking for changes in all observed {@link #_elements elements} geometry.\n     *\n     * @protected\n     */\n  }, {\n    key: \"_stopPeriodicCheck\",\n    value: function _stopPeriodicCheck() {\n      clearTimeout(this._periodicCheckTimeout);\n      this.stopListening();\n      this._previousRects.clear();\n    }\n\n    /**\n     * Checks if the geometry of any of the {@link #_elements element} has changed. If so, executes\n     * the {@link #_callback resize callback} with element geometry data.\n     *\n     * @protected\n     */\n  }, {\n    key: \"_checkElementRectsAndExecuteCallback\",\n    value: function _checkElementRectsAndExecuteCallback() {\n      var entries = [];\n      var _iterator = _createForOfIteratorHelper(this._elements),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var element = _step.value;\n          if (this._hasRectChanged(element)) {\n            entries.push({\n              target: element,\n              contentRect: this._previousRects.get(element)\n            });\n          }\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      if (entries.length) {\n        this._callback(entries);\n      }\n    }\n\n    /**\n     * Compares the DOM element geometry to the {@link #_previousRects cached geometry} from the past.\n     * Returns `true` if geometry has changed or the element is checked for the first time.\n     *\n     * @protected\n     * @param {HTMLElement} element\n     * @returns {Boolean}\n     */\n  }, {\n    key: \"_hasRectChanged\",\n    value: function _hasRectChanged(element) {\n      if (!element.ownerDocument.body.contains(element)) {\n        return false;\n      }\n      var currentRect = new Rect(element);\n      var previousRect = this._previousRects.get(element);\n\n      // The first check should always yield true despite no Previous rect to compare to.\n      // The native ResizeObserver does that and... that makes sense. Sort of.\n      var hasChanged = !previousRect || !previousRect.isEqual(currentRect);\n      this._previousRects.set(element, currentRect);\n      return hasChanged;\n    }\n  }]);\n}();\nmix(ResizeObserverPolyfill, DomEmitterMixin);\n\n/**\n * A resize observer object (either native or {@link module:utils/dom/getresizeobserver~getResizeObserver polyfilled})\n * offering the [`ResizeObserver`](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver) API.\n *\n * @typedef {Function} module:utils/dom/getresizeobserver~ResizeObserver\n */","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* globals window, document */\n\n/**\n * @module utils/dom/global\n */\n\n/**\n * A helper (module) giving an access to the global DOM objects such as `window` and\n * `document`. Accessing these objects using this helper allows easy and bulletproof\n * testing, i.e. stubbing native properties:\n *\n *\t\timport global from 'ckeditor5/utils/dom/global.js';\n *\n *\t\t// This stub will work for any code using global module.\n *\t\ttestUtils.sinon.stub( global, 'window', {\n *\t\t\tinnerWidth: 10000\n *\t\t} );\n *\n *\t\tconsole.log( global.window.innerWidth );\n */\nexport default {\n  window: window,\n  document: document\n};","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/indexof\n */\n\n/**\n * Returns index of the node in the parent element.\n *\n * @param {Node} node Node which index is tested.\n * @returns {Number} Index of the node in the parent element. Returns 0 if node has no parent.\n */\nexport default function indexOf(node) {\n  var index = 0;\n  while (node.previousSibling) {\n    node = node.previousSibling;\n    index++;\n  }\n  return index;\n}","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/insertat\n */\n\n/**\n * Inserts node to the parent at given index.\n *\n * @param {Element} parentElement Parent element.\n * @param {Number} index Insertions index.\n * @param {Node} nodeToInsert Node to insert.\n */\nexport default function insertAt(parentElement, index, nodeToInsert) {\n  parentElement.insertBefore(nodeToInsert, parentElement.childNodes[index] || null);\n}","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/isnode\n */\n\n/**\n * Checks if the object is a native DOM Node.\n *\n * @param {*} obj\n * @returns {Boolean}\n */\nexport default function isNode(obj) {\n  if (obj) {\n    if (obj.defaultView) {\n      return obj instanceof obj.defaultView.Document;\n    } else if (obj.ownerDocument && obj.ownerDocument.defaultView) {\n      return obj instanceof obj.ownerDocument.defaultView.Node;\n    }\n  }\n  return false;\n}","import \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/isrange\n */\n\n/**\n * Checks if the object is a native DOM Range.\n *\n * @param {*} obj\n * @returns {Boolean}\n */\nexport default function isRange(obj) {\n  return Object.prototype.toString.apply(obj) == '[object Range]';\n}","import \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/istext\n */\n\n/**\n * Checks if the object is a native DOM Text node.\n *\n * @param {*} obj\n * @returns {Boolean}\n */\nexport default function isText(obj) {\n  return Object.prototype.toString.call(obj) == '[object Text]';\n}","import \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/iswindow\n */\n\n/**\n * Checks if the object is a native DOM Window.\n *\n * @param {*} obj\n * @returns {Boolean}\n */\nexport default function isWindow(obj) {\n  var stringifiedObject = Object.prototype.toString.apply(obj);\n\n  // Returns `true` for the `window` object in browser environments.\n  if (stringifiedObject == '[object Window]') {\n    return true;\n  }\n\n  // Returns `true` for the `window` object in the Electron environment.\n  if (stringifiedObject == '[object global]') {\n    return true;\n  }\n  return false;\n}","import _slicedToArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.object.to-string.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/position\n */\n\nimport global from './global';\nimport Rect from './rect';\nimport getPositionedAncestor from './getpositionedancestor';\nimport getBorderWidths from './getborderwidths';\nimport { isFunction } from 'lodash-es';\n\n/**\n * Calculates the `position: absolute` coordinates of a given element so it can be positioned with respect to the\n * target in the visually most efficient way, taking various restrictions like viewport or limiter geometry\n * into consideration.\n *\n *\t\t// The element which is to be positioned.\n *\t\tconst element = document.body.querySelector( '#toolbar' );\n *\n *\t\t// A target to which the element is positioned relatively.\n *\t\tconst target = document.body.querySelector( '#container' );\n *\n *\t\t// Finding the optimal coordinates for the positioning.\n *\t\tconst { left, top, name } = getOptimalPosition( {\n *\t\t\telement: element,\n *\t\t\ttarget: target,\n *\n * \t\t\t// The algorithm will chose among these positions to meet the requirements such\n * \t\t\t// as \"limiter\" element or \"fitInViewport\", set below. The positions are considered\n * \t\t\t// in the order of the array.\n *\t\t\tpositions: [\n *\t\t\t\t//\n *\t\t\t \t//\t[ Target ]\n *\t\t\t\t//\t+-----------------+\n *\t\t\t\t//\t|     Element     |\n *\t\t\t\t//\t+-----------------+\n *\t\t\t\t//\n *\t\t\t\ttargetRect => ( {\n *\t\t\t\t\ttop: targetRect.bottom,\n *\t\t\t\t\tleft: targetRect.left,\n *\t\t\t\t\tname: 'mySouthEastPosition'\n *\t\t\t\t} ),\n *\n *\t\t\t\t//\n *\t\t\t\t//\t+-----------------+\n *\t\t\t\t//\t|     Element     |\n *\t\t\t\t//\t+-----------------+\n *\t\t\t\t//\t[ Target ]\n *\t\t\t\t//\n *\t\t\t\t( targetRect, elementRect ) => ( {\n *\t\t\t\t\ttop: targetRect.top - elementRect.height,\n *\t\t\t\t\tleft: targetRect.left,\n *\t\t\t\t\tname: 'myNorthEastPosition'\n *\t\t\t\t} )\n *\t\t\t],\n *\n *\t\t\t// Find a position such guarantees the element remains within visible boundaries of <body>.\n *\t\t\tlimiter: document.body,\n *\n *\t\t\t// Find a position such guarantees the element remains within visible boundaries of the browser viewport.\n *\t\t\tfitInViewport: true\n *\t\t} );\n *\n *\t\t// The best position which fits into document.body and the viewport. May be useful\n *\t\t// to set proper class on the `element`.\n *\t\tconsole.log( name ); // -> \"myNorthEastPosition\"\n *\n *\t\t// Using the absolute coordinates which has been found to position the element\n *\t\t// as in the diagram depicting the \"myNorthEastPosition\" position.\n *\t\telement.style.top = top;\n *\t\telement.style.left = left;\n *\n * @param {module:utils/dom/position~Options} options Positioning options object.\n * @returns {module:utils/dom/position~Position}\n */\nexport function getOptimalPosition(_ref) {\n  var element = _ref.element,\n    target = _ref.target,\n    positions = _ref.positions,\n    limiter = _ref.limiter,\n    fitInViewport = _ref.fitInViewport;\n  // If the {@link module:utils/dom/position~Options#target} is a function, use what it returns.\n  // https://github.com/ckeditor/ckeditor5-utils/issues/157\n  if (isFunction(target)) {\n    target = target();\n  }\n\n  // If the {@link module:utils/dom/position~Options#limiter} is a function, use what it returns.\n  // https://github.com/ckeditor/ckeditor5-ui/issues/260\n  if (isFunction(limiter)) {\n    limiter = limiter();\n  }\n  var positionedElementAncestor = getPositionedAncestor(element.parentElement);\n  var elementRect = new Rect(element);\n  var targetRect = new Rect(target);\n  var bestPosition;\n  var name;\n\n  // If there are no limits, just grab the very first position and be done with that drama.\n  if (!limiter && !fitInViewport) {\n    var _getPosition = getPosition(positions[0], targetRect, elementRect);\n    var _getPosition2 = _slicedToArray(_getPosition, 2);\n    name = _getPosition2[0];\n    bestPosition = _getPosition2[1];\n  } else {\n    var limiterRect = limiter && new Rect(limiter).getVisible();\n    var viewportRect = fitInViewport && new Rect(global.window);\n    var _ref2 = getBestPosition(positions, targetRect, elementRect, limiterRect, viewportRect) ||\n    // If there's no best position found, i.e. when all intersections have no area because\n    // rects have no width or height, then just use the first available position.\n    getPosition(positions[0], targetRect, elementRect);\n    var _ref3 = _slicedToArray(_ref2, 2);\n    name = _ref3[0];\n    bestPosition = _ref3[1];\n  }\n  var _getAbsoluteRectCoord = getAbsoluteRectCoordinates(bestPosition),\n    left = _getAbsoluteRectCoord.left,\n    top = _getAbsoluteRectCoord.top;\n  if (positionedElementAncestor) {\n    var ancestorPosition = getAbsoluteRectCoordinates(new Rect(positionedElementAncestor));\n    var ancestorBorderWidths = getBorderWidths(positionedElementAncestor);\n\n    // (https://github.com/ckeditor/ckeditor5-ui-default/issues/126)\n    // If there's some positioned ancestor of the panel, then its `Rect` must be taken into\n    // consideration. `Rect` is always relative to the viewport while `position: absolute` works\n    // with respect to that positioned ancestor.\n    left -= ancestorPosition.left;\n    top -= ancestorPosition.top;\n\n    // (https://github.com/ckeditor/ckeditor5-utils/issues/139)\n    // If there's some positioned ancestor of the panel, not only its position must be taken into\n    // consideration (see above) but also its internal scrolls. Scroll have an impact here because `Rect`\n    // is relative to the viewport (it doesn't care about scrolling), while `position: absolute`\n    // must compensate that scrolling.\n    left += positionedElementAncestor.scrollLeft;\n    top += positionedElementAncestor.scrollTop;\n\n    // (https://github.com/ckeditor/ckeditor5-utils/issues/139)\n    // If there's some positioned ancestor of the panel, then its `Rect` includes its CSS `borderWidth`\n    // while `position: absolute` positioning does not consider it.\n    // E.g. `{ position: absolute, top: 0, left: 0 }` means upper left corner of the element,\n    // not upper-left corner of its border.\n    left -= ancestorBorderWidths.left;\n    top -= ancestorBorderWidths.top;\n  }\n  return {\n    left: left,\n    top: top,\n    name: name\n  };\n}\n\n// For given position function, returns a corresponding `Rect` instance.\n//\n// @private\n// @param {Function} position A function returning {@link module:utils/dom/position~Position}.\n// @param {utils/dom/rect~Rect} targetRect A rect of the target.\n// @param {utils/dom/rect~Rect} elementRect A rect of positioned element.\n// @returns {Array} An array containing position name and its Rect.\nfunction getPosition(position, targetRect, elementRect) {\n  var _position = position(targetRect, elementRect),\n    left = _position.left,\n    top = _position.top,\n    name = _position.name;\n  return [name, elementRect.clone().moveTo(left, top)];\n}\n\n// For a given array of positioning functions, returns such that provides the best\n// fit of the `elementRect` into the `limiterRect` and `viewportRect`.\n//\n// @private\n// @param {module:utils/dom/position~Options#positions} positions Functions returning\n// {@link module:utils/dom/position~Position} to be checked, in the order of preference.\n// @param {utils/dom/rect~Rect} targetRect A rect of the {@link module:utils/dom/position~Options#target}.\n// @param {utils/dom/rect~Rect} elementRect A rect of positioned {@link module:utils/dom/position~Options#element}.\n// @param {utils/dom/rect~Rect} limiterRect A rect of the {@link module:utils/dom/position~Options#limiter}.\n// @param {utils/dom/rect~Rect} viewportRect A rect of the viewport.\n// @returns {Array} An array containing the name of the position and it's rect.\nfunction getBestPosition(positions, targetRect, elementRect, limiterRect, viewportRect) {\n  var maxLimiterIntersectArea = 0;\n  var maxViewportIntersectArea = 0;\n  var bestPositionRect;\n  var bestPositionName;\n\n  // This is when element is fully visible.\n  var elementRectArea = elementRect.getArea();\n  positions.some(function (position) {\n    var _getPosition3 = getPosition(position, targetRect, elementRect),\n      _getPosition4 = _slicedToArray(_getPosition3, 2),\n      positionName = _getPosition4[0],\n      positionRect = _getPosition4[1];\n    var limiterIntersectArea;\n    var viewportIntersectArea;\n    if (limiterRect) {\n      if (viewportRect) {\n        // Consider only the part of the limiter which is visible in the viewport. So the limiter is getting limited.\n        var limiterViewportIntersectRect = limiterRect.getIntersection(viewportRect);\n        if (limiterViewportIntersectRect) {\n          // If the limiter is within the viewport, then check the intersection between that part of the\n          // limiter and actual position.\n          limiterIntersectArea = limiterViewportIntersectRect.getIntersectionArea(positionRect);\n        } else {\n          limiterIntersectArea = 0;\n        }\n      } else {\n        limiterIntersectArea = limiterRect.getIntersectionArea(positionRect);\n      }\n    }\n    if (viewportRect) {\n      viewportIntersectArea = viewportRect.getIntersectionArea(positionRect);\n    }\n\n    // The only criterion: intersection with the viewport.\n    if (viewportRect && !limiterRect) {\n      if (viewportIntersectArea > maxViewportIntersectArea) {\n        setBestPosition();\n      }\n    }\n    // The only criterion: intersection with the limiter.\n    else if (!viewportRect && limiterRect) {\n      if (limiterIntersectArea > maxLimiterIntersectArea) {\n        setBestPosition();\n      }\n    }\n    // Two criteria: intersection with the viewport and the limiter visible in the viewport.\n    else {\n      if (viewportIntersectArea > maxViewportIntersectArea && limiterIntersectArea >= maxLimiterIntersectArea) {\n        setBestPosition();\n      } else if (viewportIntersectArea >= maxViewportIntersectArea && limiterIntersectArea > maxLimiterIntersectArea) {\n        setBestPosition();\n      }\n    }\n    function setBestPosition() {\n      maxViewportIntersectArea = viewportIntersectArea;\n      maxLimiterIntersectArea = limiterIntersectArea;\n      bestPositionRect = positionRect;\n      bestPositionName = positionName;\n    }\n\n    // If a such position is found that element is fully container by the limiter then, obviously,\n    // there will be no better one, so finishing.\n    return limiterIntersectArea === elementRectArea;\n  });\n  return bestPositionRect ? [bestPositionName, bestPositionRect] : null;\n}\n\n// DOMRect (also Rect) works in a scroll–independent geometry but `position: absolute` doesn't.\n// This function converts Rect to `position: absolute` coordinates.\n//\n// @private\n// @param {utils/dom/rect~Rect} rect A rect to be converted.\n// @returns {Object} Object containing `left` and `top` properties, in absolute coordinates.\nfunction getAbsoluteRectCoordinates(_ref4) {\n  var left = _ref4.left,\n    top = _ref4.top;\n  var _global$window = global.window,\n    scrollX = _global$window.scrollX,\n    scrollY = _global$window.scrollY;\n  return {\n    left: left + scrollX,\n    top: top + scrollY\n  };\n}\n\n/**\n * The `getOptimalPosition` helper options.\n *\n * @interface module:utils/dom/position~Options\n */\n\n/**\n * Element that is to be positioned.\n *\n * @member {HTMLElement} #element\n */\n\n/**\n * Target with respect to which the `element` is to be positioned.\n *\n * @member {HTMLElement|Range|ClientRect|Rect|Function} #target\n */\n\n/**\n * An array of functions which return {@link module:utils/dom/position~Position} relative\n * to the `target`, in the order of preference.\n *\n * @member {Array.<Function>} #positions\n */\n\n/**\n * When set, the algorithm will chose position which fits the most in the\n * limiter's bounding rect.\n *\n * @member {HTMLElement|Range|ClientRect|Rect|Function} #limiter\n */\n\n/**\n * When set, the algorithm will chose such a position which fits `element`\n * the most inside visible viewport.\n *\n * @member {Boolean} #fitInViewport\n */\n\n/**\n * An object describing a position in `position: absolute` coordinate\n * system, along with position name.\n *\n * @typedef {Object} module:utils/dom/position~Position\n *\n * @property {Number} top Top position offset.\n * @property {Number} left Left position offset.\n * @property {String} name Name of the position.\n */","import _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.string.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/rect\n */\n\nimport isRange from './isrange';\nimport isWindow from './iswindow';\nimport getBorderWidths from './getborderwidths';\nimport isText from './istext';\nimport { isElement } from 'lodash-es';\nvar rectProperties = ['top', 'right', 'bottom', 'left', 'width', 'height'];\n\n/**\n * A helper class representing a `ClientRect` object, e.g. value returned by\n * the native `object.getBoundingClientRect()` method. Provides a set of methods\n * to manipulate the rect and compare it against other rect instances.\n */\nvar Rect = /*#__PURE__*/function () {\n  /**\n   * Creates an instance of rect.\n   *\n   *\t\t// Rect of an HTMLElement.\n   *\t\tconst rectA = new Rect( document.body );\n   *\n   *\t\t// Rect of a DOM Range.\n   *\t\tconst rectB = new Rect( document.getSelection().getRangeAt( 0 ) );\n   *\n   *\t\t// Rect of a window (web browser viewport).\n   *\t\tconst rectC = new Rect( window );\n   *\n   *\t\t// Rect out of an object.\n   *\t\tconst rectD = new Rect( { top: 0, right: 10, bottom: 10, left: 0, width: 10, height: 10 } );\n   *\n   *\t\t// Rect out of another Rect instance.\n   *\t\tconst rectE = new Rect( rectD );\n   *\n   *\t\t// Rect out of a ClientRect.\n   *\t\tconst rectF = new Rect( document.body.getClientRects().item( 0 ) );\n   *\n   * **Note**: By default a rect of an HTML element includes its CSS borders and scrollbars (if any)\n   * ant the rect of a `window` includes scrollbars too. Use {@link #excludeScrollbarsAndBorders}\n   * to get the inner part of the rect.\n   *\n   * @param {HTMLElement|Range|Window|ClientRect|module:utils/dom/rect~Rect|Object} source A source object to create the rect.\n   */\n  function Rect(source) {\n    _classCallCheck(this, Rect);\n    var isSourceRange = isRange(source);\n\n    /**\n     * The object this rect is for.\n     *\n     * @protected\n     * @readonly\n     * @member {HTMLElement|Range|ClientRect|module:utils/dom/rect~Rect|Object} #_source\n     */\n    Object.defineProperty(this, '_source', {\n      // If the source is a Rect instance, copy it's #_source.\n      value: source._source || source,\n      writable: true,\n      enumerable: false\n    });\n    if (isElement(source) || isSourceRange) {\n      // The `Rect` class depends on `getBoundingClientRect` and `getClientRects` DOM methods. If the source\n      // of a rect in an HTML element or a DOM range but it does not belong to any rendered DOM tree, these methods\n      // will fail to obtain the geometry and the rect instance makes little sense to the features using it.\n      // To get rid of this warning make sure the source passed to the constructor is a descendant of `window.document.body`.\n      // @if CK_DEBUG // const sourceNode = isSourceRange ? source.startContainer : source;\n      // @if CK_DEBUG // if ( !sourceNode.ownerDocument || !sourceNode.ownerDocument.body.contains( sourceNode ) ) {\n      // @if CK_DEBUG // \tconsole.warn(\n      // @if CK_DEBUG // \t\t'rect-source-not-in-dom: The source of this rect does not belong to any rendered DOM tree.',\n      // @if CK_DEBUG // \t\t{ source } );\n      // @if CK_DEBUG // }\n\n      if (isSourceRange) {\n        copyRectProperties(this, Rect.getDomRangeRects(source)[0]);\n      } else {\n        copyRectProperties(this, source.getBoundingClientRect());\n      }\n    } else if (isWindow(source)) {\n      var innerWidth = source.innerWidth,\n        innerHeight = source.innerHeight;\n      copyRectProperties(this, {\n        top: 0,\n        right: innerWidth,\n        bottom: innerHeight,\n        left: 0,\n        width: innerWidth,\n        height: innerHeight\n      });\n    } else {\n      copyRectProperties(this, source);\n    }\n\n    /**\n     * The \"top\" value of the rect.\n     *\n     * @readonly\n     * @member {Number} #top\n     */\n\n    /**\n     * The \"right\" value of the rect.\n     *\n     * @readonly\n     * @member {Number} #right\n     */\n\n    /**\n     * The \"bottom\" value of the rect.\n     *\n     * @readonly\n     * @member {Number} #bottom\n     */\n\n    /**\n     * The \"left\" value of the rect.\n     *\n     * @readonly\n     * @member {Number} #left\n     */\n\n    /**\n     * The \"width\" value of the rect.\n     *\n     * @readonly\n     * @member {Number} #width\n     */\n\n    /**\n     * The \"height\" value of the rect.\n     *\n     * @readonly\n     * @member {Number} #height\n     */\n  }\n\n  /**\n   * Returns a clone of the rect.\n   *\n   * @returns {module:utils/dom/rect~Rect} A cloned rect.\n   */\n  return _createClass(Rect, [{\n    key: \"clone\",\n    value: function clone() {\n      return new Rect(this);\n    }\n\n    /**\n     * Moves the rect so that its upper–left corner lands in desired `[ x, y ]` location.\n     *\n     * @param {Number} x Desired horizontal location.\n     * @param {Number} y Desired vertical location.\n     * @returns {module:utils/dom/rect~Rect} A rect which has been moved.\n     */\n  }, {\n    key: \"moveTo\",\n    value: function moveTo(x, y) {\n      this.top = y;\n      this.right = x + this.width;\n      this.bottom = y + this.height;\n      this.left = x;\n      return this;\n    }\n\n    /**\n     * Moves the rect in–place by a dedicated offset.\n     *\n     * @param {Number} x A horizontal offset.\n     * @param {Number} y A vertical offset\n     * @returns {module:utils/dom/rect~Rect} A rect which has been moved.\n     */\n  }, {\n    key: \"moveBy\",\n    value: function moveBy(x, y) {\n      this.top += y;\n      this.right += x;\n      this.left += x;\n      this.bottom += y;\n      return this;\n    }\n\n    /**\n     * Returns a new rect a a result of intersection with another rect.\n     *\n     * @param {module:utils/dom/rect~Rect} anotherRect\n     * @returns {module:utils/dom/rect~Rect}\n     */\n  }, {\n    key: \"getIntersection\",\n    value: function getIntersection(anotherRect) {\n      var rect = {\n        top: Math.max(this.top, anotherRect.top),\n        right: Math.min(this.right, anotherRect.right),\n        bottom: Math.min(this.bottom, anotherRect.bottom),\n        left: Math.max(this.left, anotherRect.left)\n      };\n      rect.width = rect.right - rect.left;\n      rect.height = rect.bottom - rect.top;\n      if (rect.width < 0 || rect.height < 0) {\n        return null;\n      } else {\n        return new Rect(rect);\n      }\n    }\n\n    /**\n     * Returns the area of intersection with another rect.\n     *\n     * @param {module:utils/dom/rect~Rect} anotherRect [description]\n     * @returns {Number} Area of intersection.\n     */\n  }, {\n    key: \"getIntersectionArea\",\n    value: function getIntersectionArea(anotherRect) {\n      var rect = this.getIntersection(anotherRect);\n      if (rect) {\n        return rect.getArea();\n      } else {\n        return 0;\n      }\n    }\n\n    /**\n     * Returns the area of the rect.\n     *\n     * @returns {Number}\n     */\n  }, {\n    key: \"getArea\",\n    value: function getArea() {\n      return this.width * this.height;\n    }\n\n    /**\n     * Returns a new rect, a part of the original rect, which is actually visible to the user,\n     * e.g. an original rect cropped by parent element rects which have `overflow` set in CSS\n     * other than `\"visible\"`.\n     *\n     * If there's no such visible rect, which is when the rect is limited by one or many of\n     * the ancestors, `null` is returned.\n     *\n     * @returns {module:utils/dom/rect~Rect|null} A visible rect instance or `null`, if there's none.\n     */\n  }, {\n    key: \"getVisible\",\n    value: function getVisible() {\n      var source = this._source;\n      var visibleRect = this.clone();\n\n      // There's no ancestor to crop <body> with the overflow.\n      if (!isBody(source)) {\n        var parent = source.parentNode || source.commonAncestorContainer;\n\n        // Check the ancestors all the way up to the <body>.\n        while (parent && !isBody(parent)) {\n          var parentRect = new Rect(parent);\n          var intersectionRect = visibleRect.getIntersection(parentRect);\n          if (intersectionRect) {\n            if (intersectionRect.getArea() < visibleRect.getArea()) {\n              // Reduce the visible rect to the intersection.\n              visibleRect = intersectionRect;\n            }\n          } else {\n            // There's no intersection, the rect is completely invisible.\n            return null;\n          }\n          parent = parent.parentNode;\n        }\n      }\n      return visibleRect;\n    }\n\n    /**\n     * Checks if all property values ({@link #top}, {@link #left}, {@link #right},\n     * {@link #bottom}, {@link #width} and {@link #height}) are the equal in both rect\n     * instances.\n     *\n     * @param {module:utils/dom/rect~Rect} rect A rect instance to compare with.\n     * @returns {Boolean} `true` when Rects are equal. `false` otherwise.\n     */\n  }, {\n    key: \"isEqual\",\n    value: function isEqual(anotherRect) {\n      for (var _i = 0, _rectProperties = rectProperties; _i < _rectProperties.length; _i++) {\n        var prop = _rectProperties[_i];\n        if (this[prop] !== anotherRect[prop]) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Checks whether a rect fully contains another rect instance.\n     *\n     * @param {module:utils/dom/rect~Rect} anotherRect\n     * @returns {Boolean} `true` if contains, `false` otherwise.\n     */\n  }, {\n    key: \"contains\",\n    value: function contains(anotherRect) {\n      var intersectRect = this.getIntersection(anotherRect);\n      return !!(intersectRect && intersectRect.isEqual(anotherRect));\n    }\n\n    /**\n     * Excludes scrollbars and CSS borders from the rect.\n     *\n     * * Borders are removed when {@link #_source} is an HTML element.\n     * * Scrollbars are excluded from HTML elements and the `window`.\n     *\n     * @returns {module:utils/dom/rect~Rect} A rect which has been updated.\n     */\n  }, {\n    key: \"excludeScrollbarsAndBorders\",\n    value: function excludeScrollbarsAndBorders() {\n      var source = this._source;\n      var scrollBarWidth, scrollBarHeight, direction;\n      if (isWindow(source)) {\n        scrollBarWidth = source.innerWidth - source.document.documentElement.clientWidth;\n        scrollBarHeight = source.innerHeight - source.document.documentElement.clientHeight;\n        direction = source.getComputedStyle(source.document.documentElement).direction;\n      } else {\n        var borderWidths = getBorderWidths(this._source);\n        scrollBarWidth = source.offsetWidth - source.clientWidth - borderWidths.left - borderWidths.right;\n        scrollBarHeight = source.offsetHeight - source.clientHeight - borderWidths.top - borderWidths.bottom;\n        direction = source.ownerDocument.defaultView.getComputedStyle(source).direction;\n        this.left += borderWidths.left;\n        this.top += borderWidths.top;\n        this.right -= borderWidths.right;\n        this.bottom -= borderWidths.bottom;\n        this.width = this.right - this.left;\n        this.height = this.bottom - this.top;\n      }\n      this.width -= scrollBarWidth;\n      if (direction === 'ltr') {\n        this.right -= scrollBarWidth;\n      } else {\n        this.left += scrollBarWidth;\n      }\n      this.height -= scrollBarHeight;\n      this.bottom -= scrollBarHeight;\n      return this;\n    }\n\n    /**\n     * Returns an array of rects of the given native DOM Range.\n     *\n     * @param {Range} range A native DOM range.\n     * @returns {Array.<module:utils/dom/rect~Rect>} DOM Range rects.\n     */\n  }], [{\n    key: \"getDomRangeRects\",\n    value: function getDomRangeRects(range) {\n      var rects = [];\n      // Safari does not iterate over ClientRectList using for...of loop.\n      var clientRects = Array.from(range.getClientRects());\n      if (clientRects.length) {\n        var _iterator = _createForOfIteratorHelper(clientRects),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var rect = _step.value;\n            rects.push(new Rect(rect));\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      }\n      // If there's no client rects for the Range, use parent container's bounding rect\n      // instead and adjust rect's width to simulate the actual geometry of such range.\n      // https://github.com/ckeditor/ckeditor5-utils/issues/153\n      // https://github.com/ckeditor/ckeditor5-ui/issues/317\n      else {\n        var startContainer = range.startContainer;\n        if (isText(startContainer)) {\n          startContainer = startContainer.parentNode;\n        }\n        var _rect = new Rect(startContainer.getBoundingClientRect());\n        _rect.right = _rect.left;\n        _rect.width = 0;\n        rects.push(_rect);\n      }\n      return rects;\n    }\n  }]);\n}(); // Acquires all the rect properties from the passed source.\n//\n// @private\n// @param {module:utils/dom/rect~Rect} rect\n// @param {ClientRect|module:utils/dom/rect~Rect|Object} source\nexport { Rect as default };\nfunction copyRectProperties(rect, source) {\n  var _iterator2 = _createForOfIteratorHelper(rectProperties),\n    _step2;\n  try {\n    for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n      var p = _step2.value;\n      rect[p] = source[p];\n    }\n  } catch (err) {\n    _iterator2.e(err);\n  } finally {\n    _iterator2.f();\n  }\n}\n\n// Checks if provided object is a <body> HTML element.\n//\n// @private\n// @param {HTMLElement|Range} elementOrRange\n// @returns {Boolean}\nfunction isBody(elementOrRange) {\n  if (!isElement(elementOrRange)) {\n    return false;\n  }\n  return elementOrRange === elementOrRange.ownerDocument.body;\n}","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/remove\n */\n\n/**\n * Removes given node from parent.\n *\n * @param {Node} node Node to remove.\n */\nexport default function remove(node) {\n  var parent = node.parentNode;\n  if (parent) {\n    parent.removeChild(node);\n  }\n}","import \"core-js/modules/es.object.to-string.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/scroll\n */\n\nimport isRange from './isrange';\nimport Rect from './rect';\nimport isText from './istext';\nvar utils = {};\n\n/**\n * Makes any page `HTMLElement` or `Range` (`target`) visible inside the browser viewport.\n * This helper will scroll all `target` ancestors and the web browser viewport to reveal the target to\n * the user. If the `target` is already visible, nothing will happen.\n *\n * @param {HTMLElement|Range} options.target A target, which supposed to become visible to the user.\n * @param {Number} [options.viewportOffset] An offset from the edge of the viewport (in pixels)\n * the `target` will be moved by when the viewport is scrolled. It enhances the user experience\n * by keeping the `target` some distance from the edge of the viewport and thus making it easier to\n * read or edit by the user.\n */\nexport function scrollViewportToShowTarget(_ref) {\n  var target = _ref.target,\n    _ref$viewportOffset = _ref.viewportOffset,\n    viewportOffset = _ref$viewportOffset === void 0 ? 0 : _ref$viewportOffset;\n  var targetWindow = getWindow(target);\n  var currentWindow = targetWindow;\n  var currentFrame = null;\n\n  // Iterate over all windows, starting from target's parent window up to window#top.\n  while (currentWindow) {\n    var firstAncestorToScroll = void 0;\n\n    // Let's scroll target's ancestors first to reveal it. Then, once the ancestor scrolls\n    // settled down, the algorithm can eventually scroll the viewport of the current window.\n    //\n    // Note: If the current window is target's **original** window (e.g. the first one),\n    // start scrolling the closest parent of the target. If not, scroll the closest parent\n    // of an iframe that resides in the current window.\n    if (currentWindow == targetWindow) {\n      firstAncestorToScroll = getParentElement(target);\n    } else {\n      firstAncestorToScroll = getParentElement(currentFrame);\n    }\n\n    // Scroll the target's ancestors first. Once done, scrolling the viewport is easy.\n    scrollAncestorsToShowRect(firstAncestorToScroll, function () {\n      // Note: If the target does not belong to the current window **directly**,\n      // i.e. it resides in an iframe belonging to the window, obtain the target's rect\n      // in the coordinates of the current window. By default, a Rect returns geometry\n      // relative to the current window's viewport. To make it work in a parent window,\n      // it must be shifted.\n      return getRectRelativeToWindow(target, currentWindow);\n    });\n\n    // Obtain the rect of the target after it has been scrolled within its ancestors.\n    // It's time to scroll the viewport.\n    var targetRect = getRectRelativeToWindow(target, currentWindow);\n    scrollWindowToShowRect(currentWindow, targetRect, viewportOffset);\n    if (currentWindow.parent != currentWindow) {\n      // Keep the reference to the <iframe> element the \"previous current window\" was\n      // rendered within. It will be useful to re–calculate the rect of the target\n      // in the parent window's relative geometry. The target's rect must be shifted\n      // by it's iframe's position.\n      currentFrame = currentWindow.frameElement;\n      currentWindow = currentWindow.parent;\n\n      // If the current window has some parent but frameElement is inaccessible, then they have\n      // different domains/ports and, due to security reasons, accessing and scrolling\n      // the parent window won't be possible.\n      // See https://github.com/ckeditor/ckeditor5/issues/930.\n      if (!currentFrame) {\n        return;\n      }\n    } else {\n      currentWindow = null;\n    }\n  }\n}\n\n/**\n * Makes any page `HTMLElement` or `Range` (target) visible within its scrollable ancestors,\n * e.g. if they have `overflow: scroll` CSS style.\n *\n * @param {HTMLElement|Range} target A target, which supposed to become visible to the user.\n */\nexport function scrollAncestorsToShowTarget(target) {\n  var targetParent = getParentElement(target);\n  scrollAncestorsToShowRect(targetParent, function () {\n    return new Rect(target);\n  });\n}\n\n// TODO: Using a property value shorthand in the top of the file\n// causes JSDoc to throw errors. See https://github.com/cksource/docs-builder/issues/75.\nObject.assign(utils, {\n  scrollViewportToShowTarget: scrollViewportToShowTarget,\n  scrollAncestorsToShowTarget: scrollAncestorsToShowTarget\n});\n\n// Makes a given rect visible within its parent window.\n//\n// Note: Avoid the situation where the caret is still in the viewport, but totally\n// at the edge of it. In such situation, if it moved beyond the viewport in the next\n// action e.g. after paste, the scrolling would move it to the viewportOffset level\n// and it all would look like the caret visually moved up/down:\n//\n// 1.\n//\t\t| foo[]\n//\t\t|                                    <--- N px of space below the caret\n//\t\t+---------------------------------...\n//\n// 2. *paste*\n// 3.\n//\t\t|\n//\t\t|\n//\t\t+-foo-----------------------------...\n//\t\t  bar[]                              <--- caret below viewport, scrolling...\n//\n// 4. *scrolling*\n// 5.\n//\t\t|\n//\t\t| foo\n//\t\t| bar[]                              <--- caret precisely at the edge\n//\t\t+---------------------------------...\n//\n// To prevent this, this method checks the rects moved by the viewportOffset to cover\n// the upper/lower edge of the viewport. It makes sure if the action repeats, there's\n// no twitching – it's a purely visual improvement:\n//\n// 5. (after fix)\n//\t\t|\n//\t\t| foo\n//\t\t| bar[]\n//\t\t|                                    <--- N px of space below the caret\n//\t\t+---------------------------------...\n//\n// @private\n// @param {Window} window A window which is scrolled to reveal the rect.\n// @param {module:utils/dom/rect~Rect} rect A rect which is to be revealed.\n// @param {Number} viewportOffset See scrollViewportToShowTarget.\nfunction scrollWindowToShowRect(window, rect, viewportOffset) {\n  var targetShiftedDownRect = rect.clone().moveBy(0, viewportOffset);\n  var targetShiftedUpRect = rect.clone().moveBy(0, -viewportOffset);\n  var viewportRect = new Rect(window).excludeScrollbarsAndBorders();\n  var rects = [targetShiftedUpRect, targetShiftedDownRect];\n  if (!rects.every(function (rect) {\n    return viewportRect.contains(rect);\n  })) {\n    var scrollX = window.scrollX,\n      scrollY = window.scrollY;\n    if (isAbove(targetShiftedUpRect, viewportRect)) {\n      scrollY -= viewportRect.top - rect.top + viewportOffset;\n    } else if (isBelow(targetShiftedDownRect, viewportRect)) {\n      scrollY += rect.bottom - viewportRect.bottom + viewportOffset;\n    }\n\n    // TODO: Web browsers scroll natively to place the target in the middle\n    // of the viewport. It's not a very popular case, though.\n    if (isLeftOf(rect, viewportRect)) {\n      scrollX -= viewportRect.left - rect.left + viewportOffset;\n    } else if (isRightOf(rect, viewportRect)) {\n      scrollX += rect.right - viewportRect.right + viewportOffset;\n    }\n    window.scrollTo(scrollX, scrollY);\n  }\n}\n\n// Recursively scrolls element ancestors to visually reveal a rect.\n//\n// @private\n// @param {HTMLElement} A parent The first ancestors to start scrolling.\n// @param {Function} getRect A function which returns the Rect, which is to be revealed.\nfunction scrollAncestorsToShowRect(parent, getRect) {\n  var parentWindow = getWindow(parent);\n  var parentRect, targetRect;\n  while (parent != parentWindow.document.body) {\n    targetRect = getRect();\n    parentRect = new Rect(parent).excludeScrollbarsAndBorders();\n    if (!parentRect.contains(targetRect)) {\n      if (isAbove(targetRect, parentRect)) {\n        parent.scrollTop -= parentRect.top - targetRect.top;\n      } else if (isBelow(targetRect, parentRect)) {\n        parent.scrollTop += targetRect.bottom - parentRect.bottom;\n      }\n      if (isLeftOf(targetRect, parentRect)) {\n        parent.scrollLeft -= parentRect.left - targetRect.left;\n      } else if (isRightOf(targetRect, parentRect)) {\n        parent.scrollLeft += targetRect.right - parentRect.right;\n      }\n    }\n    parent = parent.parentNode;\n  }\n}\n\n// Determines if a given `Rect` extends beyond the bottom edge of the second `Rect`.\n//\n// @private\n// @param {module:utils/dom/rect~Rect} firstRect\n// @param {module:utils/dom/rect~Rect} secondRect\nfunction isBelow(firstRect, secondRect) {\n  return firstRect.bottom > secondRect.bottom;\n}\n\n// Determines if a given `Rect` extends beyond the top edge of the second `Rect`.\n//\n// @private\n// @param {module:utils/dom/rect~Rect} firstRect\n// @param {module:utils/dom/rect~Rect} secondRect\nfunction isAbove(firstRect, secondRect) {\n  return firstRect.top < secondRect.top;\n}\n\n// Determines if a given `Rect` extends beyond the left edge of the second `Rect`.\n//\n// @private\n// @param {module:utils/dom/rect~Rect} firstRect\n// @param {module:utils/dom/rect~Rect} secondRect\nfunction isLeftOf(firstRect, secondRect) {\n  return firstRect.left < secondRect.left;\n}\n\n// Determines if a given `Rect` extends beyond the right edge of the second `Rect`.\n//\n// @private\n// @param {module:utils/dom/rect~Rect} firstRect\n// @param {module:utils/dom/rect~Rect} secondRect\nfunction isRightOf(firstRect, secondRect) {\n  return firstRect.right > secondRect.right;\n}\n\n// Returns the closest window of an element or range.\n//\n// @private\n// @param {HTMLElement|Range} firstRect\n// @returns {Window}\nfunction getWindow(elementOrRange) {\n  if (isRange(elementOrRange)) {\n    return elementOrRange.startContainer.ownerDocument.defaultView;\n  } else {\n    return elementOrRange.ownerDocument.defaultView;\n  }\n}\n\n// Returns the closest parent of an element or DOM range.\n//\n// @private\n// @param {HTMLElement|Range} firstRect\n// @returns {HTMLelement}\nfunction getParentElement(elementOrRange) {\n  if (isRange(elementOrRange)) {\n    var parent = elementOrRange.commonAncestorContainer;\n\n    // If a Range is attached to the Text, use the closest element ancestor.\n    if (isText(parent)) {\n      parent = parent.parentNode;\n    }\n    return parent;\n  } else {\n    return elementOrRange.parentNode;\n  }\n}\n\n// Returns the rect of an element or range residing in an iframe.\n// The result rect is relative to the geometry of the passed window instance.\n//\n// @private\n// @param {HTMLElement|Range} target Element or range which rect should be returned.\n// @param {Window} relativeWindow A window the rect should be relative to.\n// @returns {module:utils/dom/rect~Rect}\nfunction getRectRelativeToWindow(target, relativeWindow) {\n  var targetWindow = getWindow(target);\n  var rect = new Rect(target);\n  if (targetWindow === relativeWindow) {\n    return rect;\n  } else {\n    var currentWindow = targetWindow;\n    while (currentWindow != relativeWindow) {\n      var frame = currentWindow.frameElement;\n      var frameRect = new Rect(frame).excludeScrollbarsAndBorders();\n      rect.moveBy(frameRect.left, frameRect.top);\n      currentWindow = currentWindow.parent;\n    }\n  }\n  return rect;\n}","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/setdatainelement\n */\n\n/* globals HTMLTextAreaElement */\n\n/**\n * Sets data in a given element.\n *\n * @param {HTMLElement} el The element in which the data will be set.\n * @param {String} data The data string.\n */\nexport default function setDataInElement(el, data) {\n  if (el instanceof HTMLTextAreaElement) {\n    el.value = data;\n  }\n  el.innerHTML = data;\n}","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/tounit\n */\n\n/**\n * Returns a helper function, which adds a desired trailing\n * `unit` to the passed value.\n *\n * @param {String} unit An unit like \"px\" or \"em\".\n * @returns {module:utils/dom/tounit~helper}\n */\nexport default function toUnit(unit) {\n  /**\n   * A function, which adds a pre–defined trailing `unit`\n   * to the passed `value`.\n   *\n   * @function helper\n  \t * @param {*} value A value to be given the unit.\n  \t * @returns {String} A value with the trailing unit.\n   */\n  return function (value) {\n    return value + unit;\n  };\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/elementreplacer\n */\n/**\n * Utility class allowing to hide existing HTML elements or replace them with given ones in a way that doesn't remove\n * the original elements from the DOM.\n */\nvar ElementReplacer = /*#__PURE__*/function () {\n  function ElementReplacer() {\n    _classCallCheck(this, ElementReplacer);\n    /**\n     * The elements replaced by {@link #replace} and their replacements.\n     *\n     * @private\n     * @member {Array.<Object>}\n     */\n    this._replacedElements = [];\n  }\n\n  /**\n   * Hides the `element` and, if specified, inserts the the given element next to it.\n   *\n   * The effect of this method can be reverted by {@link #restore}.\n   *\n   * @param {HTMLElement} element The element to replace.\n   * @param {HTMLElement} [newElement] The replacement element. If not passed, then the `element` will just be hidden.\n   */\n  return _createClass(ElementReplacer, [{\n    key: \"replace\",\n    value: function replace(element, newElement) {\n      this._replacedElements.push({\n        element: element,\n        newElement: newElement\n      });\n      element.style.display = 'none';\n      if (newElement) {\n        element.parentNode.insertBefore(newElement, element.nextSibling);\n      }\n    }\n\n    /**\n     * Restores what {@link #replace} did.\n     */\n  }, {\n    key: \"restore\",\n    value: function restore() {\n      this._replacedElements.forEach(function (_ref) {\n        var element = _ref.element,\n          newElement = _ref.newElement;\n        element.style.display = '';\n        if (newElement) {\n          newElement.remove();\n        }\n      });\n      this._replacedElements = [];\n    }\n  }]);\n}();\nexport { ElementReplacer as default };","import _toConsumableArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\";\nimport _slicedToArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport _createForOfIteratorHelper from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/emittermixin\n */\n\nimport EventInfo from './eventinfo';\nimport uid from './uid';\nimport priorities from './priorities';\n\n// To check if component is loaded more than once.\nimport './version';\nimport CKEditorError from './ckeditorerror';\nvar _listeningTo = Symbol('listeningTo');\nvar _emitterId = Symbol('emitterId');\n\n/**\n * Mixin that injects the {@link ~Emitter events API} into its host.\n *\n * @mixin EmitterMixin\n * @implements module:utils/emittermixin~Emitter\n */\nvar EmitterMixin = {\n  /**\n   * @inheritDoc\n   */\n  on: function on(event, callback) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    this.listenTo(this, event, callback, options);\n  },\n  /**\n   * @inheritDoc\n   */\n  once: function once(event, callback, options) {\n    var wasFired = false;\n    var onceCallback = function onceCallback(event) {\n      // Ensure the callback is called only once even if the callback itself leads to re-firing the event\n      // (which would call the callback again).\n      if (!wasFired) {\n        wasFired = true;\n\n        // Go off() at the first call.\n        event.off();\n\n        // Go with the original callback.\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n        callback.call.apply(callback, [this, event].concat(args));\n      }\n    };\n\n    // Make a similar on() call, simply replacing the callback.\n    this.listenTo(this, event, onceCallback, options);\n  },\n  /**\n   * @inheritDoc\n   */\n  off: function off(event, callback) {\n    this.stopListening(this, event, callback);\n  },\n  /**\n   * @inheritDoc\n   */\n  listenTo: function listenTo(emitter, event, callback) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    var emitterInfo, eventCallbacks;\n\n    // _listeningTo contains a list of emitters that this object is listening to.\n    // This list has the following format:\n    //\n    // _listeningTo: {\n    //     emitterId: {\n    //         emitter: emitter,\n    //         callbacks: {\n    //             event1: [ callback1, callback2, ... ]\n    //             ....\n    //         }\n    //     },\n    //     ...\n    // }\n\n    if (!this[_listeningTo]) {\n      this[_listeningTo] = {};\n    }\n    var emitters = this[_listeningTo];\n    if (!_getEmitterId(emitter)) {\n      _setEmitterId(emitter);\n    }\n    var emitterId = _getEmitterId(emitter);\n    if (!(emitterInfo = emitters[emitterId])) {\n      emitterInfo = emitters[emitterId] = {\n        emitter: emitter,\n        callbacks: {}\n      };\n    }\n    if (!(eventCallbacks = emitterInfo.callbacks[event])) {\n      eventCallbacks = emitterInfo.callbacks[event] = [];\n    }\n    eventCallbacks.push(callback);\n\n    // Finally register the callback to the event.\n    createEventNamespace(emitter, event);\n    var lists = getCallbacksListsForNamespace(emitter, event);\n    var priority = priorities.get(options.priority);\n    var callbackDefinition = {\n      callback: callback,\n      priority: priority\n    };\n\n    // Add the callback to all callbacks list.\n    var _iterator = _createForOfIteratorHelper(lists),\n      _step;\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var callbacks = _step.value;\n        // Add the callback to the list in the right priority position.\n        var added = false;\n        for (var i = 0; i < callbacks.length; i++) {\n          if (callbacks[i].priority < priority) {\n            callbacks.splice(i, 0, callbackDefinition);\n            added = true;\n            break;\n          }\n        }\n\n        // Add at the end, if right place was not found.\n        if (!added) {\n          callbacks.push(callbackDefinition);\n        }\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n  },\n  /**\n   * @inheritDoc\n   */\n  stopListening: function stopListening(emitter, event, callback) {\n    var emitters = this[_listeningTo];\n    var emitterId = emitter && _getEmitterId(emitter);\n    var emitterInfo = emitters && emitterId && emitters[emitterId];\n    var eventCallbacks = emitterInfo && event && emitterInfo.callbacks[event];\n\n    // Stop if nothing has been listened.\n    if (!emitters || emitter && !emitterInfo || event && !eventCallbacks) {\n      return;\n    }\n\n    // All params provided. off() that single callback.\n    if (callback) {\n      removeCallback(emitter, event, callback);\n    }\n    // Only `emitter` and `event` provided. off() all callbacks for that event.\n    else if (eventCallbacks) {\n      while (callback = eventCallbacks.pop()) {\n        removeCallback(emitter, event, callback);\n      }\n      delete emitterInfo.callbacks[event];\n    }\n    // Only `emitter` provided. off() all events for that emitter.\n    else if (emitterInfo) {\n      for (event in emitterInfo.callbacks) {\n        this.stopListening(emitter, event);\n      }\n      delete emitters[emitterId];\n    }\n    // No params provided. off() all emitters.\n    else {\n      for (emitterId in emitters) {\n        this.stopListening(emitters[emitterId].emitter);\n      }\n      delete this[_listeningTo];\n    }\n  },\n  /**\n   * @inheritDoc\n   */\n  fire: function fire(eventOrInfo) {\n    try {\n      var eventInfo = eventOrInfo instanceof EventInfo ? eventOrInfo : new EventInfo(this, eventOrInfo);\n      var event = eventInfo.name;\n      var callbacks = getCallbacksForEvent(this, event);\n\n      // Record that the event passed this emitter on its path.\n      eventInfo.path.push(this);\n\n      // Handle event listener callbacks first.\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n      if (callbacks) {\n        // Arguments passed to each callback.\n        var callbackArgs = [eventInfo].concat(args);\n\n        // Copying callbacks array is the easiest and most secure way of preventing infinite loops, when event callbacks\n        // are added while processing other callbacks. Previous solution involved adding counters (unique ids) but\n        // failed if callbacks were added to the queue before currently processed callback.\n        // If this proves to be too inefficient, another method is to change `.on()` so callbacks are stored if same\n        // event is currently processed. Then, `.fire()` at the end, would have to add all stored events.\n        callbacks = Array.from(callbacks);\n        for (var i = 0; i < callbacks.length; i++) {\n          callbacks[i].callback.apply(this, callbackArgs);\n\n          // Remove the callback from future requests if off() has been called.\n          if (eventInfo.off.called) {\n            // Remove the called mark for the next calls.\n            delete eventInfo.off.called;\n            removeCallback(this, event, callbacks[i].callback);\n          }\n\n          // Do not execute next callbacks if stop() was called.\n          if (eventInfo.stop.called) {\n            break;\n          }\n        }\n      }\n\n      // Delegate event to other emitters if needed.\n      if (this._delegations) {\n        var destinations = this._delegations.get(event);\n        var passAllDestinations = this._delegations.get('*');\n        if (destinations) {\n          fireDelegatedEvents(destinations, eventInfo, args);\n        }\n        if (passAllDestinations) {\n          fireDelegatedEvents(passAllDestinations, eventInfo, args);\n        }\n      }\n      return eventInfo.return;\n    } catch (err) {\n      CKEditorError.rethrowUnexpectedError(err, this);\n    }\n  },\n  /**\n   * @inheritDoc\n   */\n  delegate: function delegate() {\n    var _this = this;\n    for (var _len3 = arguments.length, events = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      events[_key3] = arguments[_key3];\n    }\n    return {\n      to: function to(emitter, nameOrFunction) {\n        if (!_this._delegations) {\n          _this._delegations = new Map();\n        }\n\n        // Originally there was a for..of loop which unfortunately caused an error in Babel that didn't allow\n        // build an application. See: https://github.com/ckeditor/ckeditor5-react/issues/40.\n        events.forEach(function (eventName) {\n          var destinations = _this._delegations.get(eventName);\n          if (!destinations) {\n            _this._delegations.set(eventName, new Map([[emitter, nameOrFunction]]));\n          } else {\n            destinations.set(emitter, nameOrFunction);\n          }\n        });\n      }\n    };\n  },\n  /**\n   * @inheritDoc\n   */\n  stopDelegating: function stopDelegating(event, emitter) {\n    if (!this._delegations) {\n      return;\n    }\n    if (!event) {\n      this._delegations.clear();\n    } else if (!emitter) {\n      this._delegations.delete(event);\n    } else {\n      var destinations = this._delegations.get(event);\n      if (destinations) {\n        destinations.delete(emitter);\n      }\n    }\n  }\n};\nexport default EmitterMixin;\n\n/**\n * Emitter/listener interface.\n *\n * Can be easily implemented by a class by mixing the {@link module:utils/emittermixin~EmitterMixin} mixin.\n *\n * @interface Emitter\n */\n\n/**\n * Registers a callback function to be executed when an event is fired.\n *\n * Shorthand for {@link #listenTo `this.listenTo( this, event, callback, options )`} (it makes the emitter\n * listen on itself).\n *\n * @method #on\n * @param {String} event The name of the event.\n * @param {Function} callback The function to be called on event.\n * @param {Object} [options={}] Additional options.\n * @param {module:utils/priorities~PriorityString|Number} [options.priority='normal'] The priority of this event callback. The higher\n * the priority value the sooner the callback will be fired. Events having the same priority are called in the\n * order they were added.\n */\n\n/**\n * Registers a callback function to be executed on the next time the event is fired only. This is similar to\n * calling {@link #on} followed by {@link #off} in the callback.\n *\n * @method #once\n * @param {String} event The name of the event.\n * @param {Function} callback The function to be called on event.\n * @param {Object} [options={}] Additional options.\n * @param {module:utils/priorities~PriorityString|Number} [options.priority='normal'] The priority of this event callback. The higher\n * the priority value the sooner the callback will be fired. Events having the same priority are called in the\n * order they were added.\n */\n\n/**\n * Stops executing the callback on the given event.\n * Shorthand for {@link #stopListening `this.stopListening( this, event, callback )`}.\n *\n * @method #off\n * @param {String} event The name of the event.\n * @param {Function} callback The function to stop being called.\n */\n\n/**\n * Registers a callback function to be executed when an event is fired in a specific (emitter) object.\n *\n * Events can be grouped in namespaces using `:`.\n * When namespaced event is fired, it additionally fires all callbacks for that namespace.\n *\n *\t\t// myEmitter.on( ... ) is a shorthand for myEmitter.listenTo( myEmitter, ... ).\n *\t\tmyEmitter.on( 'myGroup', genericCallback );\n *\t\tmyEmitter.on( 'myGroup:myEvent', specificCallback );\n *\n *\t\t// genericCallback is fired.\n *\t\tmyEmitter.fire( 'myGroup' );\n *\t\t// both genericCallback and specificCallback are fired.\n *\t\tmyEmitter.fire( 'myGroup:myEvent' );\n *\t\t// genericCallback is fired even though there are no callbacks for \"foo\".\n *\t\tmyEmitter.fire( 'myGroup:foo' );\n *\n * An event callback can {@link module:utils/eventinfo~EventInfo#stop stop the event} and\n * set the {@link module:utils/eventinfo~EventInfo#return return value} of the {@link #fire} method.\n *\n * @method #listenTo\n * @param {module:utils/emittermixin~Emitter} emitter The object that fires the event.\n * @param {String} event The name of the event.\n * @param {Function} callback The function to be called on event.\n * @param {Object} [options={}] Additional options.\n * @param {module:utils/priorities~PriorityString|Number} [options.priority='normal'] The priority of this event callback. The higher\n * the priority value the sooner the callback will be fired. Events having the same priority are called in the\n * order they were added.\n */\n\n/**\n * Stops listening for events. It can be used at different levels:\n *\n * * To stop listening to a specific callback.\n * * To stop listening to a specific event.\n * * To stop listening to all events fired by a specific object.\n * * To stop listening to all events fired by all objects.\n *\n * @method #stopListening\n * @param {module:utils/emittermixin~Emitter} [emitter] The object to stop listening to. If omitted, stops it for all objects.\n * @param {String} [event] (Requires the `emitter`) The name of the event to stop listening to. If omitted, stops it\n * for all events from `emitter`.\n * @param {Function} [callback] (Requires the `event`) The function to be removed from the call list for the given\n * `event`.\n */\n\n/**\n * Fires an event, executing all callbacks registered for it.\n *\n * The first parameter passed to callbacks is an {@link module:utils/eventinfo~EventInfo} object,\n * followed by the optional `args` provided in the `fire()` method call.\n *\n * @method #fire\n * @param {String|module:utils/eventinfo~EventInfo} eventOrInfo The name of the event or `EventInfo` object if event is delegated.\n * @param {...*} [args] Additional arguments to be passed to the callbacks.\n * @returns {*} By default the method returns `undefined`. However, the return value can be changed by listeners\n * through modification of the {@link module:utils/eventinfo~EventInfo#return `evt.return`}'s property (the event info\n * is the first param of every callback).\n */\n\n/**\n * Delegates selected events to another {@link module:utils/emittermixin~Emitter}. For instance:\n *\n *\t\temitterA.delegate( 'eventX' ).to( emitterB );\n *\t\temitterA.delegate( 'eventX', 'eventY' ).to( emitterC );\n *\n * then `eventX` is delegated (fired by) `emitterB` and `emitterC` along with `data`:\n *\n *\t\temitterA.fire( 'eventX', data );\n *\n * and `eventY` is delegated (fired by) `emitterC` along with `data`:\n *\n *\t\temitterA.fire( 'eventY', data );\n *\n * @method #delegate\n * @param {...String} events Event names that will be delegated to another emitter.\n * @returns {module:utils/emittermixin~EmitterMixinDelegateChain}\n */\n\n/**\n * Stops delegating events. It can be used at different levels:\n *\n * * To stop delegating all events.\n * * To stop delegating a specific event to all emitters.\n * * To stop delegating a specific event to a specific emitter.\n *\n * @method #stopDelegating\n * @param {String} [event] The name of the event to stop delegating. If omitted, stops it all delegations.\n * @param {module:utils/emittermixin~Emitter} [emitter] (requires `event`) The object to stop delegating a particular event to.\n * If omitted, stops delegation of `event` to all emitters.\n */\n\n/**\n * Checks if `listeningEmitter` listens to an emitter with given `listenedToEmitterId` and if so, returns that emitter.\n * If not, returns `null`.\n *\n * @protected\n * @param {module:utils/emittermixin~Emitter} listeningEmitter An emitter that listens.\n * @param {String} listenedToEmitterId Unique emitter id of emitter listened to.\n * @returns {module:utils/emittermixin~Emitter|null}\n */\nexport function _getEmitterListenedTo(listeningEmitter, listenedToEmitterId) {\n  if (listeningEmitter[_listeningTo] && listeningEmitter[_listeningTo][listenedToEmitterId]) {\n    return listeningEmitter[_listeningTo][listenedToEmitterId].emitter;\n  }\n  return null;\n}\n\n/**\n * Sets emitter's unique id.\n *\n * **Note:** `_emitterId` can be set only once.\n *\n * @protected\n * @param {module:utils/emittermixin~Emitter} emitter An emitter for which id will be set.\n * @param {String} [id] Unique id to set. If not passed, random unique id will be set.\n */\nexport function _setEmitterId(emitter, id) {\n  if (!emitter[_emitterId]) {\n    emitter[_emitterId] = id || uid();\n  }\n}\n\n/**\n * Returns emitter's unique id.\n *\n * @protected\n * @param {module:utils/emittermixin~Emitter} emitter An emitter which id will be returned.\n */\nexport function _getEmitterId(emitter) {\n  return emitter[_emitterId];\n}\n\n// Gets the internal `_events` property of the given object.\n// `_events` property store all lists with callbacks for registered event names.\n// If there were no events registered on the object, empty `_events` object is created.\nfunction getEvents(source) {\n  if (!source._events) {\n    Object.defineProperty(source, '_events', {\n      value: {}\n    });\n  }\n  return source._events;\n}\n\n// Creates event node for generic-specific events relation architecture.\nfunction makeEventNode() {\n  return {\n    callbacks: [],\n    childEvents: []\n  };\n}\n\n// Creates an architecture for generic-specific events relation.\n// If needed, creates all events for given eventName, i.e. if the first registered event\n// is foo:bar:abc, it will create foo:bar:abc, foo:bar and foo event and tie them together.\n// It also copies callbacks from more generic events to more specific events when\n// specific events are created.\nfunction createEventNamespace(source, eventName) {\n  var events = getEvents(source);\n\n  // First, check if the event we want to add to the structure already exists.\n  if (events[eventName]) {\n    // If it exists, we don't have to do anything.\n    return;\n  }\n\n  // In other case, we have to create the structure for the event.\n  // Note, that we might need to create intermediate events too.\n  // I.e. if foo:bar:abc is being registered and we only have foo in the structure,\n  // we need to also register foo:bar.\n\n  // Currently processed event name.\n  var name = eventName;\n  // Name of the event that is a child event for currently processed event.\n  var childEventName = null;\n\n  // Array containing all newly created specific events.\n  var newEventNodes = [];\n\n  // While loop can't check for ':' index because we have to handle generic events too.\n  // In each loop, we truncate event name, going from the most specific name to the generic one.\n  // I.e. foo:bar:abc -> foo:bar -> foo.\n  while (name !== '') {\n    if (events[name]) {\n      // If the currently processed event name is already registered, we can be sure\n      // that it already has all the structure created, so we can break the loop here\n      // as no more events need to be registered.\n      break;\n    }\n\n    // If this event is not yet registered, create a new object for it.\n    events[name] = makeEventNode();\n    // Add it to the array with newly created events.\n    newEventNodes.push(events[name]);\n\n    // Add previously processed event name as a child of this event.\n    if (childEventName) {\n      events[name].childEvents.push(childEventName);\n    }\n    childEventName = name;\n    // If `.lastIndexOf()` returns -1, `.substr()` will return '' which will break the loop.\n    name = name.substr(0, name.lastIndexOf(':'));\n  }\n  if (name !== '') {\n    // If name is not empty, we found an already registered event that was a parent of the\n    // event we wanted to register.\n    // Copy that event's callbacks to newly registered events.\n    var _iterator2 = _createForOfIteratorHelper(newEventNodes),\n      _step2;\n    try {\n      for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n        var node = _step2.value;\n        node.callbacks = events[name].callbacks.slice();\n      }\n\n      // Add last newly created event to the already registered event.\n    } catch (err) {\n      _iterator2.e(err);\n    } finally {\n      _iterator2.f();\n    }\n    events[name].childEvents.push(childEventName);\n  }\n}\n\n// Gets an array containing callbacks list for a given event and it's more specific events.\n// I.e. if given event is foo:bar and there is also foo:bar:abc event registered, this will\n// return callback list of foo:bar and foo:bar:abc (but not foo).\nfunction getCallbacksListsForNamespace(source, eventName) {\n  var eventNode = getEvents(source)[eventName];\n  if (!eventNode) {\n    return [];\n  }\n  var callbacksLists = [eventNode.callbacks];\n  for (var i = 0; i < eventNode.childEvents.length; i++) {\n    var childCallbacksLists = getCallbacksListsForNamespace(source, eventNode.childEvents[i]);\n    callbacksLists = callbacksLists.concat(childCallbacksLists);\n  }\n  return callbacksLists;\n}\n\n// Get the list of callbacks for a given event, but only if there any callbacks have been registered.\n// If there are no callbacks registered for given event, it checks if this is a specific event and looks\n// for callbacks for it's more generic version.\nfunction getCallbacksForEvent(source, eventName) {\n  var event;\n  if (!source._events || !(event = source._events[eventName]) || !event.callbacks.length) {\n    // There are no callbacks registered for specified eventName.\n    // But this could be a specific-type event that is in a namespace.\n    if (eventName.indexOf(':') > -1) {\n      // If the eventName is specific, try to find callback lists for more generic event.\n      return getCallbacksForEvent(source, eventName.substr(0, eventName.lastIndexOf(':')));\n    } else {\n      // If this is a top-level generic event, return null;\n      return null;\n    }\n  }\n  return event.callbacks;\n}\n\n// Fires delegated events for given map of destinations.\n//\n// @private\n// * @param {Map.<utils.Emitter>} destinations A map containing\n// `[ {@link module:utils/emittermixin~Emitter}, \"event name\" ]` pair destinations.\n// * @param {utils.EventInfo} eventInfo The original event info object.\n// * @param {Array.<*>} fireArgs Arguments the original event was fired with.\nfunction fireDelegatedEvents(destinations, eventInfo, fireArgs) {\n  var _iterator3 = _createForOfIteratorHelper(destinations),\n    _step3;\n  try {\n    for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n      var _step3$value = _slicedToArray(_step3.value, 2),\n        emitter = _step3$value[0],\n        name = _step3$value[1];\n      if (!name) {\n        name = eventInfo.name;\n      } else if (typeof name == 'function') {\n        name = name(eventInfo.name);\n      }\n      var delegatedInfo = new EventInfo(eventInfo.source, name);\n      delegatedInfo.path = _toConsumableArray(eventInfo.path);\n      emitter.fire.apply(emitter, [delegatedInfo].concat(_toConsumableArray(fireArgs)));\n    }\n  } catch (err) {\n    _iterator3.e(err);\n  } finally {\n    _iterator3.f();\n  }\n}\n\n// Removes callback from emitter for given event.\n//\n// @param {module:utils/emittermixin~Emitter} emitter\n// @param {String} event\n// @param {Function} callback\nfunction removeCallback(emitter, event, callback) {\n  var lists = getCallbacksListsForNamespace(emitter, event);\n  var _iterator4 = _createForOfIteratorHelper(lists),\n    _step4;\n  try {\n    for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n      var callbacks = _step4.value;\n      for (var i = 0; i < callbacks.length; i++) {\n        if (callbacks[i].callback == callback) {\n          // Remove the callback from the list (fixing the next index).\n          callbacks.splice(i, 1);\n          i--;\n        }\n      }\n    }\n  } catch (err) {\n    _iterator4.e(err);\n  } finally {\n    _iterator4.f();\n  }\n}\n\n/**\n * The return value of {@link ~EmitterMixin#delegate}.\n *\n * @interface module:utils/emittermixin~EmitterMixinDelegateChain\n */\n\n/**\n * Selects destination for {@link module:utils/emittermixin~EmitterMixin#delegate} events.\n *\n * @method #to\n * @param {module:utils/emittermixin~Emitter} emitter An `EmitterMixin` instance which is the destination for delegated events.\n * @param {String|Function} [nameOrFunction] A custom event name or function which converts the original name string.\n */","import \"core-js/modules/es.regexp.constructor.js\";\nimport \"core-js/modules/es.regexp.dot-all.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.regexp.sticky.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\nimport \"core-js/modules/es.string.match.js\";\nimport \"core-js/modules/es.string.search.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* globals navigator:false */\n\n/**\n * @module utils/env\n */\n\nvar userAgent = navigator.userAgent.toLowerCase();\n\n/**\n * A namespace containing environment and browser information.\n *\n * @namespace\n */\nvar env = {\n  /**\n   * Indicates that the application is running on Macintosh.\n   *\n   * @static\n   * @type {Boolean}\n   */\n  isMac: isMac(userAgent),\n  /**\n   * Indicates that the application is running in Microsoft Edge.\n   *\n   * @static\n   * @type {Boolean}\n   */\n  isEdge: isEdge(userAgent),\n  /**\n   * Indicates that the application is running in Firefox (Gecko).\n   *\n   * @static\n   * @type {Boolean}\n   */\n  isGecko: isGecko(userAgent),\n  /**\n   * Indicates that the application is running in Safari.\n   *\n   * @static\n   * @type {Boolean}\n   */\n  isSafari: isSafari(userAgent),\n  /**\n   * Indicates that the application is running on Android mobile device.\n   *\n   * @static\n   * @type {Boolean}\n   */\n  isAndroid: isAndroid(userAgent),\n  /**\n   * Environment features information.\n   *\n   * @memberOf module:utils/env~env\n   * @namespace\n   */\n  features: {\n    /**\n     * Indicates that the environment supports ES2018 Unicode property escapes — like `\\p{P}` or `\\p{L}`.\n     * More information about unicode properties might be found\n     * [in Unicode Standard Annex #44](https://www.unicode.org/reports/tr44/#GC_Values_Table).\n     *\n     * @type {Boolean}\n     */\n    isRegExpUnicodePropertySupported: isRegExpUnicodePropertySupported()\n  }\n};\nexport default env;\n\n/**\n * Checks if User Agent represented by the string is running on Macintosh.\n *\n * @param {String} userAgent **Lowercase** `navigator.userAgent` string.\n * @returns {Boolean} Whether User Agent is running on Macintosh or not.\n */\nexport function isMac(userAgent) {\n  return userAgent.indexOf('macintosh') > -1;\n}\n\n/**\n * Checks if User Agent represented by the string is Microsoft Edge.\n *\n * @param {String} userAgent **Lowercase** `navigator.userAgent` string.\n * @returns {Boolean} Whether User Agent is Edge or not.\n */\nexport function isEdge(userAgent) {\n  return !!userAgent.match(/edge\\/(\\d+.?\\d*)/);\n}\n\n/**\n * Checks if User Agent represented by the string is Firefox (Gecko).\n *\n * @param {String} userAgent **Lowercase** `navigator.userAgent` string.\n * @returns {Boolean} Whether User Agent is Firefox or not.\n */\nexport function isGecko(userAgent) {\n  return !!userAgent.match(/gecko\\/\\d+/);\n}\n\n/**\n * Checks if User Agent represented by the string is Safari.\n *\n * @param {String} userAgent **Lowercase** `navigator.userAgent` string.\n * @returns {Boolean} Whether User Agent is Safari or not.\n */\nexport function isSafari(userAgent) {\n  return userAgent.indexOf(' applewebkit/') > -1 && userAgent.indexOf('chrome') === -1;\n}\n\n/**\n * Checks if User Agent represented by the string is Android mobile device.\n *\n * @param {String} userAgent **Lowercase** `navigator.userAgent` string.\n * @returns {Boolean} Whether User Agent is Safari or not.\n */\nexport function isAndroid(userAgent) {\n  return userAgent.indexOf('android') > -1;\n}\n\n/**\n * Checks if the current environment supports ES2018 Unicode properties like `\\p{P}` or `\\p{L}`.\n * More information about unicode properties might be found\n * [in Unicode Standard Annex #44](https://www.unicode.org/reports/tr44/#GC_Values_Table).\n *\n * @returns {Boolean}\n */\nexport function isRegExpUnicodePropertySupported() {\n  var isSupported = false;\n\n  // Feature detection for Unicode properties. Added in ES2018. Currently Firefox and Edge do not support it.\n  // See https://github.com/ckeditor/ckeditor5-mention/issues/44#issuecomment-487002174.\n\n  try {\n    // Usage of regular expression literal cause error during build (ckeditor/ckeditor5-dev#534).\n    isSupported = 'ć'.search(new RegExp('[\\\\p{L}]', 'u')) === 0;\n  } catch (error) {\n    // Firefox throws a SyntaxError when the group is unsupported.\n  }\n  return isSupported;\n}","import _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport \"core-js/modules/es.function.name.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/eventinfo\n */\n\nimport spy from './spy';\n\n/**\n * The event object passed to event callbacks. It is used to provide information about the event as well as a tool to\n * manipulate it.\n */\nvar EventInfo = /*#__PURE__*/_createClass(\n/**\n * @param {Object} source The emitter.\n * @param {String} name The event name.\n */\nfunction EventInfo(source, name) {\n  _classCallCheck(this, EventInfo);\n  /**\n   * The object that fired the event.\n   *\n   * @readonly\n   * @member {Object}\n   */\n  this.source = source;\n\n  /**\n   * The event name.\n   *\n   * @readonly\n   * @member {String}\n   */\n  this.name = name;\n\n  /**\n   * Path this event has followed. See {@link module:utils/emittermixin~EmitterMixin#delegate}.\n   *\n   * @readonly\n   * @member {Array.<Object>}\n   */\n  this.path = [];\n\n  // The following methods are defined in the constructor because they must be re-created per instance.\n\n  /**\n   * Stops the event emitter to call further callbacks for this event interaction.\n   *\n   * @method #stop\n   */\n  this.stop = spy();\n\n  /**\n   * Removes the current callback from future interactions of this event.\n   *\n   * @method #off\n   */\n  this.off = spy();\n\n  /**\n   * The value which will be returned by {@link module:utils/emittermixin~EmitterMixin#fire}.\n   *\n   * It's `undefined` by default and can be changed by an event listener:\n   *\n   *\t\tdataController.fire( 'getSelectedContent', ( evt ) => {\n   *\t\t\t// This listener will make `dataController.fire( 'getSelectedContent' )`\n   *\t\t\t// always return an empty DocumentFragment.\n   *\t\t\tevt.return = new DocumentFragment();\n   *\n   *\t\t\t// Make sure no other listeners are executed.\n   *\t\t\tevt.stop();\n   *\t\t} );\n   *\n   * @member #return\n   */\n});\nexport { EventInfo as default };","import \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.fill.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.string.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/fastdiff\n */\n\n/**\n * Finds positions of the first and last change in the given string/array and generates a set of changes:\n *\n *\t\tfastDiff( '12a', '12xyza' );\n *\t\t// [ { index: 2, type: 'insert', values: [ 'x', 'y', 'z' ] } ]\n *\n *\t\tfastDiff( '12a', '12aa' );\n *\t\t// [ { index: 3, type: 'insert', values: [ 'a' ] } ]\n *\n *\t\tfastDiff( '12xyza', '12a' );\n *\t\t// [ { index: 2, type: 'delete', howMany: 3 } ]\n *\n *\t\tfastDiff( [ '1', '2', 'a', 'a' ], [ '1', '2', 'a' ] );\n *\t\t// [ { index: 3, type: 'delete', howMany: 1 } ]\n *\n *\t\tfastDiff( [ '1', '2', 'a', 'b', 'c', '3' ], [ '2', 'a', 'b' ] );\n *\t\t// [ { index: 0, type: 'insert', values: [ '2', 'a', 'b' ] }, { index: 3, type: 'delete', howMany: 6 } ]\n *\n * Passed arrays can contain any type of data, however to compare them correctly custom comparator function\n * should be passed as a third parameter:\n *\n *\t\tfastDiff( [ { value: 1 }, { value: 2 } ], [ { value: 1 }, { value: 3 } ], ( a, b ) => {\n *\t\t\treturn a.value === b.value;\n *\t\t} );\n *\t\t// [ { index: 1, type: 'insert', values: [ { value: 3 } ] }, { index: 2, type: 'delete', howMany: 1 } ]\n *\n * The resulted set of changes can be applied to the input in order to transform it into the output, for example:\n *\n *\t\tlet input = '12abc3';\n *\t\tconst output = '2ab';\n *\t\tconst changes = fastDiff( input, output );\n *\n *\t\tchanges.forEach( change => {\n *\t\t\tif ( change.type == 'insert' ) {\n *\t\t\t\tinput = input.substring( 0, change.index ) + change.values.join( '' ) + input.substring( change.index );\n *\t\t\t} else if ( change.type == 'delete' ) {\n *\t\t\t\tinput = input.substring( 0, change.index ) + input.substring( change.index + change.howMany );\n *\t\t\t}\n *\t\t} );\n *\n *\t\t// input equals output now\n *\n * or in case of arrays:\n *\n *\t\tlet input = [ '1', '2', 'a', 'b', 'c', '3' ];\n *\t\tconst output = [ '2', 'a', 'b' ];\n *\t\tconst changes = fastDiff( input, output );\n *\n *\t\tchanges.forEach( change => {\n *\t\t\tif ( change.type == 'insert' ) {\n *\t\t\t\tinput = input.slice( 0, change.index ).concat( change.values, input.slice( change.index ) );\n *\t\t\t} else if ( change.type == 'delete' ) {\n *\t\t\t\tinput = input.slice( 0, change.index ).concat( input.slice( change.index + change.howMany ) );\n *\t\t\t}\n *\t\t} );\n *\n *\t\t// input equals output now\n *\n * By passing `true` as the fourth parameter (`atomicChanges`) the output of this function will become compatible with\n * the {@link module:utils/diff~diff `diff()`} function:\n *\n *\t\tfastDiff( '12a', '12xyza' );\n *\t\t// [ 'equal', 'equal', 'insert', 'insert', 'insert', 'equal' ]\n *\n * The default output format of this function is compatible with the output format of\n * {@link module:utils/difftochanges~diffToChanges `diffToChanges()`}. The `diffToChanges()` input format is, in turn,\n * compatible with the output of {@link module:utils/diff~diff `diff()`}:\n *\n *\t\tconst a = '1234';\n *\t\tconst b = '12xyz34';\n *\n *\t\t// Both calls will return the same results (grouped changes format).\n *\t\tfastDiff( a, b );\n *\t\tdiffToChanges( diff( a, b ) );\n *\n *\t\t// Again, both calls will return the same results (atomic changes format).\n *\t\tfastDiff( a, b, null, true );\n *\t\tdiff( a, b );\n *\n *\n * @param {Array|String} a Input array or string.\n * @param {Array|String} b Input array or string.\n * @param {Function} [cmp] Optional function used to compare array values, by default `===` (strict equal operator) is used.\n * @param {Boolean} [atomicChanges=false] Whether an array of `inset|delete|equal` operations should\n * be returned instead of changes set. This makes this function compatible with {@link module:utils/diff~diff `diff()`}.\n * @returns {Array} Array of changes.\n */\nexport default function fastDiff(a, b, cmp) {\n  var atomicChanges = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n  // Set the comparator function.\n  cmp = cmp || function (a, b) {\n    return a === b;\n  };\n\n  // Transform text or any iterable into arrays for easier, consistent processing.\n  if (!Array.isArray(a)) {\n    a = Array.from(a);\n  }\n  if (!Array.isArray(b)) {\n    b = Array.from(b);\n  }\n\n  // Find first and last change.\n  var changeIndexes = findChangeBoundaryIndexes(a, b, cmp);\n\n  // Transform into changes array.\n  return atomicChanges ? changeIndexesToAtomicChanges(changeIndexes, b.length) : changeIndexesToChanges(b, changeIndexes);\n}\n\n// Finds position of the first and last change in the given arrays. For example:\n//\n//\t\tconst indexes = findChangeBoundaryIndexes( [ '1', '2', '3', '4' ], [ '1', '3', '4', '2', '4' ] );\n//\t\tconsole.log( indexes ); // { firstIndex: 1, lastIndexOld: 3, lastIndexNew: 4 }\n//\n// The above indexes means that in the first array the modified part is `1[23]4` and in the second array it is `1[342]4`.\n// Based on such indexes, array with `insert`/`delete` operations which allows transforming first value into the second one\n// can be generated.\n//\n// @param {Array} arr1\n// @param {Array} arr2\n// @param {Function} cmp Comparator function.\n// @returns {Object}\n// @returns {Number} return.firstIndex Index of the first change in both values (always the same for both).\n// @returns {Number} result.lastIndexOld Index of the last common value in `arr1`.\n// @returns {Number} result.lastIndexNew Index of the last common value in `arr2`.\nfunction findChangeBoundaryIndexes(arr1, arr2, cmp) {\n  // Find the first difference between passed values.\n  var firstIndex = findFirstDifferenceIndex(arr1, arr2, cmp);\n\n  // If arrays are equal return -1 indexes object.\n  if (firstIndex === -1) {\n    return {\n      firstIndex: -1,\n      lastIndexOld: -1,\n      lastIndexNew: -1\n    };\n  }\n\n  // Remove the common part of each value and reverse them to make it simpler to find the last difference between them.\n  var oldArrayReversed = cutAndReverse(arr1, firstIndex);\n  var newArrayReversed = cutAndReverse(arr2, firstIndex);\n\n  // Find the first difference between reversed values.\n  // It should be treated as \"how many elements from the end the last difference occurred\".\n  //\n  // For example:\n  //\n  // \t\t\t\tinitial\t->\tafter cut\t-> reversed:\n  // oldValue:\t'321ba'\t->\t'21ba'\t\t-> 'ab12'\n  // newValue:\t'31xba'\t->\t'1xba'\t\t-> 'abx1'\n  // lastIndex:\t\t\t\t\t\t\t-> 2\n  //\n  // So the last change occurred two characters from the end of the arrays.\n  var lastIndex = findFirstDifferenceIndex(oldArrayReversed, newArrayReversed, cmp);\n\n  // Use `lastIndex` to calculate proper offset, starting from the beginning (`lastIndex` kind of starts from the end).\n  var lastIndexOld = arr1.length - lastIndex;\n  var lastIndexNew = arr2.length - lastIndex;\n  return {\n    firstIndex: firstIndex,\n    lastIndexOld: lastIndexOld,\n    lastIndexNew: lastIndexNew\n  };\n}\n\n// Returns a first index on which given arrays differ. If both arrays are the same, -1 is returned.\n//\n// @param {Array} arr1\n// @param {Array} arr2\n// @param {Function} cmp Comparator function.\n// @returns {Number}\nfunction findFirstDifferenceIndex(arr1, arr2, cmp) {\n  for (var i = 0; i < Math.max(arr1.length, arr2.length); i++) {\n    if (arr1[i] === undefined || arr2[i] === undefined || !cmp(arr1[i], arr2[i])) {\n      return i;\n    }\n  }\n  return -1; // Return -1 if arrays are equal.\n}\n\n// Returns a copy of the given array with `howMany` elements removed starting from the beginning and in reversed order.\n//\n// @param {Array} arr Array to be processed.\n// @param {Number} howMany How many elements from array beginning to remove.\n// @returns {Array} Shortened and reversed array.\nfunction cutAndReverse(arr, howMany) {\n  return arr.slice(howMany).reverse();\n}\n\n// Generates changes array based on change indexes from `findChangeBoundaryIndexes` function. This function will\n// generate array with 0 (no changes), 1 (deletion or insertion) or 2 records (insertion and deletion).\n//\n// @param {Array} newArray New array for which change indexes were calculated.\n// @param {Object} changeIndexes Change indexes object from `findChangeBoundaryIndexes` function.\n// @returns {Array.<Object>} Array of changes compatible with {@link module:utils/difftochanges~diffToChanges} format.\nfunction changeIndexesToChanges(newArray, changeIndexes) {\n  var result = [];\n  var firstIndex = changeIndexes.firstIndex,\n    lastIndexOld = changeIndexes.lastIndexOld,\n    lastIndexNew = changeIndexes.lastIndexNew;\n\n  // Order operations as 'insert', 'delete' array to keep compatibility with {@link module:utils/difftochanges~diffToChanges}\n  // in most cases. However, 'diffToChanges' does not stick to any order so in some cases\n  // (for example replacing '12345' with 'abcd') it will generate 'delete', 'insert' order.\n  if (lastIndexNew - firstIndex > 0) {\n    result.push({\n      index: firstIndex,\n      type: 'insert',\n      values: newArray.slice(firstIndex, lastIndexNew)\n    });\n  }\n  if (lastIndexOld - firstIndex > 0) {\n    result.push({\n      index: firstIndex + (lastIndexNew - firstIndex),\n      // Increase index of what was inserted.\n      type: 'delete',\n      howMany: lastIndexOld - firstIndex\n    });\n  }\n  return result;\n}\n\n// Generates array with set `equal|insert|delete` operations based on change indexes from `findChangeBoundaryIndexes` function.\n//\n// @param {Object} changeIndexes Change indexes object from `findChangeBoundaryIndexes` function.\n// @param {Number} newLength Length of the new array on which `findChangeBoundaryIndexes` calculated change indexes.\n// @returns {Array.<String>} Array of changes compatible with {@link module:utils/diff~diff} format.\nfunction changeIndexesToAtomicChanges(changeIndexes, newLength) {\n  var firstIndex = changeIndexes.firstIndex,\n    lastIndexOld = changeIndexes.lastIndexOld,\n    lastIndexNew = changeIndexes.lastIndexNew;\n\n  // No changes.\n  if (firstIndex === -1) {\n    return Array(newLength).fill('equal');\n  }\n  var result = [];\n  if (firstIndex > 0) {\n    result = result.concat(Array(firstIndex).fill('equal'));\n  }\n  if (lastIndexNew - firstIndex > 0) {\n    result = result.concat(Array(lastIndexNew - firstIndex).fill('insert'));\n  }\n  if (lastIndexOld - firstIndex > 0) {\n    result = result.concat(Array(lastIndexOld - firstIndex).fill('delete'));\n  }\n  if (lastIndexNew < newLength) {\n    result = result.concat(Array(newLength - lastIndexNew).fill('equal'));\n  }\n  return result;\n}","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/first\n */\n\n/**\n * Returns first item of the given `iterable`.\n *\n * @param {Iterable.<*>} iterable\n * @returns {*}\n */\nexport default function first(iterable) {\n  var iteratorItem = iterable.next();\n  if (iteratorItem.done) {\n    return null;\n  }\n  return iteratorItem.value;\n}","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* global setTimeout, clearTimeout */\n\n/**\n * @module utils/focustracker\n */\n\nimport DomEmitterMixin from './dom/emittermixin';\nimport ObservableMixin from './observablemixin';\nimport CKEditorError from './ckeditorerror';\nimport mix from './mix';\n\n/**\n * Allows observing a group of `HTMLElement`s whether at least one of them is focused.\n *\n * Used by the {@link module:core/editor/editor~Editor} in order to track whether the focus is still within the application,\n * or were used outside of its UI.\n *\n * **Note** `focus` and `blur` listeners use event capturing, so it is only needed to register wrapper `HTMLElement`\n * which contain other `focusable` elements. But note that this wrapper element has to be focusable too\n * (have e.g. `tabindex=\"-1\"`).\n *\n * @mixes module:utils/dom/emittermixin~EmitterMixin\n * @mixes module:utils/observablemixin~ObservableMixin\n */\nvar FocusTracker = /*#__PURE__*/function () {\n  function FocusTracker() {\n    _classCallCheck(this, FocusTracker);\n    /**\n     * True when one of the registered elements is focused.\n     *\n     * @readonly\n     * @observable\n     * @member {Boolean} #isFocused\n     */\n    this.set('isFocused', false);\n\n    /**\n     * The currently focused element.\n     *\n     * While {@link #isFocused `isFocused`} remains `true`, the focus can\n     * move between different UI elements. This property tracks those\n     * elements and tells which one is currently focused.\n     *\n     * @readonly\n     * @observable\n     * @member {HTMLElement|null}\n     */\n    this.set('focusedElement', null);\n\n    /**\n     * List of registered elements.\n     *\n     * @private\n     * @member {Set.<HTMLElement>}\n     */\n    this._elements = new Set();\n\n    /**\n     * Event loop timeout.\n     *\n     * @private\n     * @member {Number}\n     */\n    this._nextEventLoopTimeout = null;\n  }\n\n  /**\n   * Starts tracking the specified element.\n   *\n   * @param {HTMLElement} element\n   */\n  return _createClass(FocusTracker, [{\n    key: \"add\",\n    value: function add(element) {\n      var _this = this;\n      if (this._elements.has(element)) {\n        throw new CKEditorError('focusTracker-add-element-already-exist', this);\n      }\n      this.listenTo(element, 'focus', function () {\n        return _this._focus(element);\n      }, {\n        useCapture: true\n      });\n      this.listenTo(element, 'blur', function () {\n        return _this._blur();\n      }, {\n        useCapture: true\n      });\n      this._elements.add(element);\n    }\n\n    /**\n     * Stops tracking the specified element and stops listening on this element.\n     *\n     * @param {HTMLElement} element\n     */\n  }, {\n    key: \"remove\",\n    value: function remove(element) {\n      if (element === this.focusedElement) {\n        this._blur(element);\n      }\n      if (this._elements.has(element)) {\n        this.stopListening(element);\n        this._elements.delete(element);\n      }\n    }\n\n    /**\n     * Destroys the focus tracker by:\n     * - Disabling all event listeners attached to tracked elements.\n     * - Removing all tracked elements that were previously added.\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.stopListening();\n    }\n\n    /**\n     * Stores currently focused element and set {#isFocused} as `true`.\n     *\n     * @private\n     * @param {HTMLElement} element Element which has been focused.\n     */\n  }, {\n    key: \"_focus\",\n    value: function _focus(element) {\n      clearTimeout(this._nextEventLoopTimeout);\n      this.focusedElement = element;\n      this.isFocused = true;\n    }\n\n    /**\n     * Clears currently focused element and set {@link #isFocused} as `false`.\n     * This method uses `setTimeout` to change order of fires `blur` and `focus` events.\n     *\n     * @private\n     * @fires blur\n     */\n  }, {\n    key: \"_blur\",\n    value: function _blur() {\n      var _this2 = this;\n      clearTimeout(this._nextEventLoopTimeout);\n      this._nextEventLoopTimeout = setTimeout(function () {\n        _this2.focusedElement = null;\n        _this2.isFocused = false;\n      }, 0);\n    }\n\n    /**\n     * @event focus\n     */\n\n    /**\n     * @event blur\n     */\n  }]);\n}();\nexport { FocusTracker as default };\nmix(FocusTracker, DomEmitterMixin);\nmix(FocusTracker, ObservableMixin);","import \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/isiterable\n */\n\n/**\n * Checks if value implements iterator interface.\n *\n * @param {*} value The value to check.\n * @returns {Boolean} True if value implements iterator interface.\n */\nexport default function isIterable(value) {\n  return !!(value && value[Symbol.iterator]);\n}","import \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.reduce.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.split.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Set of utils related to keyboard support.\n *\n * @module utils/keyboard\n */\n\nimport CKEditorError from './ckeditorerror';\nimport env from './env';\nvar macGlyphsToModifiers = {\n  '⌘': 'ctrl',\n  '⇧': 'shift',\n  '⌥': 'alt'\n};\nvar modifiersToMacGlyphs = {\n  'ctrl': '⌘',\n  'shift': '⇧',\n  'alt': '⌥'\n};\n\n/**\n * Object with `keyName => keyCode` pairs for a set of known keys.\n *\n * Contains:\n *\n * * `a-z`,\n * * `0-9`,\n * * `f1-f12`,\n * * `arrow(left|up|right|bottom)`,\n * * `backspace`, `delete`, `enter`, `esc`, `tab`,\n * * `ctrl`, `cmd`, `shift`, `alt`.\n */\nexport var keyCodes = generateKnownKeyCodes();\n\n/**\n * Converts a key name or a {@link module:utils/keyboard~KeystrokeInfo keystroke info} into a key code.\n *\n * Note: Key names are matched with {@link module:utils/keyboard~keyCodes} in a case-insensitive way.\n *\n * @param {String|module:utils/keyboard~KeystrokeInfo} Key name (see {@link module:utils/keyboard~keyCodes})\n * or a keystroke data object.\n * @returns {Number} Key or keystroke code.\n */\nexport function getCode(key) {\n  var keyCode;\n  if (typeof key == 'string') {\n    keyCode = keyCodes[key.toLowerCase()];\n    if (!keyCode) {\n      /**\n       * Unknown key name. Only key names contained by the {@link module:utils/keyboard~keyCodes} can be used.\n       *\n       * @errror keyboard-unknown-key\n       * @param {String} key\n       */\n      throw new CKEditorError('keyboard-unknown-key: Unknown key name.', null, {\n        key: key\n      });\n    }\n  } else {\n    keyCode = key.keyCode + (key.altKey ? keyCodes.alt : 0) + (key.ctrlKey ? keyCodes.ctrl : 0) + (key.shiftKey ? keyCodes.shift : 0);\n  }\n  return keyCode;\n}\n\n/**\n * Parses keystroke and returns a keystroke code that will match the code returned by\n * link {@link module:utils/keyboard.getCode} for a corresponding {@link module:utils/keyboard~KeystrokeInfo keystroke info}.\n *\n * The keystroke can be passed in two formats:\n *\n * * as a single string – e.g. `ctrl + A`,\n * * as an array of {@link module:utils/keyboard~keyCodes known key names} and key codes – e.g.:\n *   * `[ 'ctrl', 32 ]` (ctrl + space),\n *   * `[ 'ctrl', 'a' ]` (ctrl + A).\n *\n * Note: Key names are matched with {@link module:utils/keyboard~keyCodes} in a case-insensitive way.\n *\n * Note: Only keystrokes with a single non-modifier key are supported (e.g. `ctrl+A` is OK, but `ctrl+A+B` is not).\n *\n * @param {String|Array.<Number|String>} keystroke Keystroke definition.\n * @returns {Number} Keystroke code.\n */\nexport function parseKeystroke(keystroke) {\n  if (typeof keystroke == 'string') {\n    keystroke = splitKeystrokeText(keystroke);\n  }\n  return keystroke.map(function (key) {\n    return typeof key == 'string' ? getCode(key) : key;\n  }).reduce(function (key, sum) {\n    return sum + key;\n  }, 0);\n}\n\n/**\n * It translates any keystroke string text like `\"CTRL+A\"` to an\n * environment–specific keystroke, i.e. `\"⌘A\"` on Mac OSX.\n *\n * @param {String} keystroke Keystroke text.\n * @returns {String} Keystroke text specific for the environment.\n */\nexport function getEnvKeystrokeText(keystroke) {\n  if (!env.isMac) {\n    return keystroke;\n  }\n  return splitKeystrokeText(keystroke)\n  // Replace modifiers (e.g. \"ctrl\") with Mac glyphs (e.g. \"⌘\") first.\n  .map(function (key) {\n    return modifiersToMacGlyphs[key.toLowerCase()] || key;\n  })\n\n  // Decide whether to put \"+\" between keys in the keystroke or not.\n  .reduce(function (value, key) {\n    if (value.slice(-1) in macGlyphsToModifiers) {\n      return value + key;\n    } else {\n      return value + '+' + key;\n    }\n  });\n}\nfunction generateKnownKeyCodes() {\n  var keyCodes = {\n    arrowleft: 37,\n    arrowup: 38,\n    arrowright: 39,\n    arrowdown: 40,\n    backspace: 8,\n    delete: 46,\n    enter: 13,\n    space: 32,\n    esc: 27,\n    tab: 9,\n    // The idea about these numbers is that they do not collide with any real key codes, so we can use them\n    // like bit masks.\n    ctrl: 0x110000,\n    // Has the same code as ctrl, because their behaviour should be unified across the editor.\n    // See http://ckeditor.github.io/editor-recommendations/general-policies#ctrl-vs-cmd\n    cmd: 0x110000,\n    shift: 0x220000,\n    alt: 0x440000\n  };\n\n  // a-z\n  for (var code = 65; code <= 90; code++) {\n    var letter = String.fromCharCode(code);\n    keyCodes[letter.toLowerCase()] = code;\n  }\n\n  // 0-9\n  for (var _code = 48; _code <= 57; _code++) {\n    keyCodes[_code - 48] = _code;\n  }\n\n  // F1-F12\n  for (var _code2 = 112; _code2 <= 123; _code2++) {\n    keyCodes['f' + (_code2 - 111)] = _code2;\n  }\n  return keyCodes;\n}\nfunction splitKeystrokeText(keystroke) {\n  return keystroke.split(/\\s*\\+\\s*/);\n}\n\n/**\n * Information about a keystroke.\n *\n * @interface module:utils/keyboard~KeystrokeInfo\n */\n\n/**\n * The [key code](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode).\n *\n * @member {Number} module:utils/keyboard~KeystrokeInfo#keyCode\n */\n\n/**\n * Whether the <kbd>Alt</kbd> modifier was pressed.\n *\n * @member {Bolean} module:utils/keyboard~KeystrokeInfo#altKey\n */\n\n/**\n * Whether the <kbd>Ctrl</kbd> or <kbd>Cmd</kbd> modifier was pressed.\n *\n * @member {Bolean} module:utils/keyboard~KeystrokeInfo#ctrlKey\n */\n\n/**\n * Whether the <kbd>Shift</kbd> modifier was pressed.\n *\n * @member {Bolean} module:utils/keyboard~KeystrokeInfo#shiftKey\n */","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/keystrokehandler\n */\n\nimport DomEmitterMixin from './dom/emittermixin';\nimport { getCode, parseKeystroke } from './keyboard';\n\n/**\n * Keystroke handler allows registering callbacks for given keystrokes.\n *\n * The most frequent use of this class is through the {@link module:core/editor/editor~Editor#keystrokes `editor.keystrokes`}\n * property. It allows listening to keystrokes executed in the editing view:\n *\n *\t\teditor.keystrokes.set( 'Ctrl+A', ( keyEvtData, cancel ) => {\n *\t\t\tconsole.log( 'Ctrl+A has been pressed' );\n *\t\t\tcancel();\n *\t\t} );\n *\n * However, this utility class can be used in various part of the UI. For instance, a certain {@link module:ui/view~View}\n * can use it like this:\n *\n *\t\tclass MyView extends View {\n *\t\t\tconstructor() {\n *\t\t\t\tthis.keystrokes = new KeystrokeHandler();\n *\n * \t\t\t\tthis.keystrokes.set( 'tab', handleTabKey );\n *\t\t\t}\n *\n *\t\t\trender() {\n *\t\t\t\tsuper.render();\n *\n *\t\t\t\tthis.keystrokes.listenTo( this.element );\n *\t\t\t}\n *\t\t}\n *\n * That keystroke handler will listen to `keydown` events fired in this view's main element.\n *\n */\nvar KeystrokeHandler = /*#__PURE__*/function () {\n  /**\n   * Creates an instance of the keystroke handler.\n   */\n  function KeystrokeHandler() {\n    _classCallCheck(this, KeystrokeHandler);\n    /**\n     * Listener used to listen to events for easier keystroke handler destruction.\n     *\n     * @protected\n     * @member {module:utils/dom/emittermixin~Emitter}\n     */\n    this._listener = Object.create(DomEmitterMixin);\n  }\n\n  /**\n   * Starts listening for `keydown` events from a given emitter.\n   *\n   * @param {module:utils/emittermixin~Emitter} emitter\n   */\n  return _createClass(KeystrokeHandler, [{\n    key: \"listenTo\",\n    value: function listenTo(emitter) {\n      var _this = this;\n      // The #_listener works here as a kind of dispatcher. It groups the events coming from the same\n      // keystroke so the listeners can be attached to them with different priorities.\n      //\n      // E.g. all the keystrokes with the `keyCode` of 42 coming from the `emitter` are propagated\n      // as a `_keydown:42` event by the `_listener`. If there's a callback created by the `set`\n      // method for this 42 keystroke, it listens to the `_listener#_keydown:42` event only and interacts\n      // only with other listeners of this particular event, thus making it possible to prioritize\n      // the listeners and safely cancel execution, when needed. Instead of duplicating the Emitter logic,\n      // the KeystrokeHandler re–uses it to do its job.\n      this._listener.listenTo(emitter, 'keydown', function (evt, keyEvtData) {\n        _this._listener.fire('_keydown:' + getCode(keyEvtData), keyEvtData);\n      });\n    }\n\n    /**\n     * Registers a handler for the specified keystroke.\n     *\n     * @param {String|Array.<String|Number>} keystroke Keystroke defined in a format accepted by\n     * the {@link module:utils/keyboard~parseKeystroke} function.\n     * @param {Function} callback A function called with the\n     * {@link module:engine/view/observer/keyobserver~KeyEventData key event data} object and\n     * a helper funcion to call both `preventDefault()` and `stopPropagation()` on the underlying event.\n     * @param {Object} [options={}] Additional options.\n     * @param {module:utils/priorities~PriorityString|Number} [options.priority='normal'] The priority of the keystroke\n     * callback. The higher the priority value the sooner the callback will be executed. Keystrokes having the same priority\n     * are called in the order they were added.\n     */\n  }, {\n    key: \"set\",\n    value: function set(keystroke, callback) {\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      var keyCode = parseKeystroke(keystroke);\n      var priority = options.priority;\n\n      // Execute the passed callback on KeystrokeHandler#_keydown.\n      // TODO: https://github.com/ckeditor/ckeditor5-utils/issues/144\n      this._listener.listenTo(this._listener, '_keydown:' + keyCode, function (evt, keyEvtData) {\n        callback(keyEvtData, function () {\n          // Stop the event in the DOM: no listener in the web page\n          // will be triggered by this event.\n          keyEvtData.preventDefault();\n          keyEvtData.stopPropagation();\n\n          // Stop the event in the KeystrokeHandler: no more callbacks\n          // will be executed for this keystroke.\n          evt.stop();\n        });\n\n        // Mark this keystroke as handled by the callback. See: #press.\n        evt.return = true;\n      }, {\n        priority: priority\n      });\n    }\n\n    /**\n     * Triggers a keystroke handler for a specified key combination, if such a keystroke was {@link #set defined}.\n     *\n     * @param {module:engine/view/observer/keyobserver~KeyEventData} keyEvtData Key event data.\n     * @returns {Boolean} Whether the keystroke was handled.\n     */\n  }, {\n    key: \"press\",\n    value: function press(keyEvtData) {\n      return !!this._listener.fire('_keydown:' + getCode(keyEvtData), keyEvtData);\n    }\n\n    /**\n     * Destroys the keystroke handler.\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this._listener.stopListening();\n    }\n  }]);\n}();\nexport { KeystrokeHandler as default };","import _classCallCheck from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/locale\n */\n\n/* globals console */\n\nimport { translate } from './translation-service';\nvar RTL_LANGUAGE_CODES = ['ar', 'fa', 'he', 'ku', 'ug'];\n\n/**\n * Represents the localization services.\n */\nvar Locale = /*#__PURE__*/function () {\n  /**\n   * Creates a new instance of the Locale class. Learn more about\n   * {@glink features/ui-language configuring language of the editor}.\n   *\n   * @param {Object} [options] Locale configuration.\n   * @param {String} [options.uiLanguage='en'] The editor UI language code in the\n   * [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) format. See {@link #uiLanguage}.\n   * @param {String} [options.contentLanguage] The editor content language code in the\n   * [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) format. If not specified, the same as `options.language`.\n   * See {@link #contentLanguage}.\n   */\n  function Locale() {\n    var _this = this;\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _classCallCheck(this, Locale);\n    /**\n     * The editor UI language code in the [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) format.\n     *\n     * If the {@link #contentLanguage content language} was not specified in the `Locale` constructor,\n     * it also defines the language of the content.\n     *\n     * @readonly\n     * @member {String}\n     */\n    this.uiLanguage = options.uiLanguage || 'en';\n\n    /**\n     * The editor content language code in the [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) format.\n     *\n     * Usually the same as {@link #uiLanguage editor language}, it can be customized by passing an optional\n     * argument to the `Locale` constructor.\n     *\n     * @readonly\n     * @member {String}\n     */\n    this.contentLanguage = options.contentLanguage || this.uiLanguage;\n\n    /**\n     * Text direction of the {@link #uiLanguage editor UI language}. Either `'ltr'` or `'rtl'`.\n     *\n     * @readonly\n     * @member {String}\n     */\n    this.uiLanguageDirection = getLanguageDirection(this.uiLanguage);\n\n    /**\n     * Text direction of the {@link #contentLanguage editor content language}.\n     *\n     * If the content language was passed directly to the `Locale` constructor, this property represents the\n     * direction of that language.\n     *\n     * If the {@link #contentLanguage editor content language} was derived from the {@link #uiLanguage editor language},\n     * the content language direction is the same as the {@link #uiLanguageDirection UI language direction}.\n     *\n     * The value is either `'ltr'` or `'rtl'`.\n     *\n     * @readonly\n     * @member {String}\n     */\n    this.contentLanguageDirection = getLanguageDirection(this.contentLanguage);\n\n    /**\n     * Translates the given string to the {@link #uiLanguage}. This method is also available in\n     * {@link module:core/editor/editor~Editor#t} and {@link module:ui/view~View#t}.\n     *\n     * The strings may contain placeholders (`%<index>`) for values which are passed as the second argument.\n     * `<index>` is the index in the `values` array.\n     *\n     *\t\teditor.t( 'Created file \"%0\" in %1ms.', [ fileName, timeTaken ] );\n     *\n     * This method's context is statically bound to Locale instance,\n     * so it can be called as a function:\n     *\n     *\t\tconst t = this.t;\n     *\t\tt( 'Label' );\n     *\n     * @method #t\n     * @param {String} str The string to translate.\n     * @param {String[]} [values] Values that should be used to interpolate the string.\n     */\n    this.t = function () {\n      return _this._t.apply(_this, arguments);\n    };\n  }\n\n  /**\n   * The editor UI language code in the [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) format.\n   *\n   * **Note**: This property has been deprecated. Please use {@link #uiLanguage} and {@link #contentLanguage}\n   * properties instead.\n   *\n   * @deprecated\n   * @member {String}\n   */\n  return _createClass(Locale, [{\n    key: \"language\",\n    get: function get() {\n      /**\n       * The {@link module:utils/locale~Locale#language `Locale#language`} property has been deprecated and will\n       * be removed in the near future. Please use {@link #uiLanguage} and {@link #contentLanguage} properties instead.\n       *\n       * @error locale-deprecated-language-property\n       */\n      console.warn('locale-deprecated-language-property: ' + 'The Locale#language property has been deprecated and will be removed in the near future. ' + 'Please use #uiLanguage and #contentLanguage properties instead.');\n      return this.uiLanguage;\n    }\n\n    /**\n     * Base for the {@link #t} method.\n     *\n     * @private\n     */\n  }, {\n    key: \"_t\",\n    value: function _t(str, values) {\n      var translatedString = translate(this.uiLanguage, str);\n      if (values) {\n        translatedString = translatedString.replace(/%(\\d+)/g, function (match, index) {\n          return index < values.length ? values[index] : match;\n        });\n      }\n      return translatedString;\n    }\n  }]);\n}(); // Helps determine whether a language is LTR or RTL.\n//\n// @param {String} language The ISO 639-1 language code.\n// @returns {String} 'ltr' or 'rtl\nexport { Locale as default };\nfunction getLanguageDirection(languageCode) {\n  return RTL_LANGUAGE_CODES.includes(languageCode) ? 'rtl' : 'ltr';\n}","import \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.object.get-own-property-names.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/mix\n */\n\n/**\n * Copies enumerable properties and symbols from the objects given as 2nd+ parameters to the\n * prototype of first object (a constructor).\n *\n *\t\tclass Editor {\n *\t\t\t...\n *\t\t}\n *\n *\t\tconst SomeMixin = {\n *\t\t\ta() {\n *\t\t\t\treturn 'a';\n *\t\t\t}\n *\t\t};\n *\n *\t\tmix( Editor, SomeMixin, ... );\n *\n *\t\tnew Editor().a(); // -> 'a'\n *\n * Note: Properties which already exist in the base class will not be overriden.\n *\n * @param {Function} [baseClass] Class which prototype will be extended.\n * @param {Object} [...mixins] Objects from which to get properties.\n */\nexport default function mix(baseClass) {\n  for (var _len = arguments.length, mixins = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    mixins[_key - 1] = arguments[_key];\n  }\n  mixins.forEach(function (mixin) {\n    Object.getOwnPropertyNames(mixin).concat(Object.getOwnPropertySymbols(mixin)).forEach(function (key) {\n      if (key in baseClass.prototype) {\n        return;\n      }\n      var sourceDescriptor = Object.getOwnPropertyDescriptor(mixin, key);\n      sourceDescriptor.enumerable = false;\n      Object.defineProperty(baseClass.prototype, key, sourceDescriptor);\n    });\n  });\n}","import \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/objecttomap\n */\n\n/**\n * Transforms object to map.\n *\n *\t\tconst map = objectToMap( { 'foo': 1, 'bar': 2 } );\n *\t\tmap.get( 'foo' ); // 1\n *\n * @param {Object} obj Object to transform.\n * @returns {Map} Map created from object.\n */\nexport default function objectToMap(obj) {\n  var map = new Map();\n  for (var key in obj) {\n    map.set(key, obj[key]);\n  }\n  return map;\n}","import _typeof from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/typeof.js\";\nimport _toConsumableArray from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.every.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/observablemixin\n */\n\nimport EmitterMixin from './emittermixin';\nimport CKEditorError from './ckeditorerror';\nimport { extend, isObject } from 'lodash-es';\nvar observablePropertiesSymbol = Symbol('observableProperties');\nvar boundObservablesSymbol = Symbol('boundObservables');\nvar boundPropertiesSymbol = Symbol('boundProperties');\n\n/**\n * Mixin that injects the \"observable properties\" and data binding functionality described in the\n * {@link ~Observable} interface.\n *\n * Read more about the concept of observables in the:\n * * {@glink framework/guides/architecture/core-editor-architecture#event-system-and-observables \"Event system and observables\"}\n * section of the {@glink framework/guides/architecture/core-editor-architecture \"Core editor architecture\"} guide,\n * * {@glink framework/guides/deep-dive/observables \"Observables\" deep dive} guide.\n *\n * @mixin ObservableMixin\n * @mixes module:utils/emittermixin~EmitterMixin\n * @implements module:utils/observablemixin~Observable\n */\nvar ObservableMixin = {\n  /**\n   * @inheritDoc\n   */\n  set: function set(name, value) {\n    var _this = this;\n    // If the first parameter is an Object, iterate over its properties.\n    if (isObject(name)) {\n      Object.keys(name).forEach(function (property) {\n        _this.set(property, name[property]);\n      }, this);\n      return;\n    }\n    initObservable(this);\n    var properties = this[observablePropertiesSymbol];\n    if (name in this && !properties.has(name)) {\n      /**\n       * Cannot override an existing property.\n       *\n       * This error is thrown when trying to {@link ~Observable#set set} an property with\n       * a name of an already existing property. For example:\n       *\n       *\t\tlet observable = new Model();\n       *\t\tobservable.property = 1;\n       *\t\tobservable.set( 'property', 2 );\t\t\t// throws\n       *\n       *\t\tobservable.set( 'property', 1 );\n       *\t\tobservable.set( 'property', 2 );\t\t\t// ok, because this is an existing property.\n       *\n       * @error observable-set-cannot-override\n       */\n      throw new CKEditorError('observable-set-cannot-override: Cannot override an existing property.', this);\n    }\n    Object.defineProperty(this, name, {\n      enumerable: true,\n      configurable: true,\n      get: function get() {\n        return properties.get(name);\n      },\n      set: function set(value) {\n        var oldValue = properties.get(name);\n\n        // Fire `set` event before the new value will be set to make it possible\n        // to override observable property without affecting `change` event.\n        // See https://github.com/ckeditor/ckeditor5-utils/issues/171.\n        var newValue = this.fire('set:' + name, name, value, oldValue);\n        if (newValue === undefined) {\n          newValue = value;\n        }\n\n        // Allow undefined as an initial value like A.define( 'x', undefined ) (#132).\n        // Note: When properties map has no such own property, then its value is undefined.\n        if (oldValue !== newValue || !properties.has(name)) {\n          properties.set(name, newValue);\n          this.fire('change:' + name, name, newValue, oldValue);\n        }\n      }\n    });\n    this[name] = value;\n  },\n  /**\n   * @inheritDoc\n   */\n  bind: function bind() {\n    var _this2 = this;\n    for (var _len = arguments.length, bindProperties = new Array(_len), _key = 0; _key < _len; _key++) {\n      bindProperties[_key] = arguments[_key];\n    }\n    if (!bindProperties.length || !isStringArray(bindProperties)) {\n      /**\n       * All properties must be strings.\n       *\n       * @error observable-bind-wrong-properties\n       */\n      throw new CKEditorError('observable-bind-wrong-properties: All properties must be strings.', this);\n    }\n    if (new Set(bindProperties).size !== bindProperties.length) {\n      /**\n       * Properties must be unique.\n       *\n       * @error observable-bind-duplicate-properties\n       */\n      throw new CKEditorError('observable-bind-duplicate-properties: Properties must be unique.', this);\n    }\n    initObservable(this);\n    var boundProperties = this[boundPropertiesSymbol];\n    bindProperties.forEach(function (propertyName) {\n      if (boundProperties.has(propertyName)) {\n        /**\n         * Cannot bind the same property more that once.\n         *\n         * @error observable-bind-rebind\n         */\n        throw new CKEditorError('observable-bind-rebind: Cannot bind the same property more that once.', _this2);\n      }\n    });\n    var bindings = new Map();\n\n    // @typedef {Object} Binding\n    // @property {Array} property Property which is bound.\n    // @property {Array} to Array of observable–property components of the binding (`{ observable: ..., property: .. }`).\n    // @property {Array} callback A function which processes `to` components.\n    bindProperties.forEach(function (a) {\n      var binding = {\n        property: a,\n        to: []\n      };\n      boundProperties.set(a, binding);\n      bindings.set(a, binding);\n    });\n\n    // @typedef {Object} BindChain\n    // @property {Function} to See {@link ~ObservableMixin#_bindTo}.\n    // @property {Function} toMany See {@link ~ObservableMixin#_bindToMany}.\n    // @property {module:utils/observablemixin~Observable} _observable The observable which initializes the binding.\n    // @property {Array} _bindProperties Array of `_observable` properties to be bound.\n    // @property {Array} _to Array of `to()` observable–properties (`{ observable: toObservable, properties: ...toProperties }`).\n    // @property {Map} _bindings Stores bindings to be kept in\n    // {@link ~ObservableMixin#_boundProperties}/{@link ~ObservableMixin#_boundObservables}\n    // initiated in this binding chain.\n    return {\n      to: bindTo,\n      toMany: bindToMany,\n      _observable: this,\n      _bindProperties: bindProperties,\n      _to: [],\n      _bindings: bindings\n    };\n  },\n  /**\n   * @inheritDoc\n   */\n  unbind: function unbind() {\n    var _this3 = this;\n    // Nothing to do here if not inited yet.\n    if (!(observablePropertiesSymbol in this)) {\n      return;\n    }\n    var boundProperties = this[boundPropertiesSymbol];\n    var boundObservables = this[boundObservablesSymbol];\n    for (var _len2 = arguments.length, unbindProperties = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      unbindProperties[_key2] = arguments[_key2];\n    }\n    if (unbindProperties.length) {\n      if (!isStringArray(unbindProperties)) {\n        /**\n         * Properties must be strings.\n         *\n         * @error observable-unbind-wrong-properties\n         */\n        throw new CKEditorError('observable-unbind-wrong-properties: Properties must be strings.', this);\n      }\n      unbindProperties.forEach(function (propertyName) {\n        var binding = boundProperties.get(propertyName);\n\n        // Nothing to do if the binding is not defined\n        if (!binding) {\n          return;\n        }\n        var toObservable, toProperty, toProperties, toPropertyBindings;\n        binding.to.forEach(function (to) {\n          // TODO: ES6 destructuring.\n          toObservable = to[0];\n          toProperty = to[1];\n          toProperties = boundObservables.get(toObservable);\n          toPropertyBindings = toProperties[toProperty];\n          toPropertyBindings.delete(binding);\n          if (!toPropertyBindings.size) {\n            delete toProperties[toProperty];\n          }\n          if (!Object.keys(toProperties).length) {\n            boundObservables.delete(toObservable);\n            _this3.stopListening(toObservable, 'change');\n          }\n        });\n        boundProperties.delete(propertyName);\n      });\n    } else {\n      boundObservables.forEach(function (bindings, boundObservable) {\n        _this3.stopListening(boundObservable, 'change');\n      });\n      boundObservables.clear();\n      boundProperties.clear();\n    }\n  },\n  /**\n   * @inheritDoc\n   */\n  decorate: function decorate(methodName) {\n    var _this4 = this;\n    var originalMethod = this[methodName];\n    if (!originalMethod) {\n      /**\n       * Cannot decorate an undefined method.\n       *\n       * @error observablemixin-cannot-decorate-undefined\n       * @param {Object} object The object which method should be decorated.\n       * @param {String} methodName Name of the method which does not exist.\n       */\n      throw new CKEditorError('observablemixin-cannot-decorate-undefined: Cannot decorate an undefined method.', this, {\n        object: this,\n        methodName: methodName\n      });\n    }\n    this.on(methodName, function (evt, args) {\n      evt.return = originalMethod.apply(_this4, args);\n    });\n    this[methodName] = function () {\n      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n      return this.fire(methodName, args);\n    };\n  }\n};\nextend(ObservableMixin, EmitterMixin);\nexport default ObservableMixin;\n\n// Init symbol properties needed to for the observable mechanism to work.\n//\n// @private\n// @param {module:utils/observablemixin~ObservableMixin} observable\nfunction initObservable(observable) {\n  // Do nothing if already inited.\n  if (observablePropertiesSymbol in observable) {\n    return;\n  }\n\n  // The internal hash containing the observable's state.\n  //\n  // @private\n  // @type {Map}\n  Object.defineProperty(observable, observablePropertiesSymbol, {\n    value: new Map()\n  });\n\n  // Map containing bindings to external observables. It shares the binding objects\n  // (`{ observable: A, property: 'a', to: ... }`) with {@link module:utils/observablemixin~ObservableMixin#_boundProperties} and\n  // it is used to observe external observables to update own properties accordingly.\n  // See {@link module:utils/observablemixin~ObservableMixin#bind}.\n  //\n  //\t\tA.bind( 'a', 'b', 'c' ).to( B, 'x', 'y', 'x' );\n  //\t\tconsole.log( A._boundObservables );\n  //\n  //\t\t\tMap( {\n  //\t\t\t\tB: {\n  //\t\t\t\t\tx: Set( [\n  //\t\t\t\t\t\t{ observable: A, property: 'a', to: [ [ B, 'x' ] ] },\n  //\t\t\t\t\t\t{ observable: A, property: 'c', to: [ [ B, 'x' ] ] }\n  //\t\t\t\t\t] ),\n  //\t\t\t\t\ty: Set( [\n  //\t\t\t\t\t\t{ observable: A, property: 'b', to: [ [ B, 'y' ] ] },\n  //\t\t\t\t\t] )\n  //\t\t\t\t}\n  //\t\t\t} )\n  //\n  //\t\tA.bind( 'd' ).to( B, 'z' ).to( C, 'w' ).as( callback );\n  //\t\tconsole.log( A._boundObservables );\n  //\n  //\t\t\tMap( {\n  //\t\t\t\tB: {\n  //\t\t\t\t\tx: Set( [\n  //\t\t\t\t\t\t{ observable: A, property: 'a', to: [ [ B, 'x' ] ] },\n  //\t\t\t\t\t\t{ observable: A, property: 'c', to: [ [ B, 'x' ] ] }\n  //\t\t\t\t\t] ),\n  //\t\t\t\t\ty: Set( [\n  //\t\t\t\t\t\t{ observable: A, property: 'b', to: [ [ B, 'y' ] ] },\n  //\t\t\t\t\t] ),\n  //\t\t\t\t\tz: Set( [\n  //\t\t\t\t\t\t{ observable: A, property: 'd', to: [ [ B, 'z' ], [ C, 'w' ] ], callback: callback }\n  //\t\t\t\t\t] )\n  //\t\t\t\t},\n  //\t\t\t\tC: {\n  //\t\t\t\t\tw: Set( [\n  //\t\t\t\t\t\t{ observable: A, property: 'd', to: [ [ B, 'z' ], [ C, 'w' ] ], callback: callback }\n  //\t\t\t\t\t] )\n  //\t\t\t\t}\n  //\t\t\t} )\n  //\n  // @private\n  // @type {Map}\n  Object.defineProperty(observable, boundObservablesSymbol, {\n    value: new Map()\n  });\n\n  // Object that stores which properties of this observable are bound and how. It shares\n  // the binding objects (`{ observable: A, property: 'a', to: ... }`) with\n  // {@link module:utils/observablemixin~ObservableMixin#_boundObservables}. This data structure is\n  // a reverse of {@link module:utils/observablemixin~ObservableMixin#_boundObservables} and it is helpful for\n  // {@link module:utils/observablemixin~ObservableMixin#unbind}.\n  //\n  // See {@link module:utils/observablemixin~ObservableMixin#bind}.\n  //\n  //\t\tA.bind( 'a', 'b', 'c' ).to( B, 'x', 'y', 'x' );\n  //\t\tconsole.log( A._boundProperties );\n  //\n  //\t\t\tMap( {\n  //\t\t\t\ta: { observable: A, property: 'a', to: [ [ B, 'x' ] ] },\n  //\t\t\t\tb: { observable: A, property: 'b', to: [ [ B, 'y' ] ] },\n  //\t\t\t\tc: { observable: A, property: 'c', to: [ [ B, 'x' ] ] }\n  //\t\t\t} )\n  //\n  //\t\tA.bind( 'd' ).to( B, 'z' ).to( C, 'w' ).as( callback );\n  //\t\tconsole.log( A._boundProperties );\n  //\n  //\t\t\tMap( {\n  //\t\t\t\ta: { observable: A, property: 'a', to: [ [ B, 'x' ] ] },\n  //\t\t\t\tb: { observable: A, property: 'b', to: [ [ B, 'y' ] ] },\n  //\t\t\t\tc: { observable: A, property: 'c', to: [ [ B, 'x' ] ] },\n  //\t\t\t\td: { observable: A, property: 'd', to: [ [ B, 'z' ], [ C, 'w' ] ], callback: callback }\n  //\t\t\t} )\n  //\n  // @private\n  // @type {Map}\n  Object.defineProperty(observable, boundPropertiesSymbol, {\n    value: new Map()\n  });\n}\n\n// A chaining for {@link module:utils/observablemixin~ObservableMixin#bind} providing `.to()` interface.\n//\n// @private\n// @param {...[Observable|String|Function]} args Arguments of the `.to( args )` binding.\nfunction bindTo() {\n  var _this5 = this;\n  var parsedArgs = parseBindToArgs.apply(void 0, arguments);\n  var bindingsKeys = Array.from(this._bindings.keys());\n  var numberOfBindings = bindingsKeys.length;\n\n  // Eliminate A.bind( 'x' ).to( B, C )\n  if (!parsedArgs.callback && parsedArgs.to.length > 1) {\n    /**\n     * Binding multiple observables only possible with callback.\n     *\n     * @error observable-bind-no-callback\n     */\n    throw new CKEditorError('observable-bind-to-no-callback: Binding multiple observables only possible with callback.', this);\n  }\n\n  // Eliminate A.bind( 'x', 'y' ).to( B, callback )\n  if (numberOfBindings > 1 && parsedArgs.callback) {\n    /**\n     * Cannot bind multiple properties and use a callback in one binding.\n     *\n     * @error observable-bind-to-extra-callback\n     */\n    throw new CKEditorError('observable-bind-to-extra-callback: Cannot bind multiple properties and use a callback in one binding.', this);\n  }\n  parsedArgs.to.forEach(function (to) {\n    // Eliminate A.bind( 'x', 'y' ).to( B, 'a' )\n    if (to.properties.length && to.properties.length !== numberOfBindings) {\n      /**\n       * The number of properties must match.\n       *\n       * @error observable-bind-to-properties-length\n       */\n      throw new CKEditorError('observable-bind-to-properties-length: The number of properties must match.', _this5);\n    }\n\n    // When no to.properties specified, observing source properties instead i.e.\n    // A.bind( 'x', 'y' ).to( B ) -> Observe B.x and B.y\n    if (!to.properties.length) {\n      to.properties = _this5._bindProperties;\n    }\n  });\n  this._to = parsedArgs.to;\n\n  // Fill {@link BindChain#_bindings} with callback. When the callback is set there's only one binding.\n  if (parsedArgs.callback) {\n    this._bindings.get(bindingsKeys[0]).callback = parsedArgs.callback;\n  }\n  attachBindToListeners(this._observable, this._to);\n\n  // Update observable._boundProperties and observable._boundObservables.\n  updateBindToBound(this);\n\n  // Set initial values of bound properties.\n  this._bindProperties.forEach(function (propertyName) {\n    updateBoundObservableProperty(_this5._observable, propertyName);\n  });\n}\n\n// Binds to an attribute in a set of iterable observables.\n//\n// @private\n// @param {Array.<Observable>} observables\n// @param {String} attribute\n// @param {Function} callback\nfunction bindToMany(observables, attribute, callback) {\n  if (this._bindings.size > 1) {\n    /**\n     * Binding one attribute to many observables only possible with one attribute.\n     *\n     * @error observable-bind-to-many-not-one-binding\n     */\n    throw new CKEditorError('observable-bind-to-many-not-one-binding: Cannot bind multiple properties with toMany().', this);\n  }\n  this.to.apply(this, _toConsumableArray(getBindingTargets(observables, attribute)).concat([\n  // ...using given callback to parse attribute values.\n  callback]));\n}\n\n// Returns an array of binding components for\n// {@link Observable#bind} from a set of iterable observables.\n//\n// @param {Array.<Observable>} observables\n// @param {String} attribute\n// @returns {Array.<String|Observable>}\nfunction getBindingTargets(observables, attribute) {\n  var observableAndAttributePairs = observables.map(function (observable) {\n    return [observable, attribute];\n  });\n\n  // Merge pairs to one-dimension array of observables and attributes.\n  return Array.prototype.concat.apply([], observableAndAttributePairs);\n}\n\n// Check if all entries of the array are of `String` type.\n//\n// @private\n// @param {Array} arr An array to be checked.\n// @returns {Boolean}\nfunction isStringArray(arr) {\n  return arr.every(function (a) {\n    return typeof a == 'string';\n  });\n}\n\n// Parses and validates {@link Observable#bind}`.to( args )` arguments and returns\n// an object with a parsed structure. For example\n//\n//\t\tA.bind( 'x' ).to( B, 'a', C, 'b', call );\n//\n// becomes\n//\n//\t\t{\n//\t\t\tto: [\n//\t\t\t\t{ observable: B, properties: [ 'a' ] },\n//\t\t\t\t{ observable: C, properties: [ 'b' ] },\n//\t\t\t],\n//\t\t\tcallback: call\n// \t\t}\n//\n// @private\n// @param {...*} args Arguments of {@link Observable#bind}`.to( args )`.\n// @returns {Object}\nfunction parseBindToArgs() {\n  for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n    args[_key4] = arguments[_key4];\n  }\n  // Eliminate A.bind( 'x' ).to()\n  if (!args.length) {\n    /**\n     * Invalid argument syntax in `to()`.\n     *\n     * @error observable-bind-to-parse-error\n     */\n    throw new CKEditorError('observable-bind-to-parse-error: Invalid argument syntax in `to()`.', null);\n  }\n  var parsed = {\n    to: []\n  };\n  var lastObservable;\n  if (typeof args[args.length - 1] == 'function') {\n    parsed.callback = args.pop();\n  }\n  args.forEach(function (a) {\n    if (typeof a == 'string') {\n      lastObservable.properties.push(a);\n    } else if (_typeof(a) == 'object') {\n      lastObservable = {\n        observable: a,\n        properties: []\n      };\n      parsed.to.push(lastObservable);\n    } else {\n      throw new CKEditorError('observable-bind-to-parse-error: Invalid argument syntax in `to()`.', null);\n    }\n  });\n  return parsed;\n}\n\n// Synchronizes {@link module:utils/observablemixin#_boundObservables} with {@link Binding}.\n//\n// @private\n// @param {Binding} binding A binding to store in {@link Observable#_boundObservables}.\n// @param {Observable} toObservable A observable, which is a new component of `binding`.\n// @param {String} toPropertyName A name of `toObservable`'s property, a new component of the `binding`.\nfunction updateBoundObservables(observable, binding, toObservable, toPropertyName) {\n  var boundObservables = observable[boundObservablesSymbol];\n  var bindingsToObservable = boundObservables.get(toObservable);\n  var bindings = bindingsToObservable || {};\n  if (!bindings[toPropertyName]) {\n    bindings[toPropertyName] = new Set();\n  }\n\n  // Pass the binding to a corresponding Set in `observable._boundObservables`.\n  bindings[toPropertyName].add(binding);\n  if (!bindingsToObservable) {\n    boundObservables.set(toObservable, bindings);\n  }\n}\n\n// Synchronizes {@link Observable#_boundProperties} and {@link Observable#_boundObservables}\n// with {@link BindChain}.\n//\n// Assuming the following binding being created\n//\n// \t\tA.bind( 'a', 'b' ).to( B, 'x', 'y' );\n//\n// the following bindings were initialized by {@link Observable#bind} in {@link BindChain#_bindings}:\n//\n// \t\t{\n// \t\t\ta: { observable: A, property: 'a', to: [] },\n// \t\t\tb: { observable: A, property: 'b', to: [] },\n// \t\t}\n//\n// Iterate over all bindings in this chain and fill their `to` properties with\n// corresponding to( ... ) arguments (components of the binding), so\n//\n// \t\t{\n// \t\t\ta: { observable: A, property: 'a', to: [ B, 'x' ] },\n// \t\t\tb: { observable: A, property: 'b', to: [ B, 'y' ] },\n// \t\t}\n//\n// Then update the structure of {@link Observable#_boundObservables} with updated\n// binding, so it becomes:\n//\n// \t\tMap( {\n// \t\t\tB: {\n// \t\t\t\tx: Set( [\n// \t\t\t\t\t{ observable: A, property: 'a', to: [ [ B, 'x' ] ] }\n// \t\t\t\t] ),\n// \t\t\t\ty: Set( [\n// \t\t\t\t\t{ observable: A, property: 'b', to: [ [ B, 'y' ] ] },\n// \t\t\t\t] )\n//\t\t\t}\n// \t\t} )\n//\n// @private\n// @param {BindChain} chain The binding initialized by {@link Observable#bind}.\nfunction updateBindToBound(chain) {\n  var toProperty;\n  chain._bindings.forEach(function (binding, propertyName) {\n    // Note: For a binding without a callback, this will run only once\n    // like in A.bind( 'x', 'y' ).to( B, 'a', 'b' )\n    // TODO: ES6 destructuring.\n    chain._to.forEach(function (to) {\n      toProperty = to.properties[binding.callback ? 0 : chain._bindProperties.indexOf(propertyName)];\n      binding.to.push([to.observable, toProperty]);\n      updateBoundObservables(chain._observable, binding, to.observable, toProperty);\n    });\n  });\n}\n\n// Updates an property of a {@link Observable} with a value\n// determined by an entry in {@link Observable#_boundProperties}.\n//\n// @private\n// @param {Observable} observable A observable which property is to be updated.\n// @param {String} propertyName An property to be updated.\nfunction updateBoundObservableProperty(observable, propertyName) {\n  var boundProperties = observable[boundPropertiesSymbol];\n  var binding = boundProperties.get(propertyName);\n  var propertyValue;\n\n  // When a binding with callback is created like\n  //\n  // \t\tA.bind( 'a' ).to( B, 'b', C, 'c', callback );\n  //\n  // collect B.b and C.c, then pass them to callback to set A.a.\n  if (binding.callback) {\n    propertyValue = binding.callback.apply(observable, binding.to.map(function (to) {\n      return to[0][to[1]];\n    }));\n  } else {\n    propertyValue = binding.to[0];\n    propertyValue = propertyValue[0][propertyValue[1]];\n  }\n  if (observable.hasOwnProperty(propertyName)) {\n    observable[propertyName] = propertyValue;\n  } else {\n    observable.set(propertyName, propertyValue);\n  }\n}\n\n// Starts listening to changes in {@link BindChain._to} observables to update\n// {@link BindChain._observable} {@link BindChain._bindProperties}. Also sets the\n// initial state of {@link BindChain._observable}.\n//\n// @private\n// @param {BindChain} chain The chain initialized by {@link Observable#bind}.\nfunction attachBindToListeners(observable, toBindings) {\n  toBindings.forEach(function (to) {\n    var boundObservables = observable[boundObservablesSymbol];\n    var bindings;\n\n    // If there's already a chain between the observables (`observable` listens to\n    // `to.observable`), there's no need to create another `change` event listener.\n    if (!boundObservables.get(to.observable)) {\n      observable.listenTo(to.observable, 'change', function (evt, propertyName) {\n        bindings = boundObservables.get(to.observable)[propertyName];\n\n        // Note: to.observable will fire for any property change, react\n        // to changes of properties which are bound only.\n        if (bindings) {\n          bindings.forEach(function (binding) {\n            updateBoundObservableProperty(observable, binding.property);\n          });\n        }\n      });\n    }\n  });\n}\n\n/**\n * Interface which adds \"observable properties\" and data binding functionality.\n *\n * Can be easily implemented by a class by mixing the {@link module:utils/observablemixin~ObservableMixin} mixin.\n *\n * Read more about the usage of this interface in the:\n * * {@glink framework/guides/architecture/core-editor-architecture#event-system-and-observables \"Event system and observables\"}\n * section of the {@glink framework/guides/architecture/core-editor-architecture \"Core editor architecture\"} guide,\n * * {@glink framework/guides/deep-dive/observables \"Observables\" deep dive} guide.\n *\n * @interface Observable\n * @extends module:utils/emittermixin~Emitter\n */\n\n/**\n * Fired when a property changed value.\n *\n *\t\tobservable.set( 'prop', 1 );\n *\n *\t\tobservable.on( 'change:prop', ( evt, propertyName, newValue, oldValue ) => {\n *\t\t\tconsole.log( `${ propertyName } has changed from ${ oldValue } to ${ newValue }` );\n *\t\t} );\n *\n *\t\tobservable.prop = 2; // -> 'prop has changed from 1 to 2'\n *\n * @event change:{property}\n * @param {String} name The property name.\n * @param {*} value The new property value.\n * @param {*} oldValue The previous property value.\n */\n\n/**\n * Fired when a property value is going to be set but is not set yet (before the `change` event is fired).\n *\n * You can control the final value of the property by using\n * the {@link module:utils/eventinfo~EventInfo#return event's `return` property}.\n *\n *\t\tobservable.set( 'prop', 1 );\n *\n *\t\tobservable.on( 'set:prop', ( evt, propertyName, newValue, oldValue ) => {\n *\t\t\tconsole.log( `Value is going to be changed from ${ oldValue } to ${ newValue }` );\n *\t\t\tconsole.log( `Current property value is ${ observable[ propertyName ] }` );\n *\n *\t\t\t// Let's override the value.\n *\t\t\tevt.return = 3;\n *\t\t} );\n *\n *\t\tobservable.on( 'change:prop', ( evt, propertyName, newValue, oldValue ) => {\n *\t\t\tconsole.log( `Value has changed from ${ oldValue } to ${ newValue }` );\n *\t\t} );\n *\n *\t\tobservable.prop = 2; // -> 'Value is going to be changed from 1 to 2'\n *\t\t                     // -> 'Current property value is 1'\n *\t\t                     // -> 'Value has changed from 1 to 3'\n *\n * **Note:** Event is fired even when the new value is the same as the old value.\n *\n * @event set:{property}\n * @param {String} name The property name.\n * @param {*} value The new property value.\n * @param {*} oldValue The previous property value.\n */\n\n/**\n * Creates and sets the value of an observable property of this object. Such an property becomes a part\n * of the state and is be observable.\n *\n * It accepts also a single object literal containing key/value pairs with properties to be set.\n *\n * This method throws the `observable-set-cannot-override` error if the observable instance already\n * have a property with the given property name. This prevents from mistakenly overriding existing\n * properties and methods, but means that `foo.set( 'bar', 1 )` may be slightly slower than `foo.bar = 1`.\n *\n * @method #set\n * @param {String|Object} name The property's name or object with `name=>value` pairs.\n * @param {*} [value] The property's value (if `name` was passed in the first parameter).\n */\n\n/**\n * Binds {@link #set observable properties} to other objects implementing the\n * {@link module:utils/observablemixin~Observable} interface.\n *\n * Read more in the {@glink framework/guides/deep-dive/observables#property-bindings dedicated guide}\n * covering the topic of property bindings with some additional examples.\n *\n * Consider two objects: a `button` and an associated `command` (both `Observable`).\n *\n * A simple property binding could be as follows:\n *\n *\t\tbutton.bind( 'isEnabled' ).to( command, 'isEnabled' );\n *\n * or even shorter:\n *\n *\t\tbutton.bind( 'isEnabled' ).to( command );\n *\n * which works in the following way:\n *\n * * `button.isEnabled` **instantly equals** `command.isEnabled`,\n * * whenever `command.isEnabled` changes, `button.isEnabled` will immediately reflect its value.\n *\n * **Note**: To release the binding, use {@link module:utils/observablemixin~Observable#unbind}.\n *\n * You can also \"rename\" the property in the binding by specifying the new name in the `to()` chain:\n *\n *\t\tbutton.bind( 'isEnabled' ).to( command, 'isWorking' );\n *\n * It is possible to bind more than one property at a time to shorten the code:\n *\n *\t\tbutton.bind( 'isEnabled', 'value' ).to( command );\n *\n * which corresponds to:\n *\n *\t\tbutton.bind( 'isEnabled' ).to( command );\n *\t\tbutton.bind( 'value' ).to( command );\n *\n * The binding can include more than one observable, combining multiple data sources in a custom callback:\n *\n *\t\tbutton.bind( 'isEnabled' ).to( command, 'isEnabled', ui, 'isVisible',\n *\t\t\t( isCommandEnabled, isUIVisible ) => isCommandEnabled && isUIVisible );\n *\n * It is also possible to bind to the same property in an array of observables.\n * To bind a `button` to multiple commands (also `Observables`) so that each and every one of them\n * must be enabled for the button to become enabled, use the following code:\n *\n *\t\tbutton.bind( 'isEnabled' ).toMany( [ commandA, commandB, commandC ], 'isEnabled',\n *\t\t\t( isAEnabled, isBEnabled, isCEnabled ) => isAEnabled && isBEnabled && isCEnabled );\n *\n * @method #bind\n * @param {...String} bindProperties Observable properties that will be bound to other observable(s).\n * @returns {Object} The bind chain with the `to()` and `toMany()` methods.\n */\n\n/**\n * Removes the binding created with {@link #bind}.\n *\n *\t\t// Removes the binding for the 'a' property.\n *\t\tA.unbind( 'a' );\n *\n *\t\t// Removes bindings for all properties.\n *\t\tA.unbind();\n *\n * @method #unbind\n * @param {...String} [unbindProperties] Observable properties to be unbound. All the bindings will\n * be released if no properties are provided.\n */\n\n/**\n * Turns the given methods of this object into event-based ones. This means that the new method will fire an event\n * (named after the method) and the original action will be plugged as a listener to that event.\n *\n * Read more in the {@glink framework/guides/deep-dive/observables#decorating-object-methods dedicated guide}\n * covering the topic of decorating methods with some additional examples.\n *\n * Decorating the method does not change its behavior (it only adds an event),\n * but it allows to modify it later on by listening to the method's event.\n *\n * For example, to cancel the method execution the event can be {@link module:utils/eventinfo~EventInfo#stop stopped}:\n *\n *\t\tclass Foo {\n *\t\t\tconstructor() {\n *\t\t\t\tthis.decorate( 'method' );\n *\t\t\t}\n *\n *\t\t\tmethod() {\n *\t\t\t\tconsole.log( 'called!' );\n *\t\t\t}\n *\t\t}\n *\n *\t\tconst foo = new Foo();\n *\t\tfoo.on( 'method', ( evt ) => {\n *\t\t\tevt.stop();\n *\t\t}, { priority: 'high' } );\n *\n *\t\tfoo.method(); // Nothing is logged.\n *\n *\n * **Note**: The high {@link module:utils/priorities~PriorityString priority} listener\n * has been used to execute this particular callback before the one which calls the original method\n * (which uses the \"normal\" priority).\n *\n * It is also possible to change the returned value:\n *\n *\t\tfoo.on( 'method', ( evt ) => {\n *\t\t\tevt.return = 'Foo!';\n *\t\t} );\n *\n *\t\tfoo.method(); // -> 'Foo'\n *\n * Finally, it is possible to access and modify the arguments the method is called with:\n *\n *\t\tmethod( a, b ) {\n *\t\t\tconsole.log( `${ a }, ${ b }`  );\n *\t\t}\n *\n *\t\t// ...\n *\n *\t\tfoo.on( 'method', ( evt, args ) => {\n *\t\t\targs[ 0 ] = 3;\n *\n *\t\t\tconsole.log( args[ 1 ] ); // -> 2\n *\t\t}, { priority: 'high' } );\n *\n *\t\tfoo.method( 1, 2 ); // -> '3, 2'\n *\n * @method #decorate\n * @param {String} methodName Name of the method to decorate.\n */","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/priorities\n */\n\n/**\n * String representing a priority value.\n *\n * @typedef {'highest'|'high'|'normal'|'low'|'lowest'} module:utils/priorities~PriorityString\n */\n\n/**\n * Provides group of constants to use instead of hardcoding numeric priority values.\n *\n * @namespace\n */\nvar priorities = {\n  /**\n   * Converts a string with priority name to it's numeric value. If `Number` is given, it just returns it.\n   *\n   * @static\n   * @param {module:utils/priorities~PriorityString|Number} priority Priority to convert.\n   * @returns {Number} Converted priority.\n   */\n  get: function get(priority) {\n    if (typeof priority != 'number') {\n      return this[priority] || this.normal;\n    } else {\n      return priority;\n    }\n  },\n  highest: 100000,\n  high: 1000,\n  normal: 0,\n  low: -1000,\n  lowest: -100000\n};\nexport default priorities;","/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/spy\n */\n\n/**\n * Creates a spy function (ala Sinon.js) that can be used to inspect call to it.\n *\n * The following are the present features:\n *\n * * spy.called: property set to `true` if the function has been called at least once.\n *\n * @returns {Function} The spy function.\n */\nfunction spy() {\n  return function spy() {\n    spy.called = true;\n  };\n}\nexport default spy;","import \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/tomap\n */\n\nimport objectToMap from './objecttomap';\nimport { isPlainObject } from 'lodash-es';\n\n/**\n * Transforms object or iterable to map. Iterable needs to be in the format acceptable by the `Map` constructor.\n *\n *\t\tmap = toMap( { 'foo': 1, 'bar': 2 } );\n *\t\tmap = toMap( [ [ 'foo', 1 ], [ 'bar', 2 ] ] );\n *\t\tmap = toMap( anotherMap );\n *\n * @param {Object|Iterable} data Object or iterable to transform.\n * @returns {Map} Map created from data.\n */\nexport default function toMap(data) {\n  if (isPlainObject(data)) {\n    return objectToMap(data);\n  } else {\n    return new Map(data);\n  }\n}","import \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* globals window */\n\n/**\n * @module utils/translation-service\n */\n\n/* istanbul ignore else */\nif (!window.CKEDITOR_TRANSLATIONS) {\n  window.CKEDITOR_TRANSLATIONS = {};\n}\n\n/**\n * Adds translations to existing ones.\n * These translations will later be available for the {@link module:utils/translation-service~translate `translate()`} function.\n *\n *\t\tadd( 'pl', {\n *\t\t\t'OK': 'OK',\n *\t\t\t'Cancel [context: reject]': 'Anuluj'\n *\t\t} );\n *\n * If you cannot import this function from this module (e.g. because you use a CKEditor 5 build), then you can\n * still add translations by extending the global `window.CKEDITOR_TRANSLATIONS` object by using a function like\n * the one below:\n *\n *\t\tfunction addTranslations( language, translations ) {\n *\t\t\tif ( !window.CKEDITOR_TRANSLATIONS ) {\n *\t\t\t\twindow.CKEDITOR_TRANSLATIONS = {};\n *\t\t\t}\n *\n *\t\t\tconst dictionary = window.CKEDITOR_TRANSLATIONS[ language ] || ( window.CKEDITOR_TRANSLATIONS[ language ] = {} );\n *\n *\t\t\t// Extend the dictionary for the given language.\n *\t\t\tObject.assign( dictionary, translations );\n *\t\t}\n *\n * @param {String} language Target language.\n * @param {Object.<String, String>} translations Translations which will be added to the dictionary.\n */\nexport function add(language, translations) {\n  var dictionary = window.CKEDITOR_TRANSLATIONS[language] || (window.CKEDITOR_TRANSLATIONS[language] = {});\n  Object.assign(dictionary, translations);\n}\n\n/**\n * Translates string if the translation of the string was previously added to the dictionary.\n * See {@link module:utils/translation-service Translation Service}.\n * This happens in a multi-language mode were translation modules are created by the bundler.\n *\n * When no translation is defined in the dictionary or the dictionary doesn't exist this function returns\n * the original string without the `'[context: ]'` (happens in development and single-language modes).\n *\n * In a single-language mode (when values passed to `t()` were replaced with target language strings) the dictionary\n * is left empty, so this function will return the original strings always.\n *\n *\t\ttranslate( 'pl', 'Cancel [context: reject]' );\n *\n * @param {String} language Target language.\n * @param {String} translationKey String that will be translated.\n * @returns {String} Translated sentence.\n */\nexport function translate(language, translationKey) {\n  var numberOfLanguages = getNumberOfLanguages();\n  if (numberOfLanguages === 1) {\n    // Override the language to the only supported one.\n    // This can't be done in the `Locale` class, because the translations comes after the `Locale` class initialization.\n    language = Object.keys(window.CKEDITOR_TRANSLATIONS)[0];\n  }\n  if (numberOfLanguages === 0 || !hasTranslation(language, translationKey)) {\n    return translationKey.replace(/ \\[context: [^\\]]+\\]$/, '');\n  }\n  var dictionary = window.CKEDITOR_TRANSLATIONS[language];\n\n  // In case of missing translations we still need to cut off the `[context: ]` parts.\n  return dictionary[translationKey].replace(/ \\[context: [^\\]]+\\]$/, '');\n}\n\n/**\n * Clears dictionaries for test purposes.\n *\n * @protected\n */\nexport function _clear() {\n  window.CKEDITOR_TRANSLATIONS = {};\n}\n\n// Checks whether the dictionary exists and translation in that dictionary exists.\nfunction hasTranslation(language, translationKey) {\n  return language in window.CKEDITOR_TRANSLATIONS && translationKey in window.CKEDITOR_TRANSLATIONS[language];\n}\nfunction getNumberOfLanguages() {\n  return Object.keys(window.CKEDITOR_TRANSLATIONS).length;\n}","import \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/uid\n */\n\n/**\n * Returns a unique id. This id consist of an 'e' character and a randomly generated string of 32 aphanumeric characters.\n * Each character in uid string represents a hexadecimal digit (base 16).\n *\n * @returns {String} A hexadecimal number representing the id.\n */\nexport default function uid() {\n  var uuid = 'e'; // Make sure that id does not start with number.\n\n  for (var i = 0; i < 8; i++) {\n    uuid += Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n  }\n  return uuid;\n}","import \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.regexp.test.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Set of utils to handle unicode characters.\n *\n * @module utils/unicode\n */\n\n/**\n * Checks whether given `character` is a combining mark.\n *\n * @param {String} character Character to check.\n * @returns {Boolean}\n */\nexport function isCombiningMark(character) {\n  return !!character && character.length == 1 && /[\\u0300-\\u036f\\u1ab0-\\u1aff\\u1dc0-\\u1dff\\u20d0-\\u20ff\\ufe20-\\ufe2f]/.test(character);\n}\n\n/**\n * Checks whether given `character` is a high half of surrogate pair.\n *\n * Using UTF-16 terminology, a surrogate pair denotes UTF-16 character using two UTF-8 characters. The surrogate pair\n * consist of high surrogate pair character followed by low surrogate pair character.\n *\n * @param {String} character Character to check.\n * @returns {Boolean}\n */\nexport function isHighSurrogateHalf(character) {\n  return !!character && character.length == 1 && /[\\ud800-\\udbff]/.test(character);\n}\n\n/**\n * Checks whether given `character` is a low half of surrogate pair.\n *\n * Using UTF-16 terminology, a surrogate pair denotes UTF-16 character using two UTF-8 characters. The surrogate pair\n * consist of high surrogate pair character followed by low surrogate pair character.\n *\n * @param {String} character Character to check.\n * @returns {Boolean}\n */\nexport function isLowSurrogateHalf(character) {\n  return !!character && character.length == 1 && /[\\udc00-\\udfff]/.test(character);\n}\n\n/**\n * Checks whether given offset in a string is inside a surrogate pair (between two surrogate halves).\n *\n * @param {String} string String to check.\n * @param {Number} offset Offset to check.\n * @returns {Boolean}\n */\nexport function isInsideSurrogatePair(string, offset) {\n  return isHighSurrogateHalf(string.charAt(offset - 1)) && isLowSurrogateHalf(string.charAt(offset));\n}\n\n/**\n * Checks whether given offset in a string is between base character and combining mark or between two combining marks.\n *\n * @param {String} string String to check.\n * @param {Number} offset Offset to check.\n * @returns {Boolean}\n */\nexport function isInsideCombinedSymbol(string, offset) {\n  return isCombiningMark(string.charAt(offset));\n}","import _typeof from \"/github/workspace/node_modules/@babel/runtime/helpers/esm/typeof.js\";\n/**\n * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/version\n */\n\n/* globals window, global */\n\nimport { version } from 'ckeditor5/package.json';\nimport CKEditorError from './ckeditorerror';\nvar windowOrGlobal = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === 'object' ? window : global;\nif (windowOrGlobal.CKEDITOR_VERSION) {\n  /**\n   * This error is thrown when due to a mistake in how CKEditor 5 was installed or initialized, some\n   * of its modules were duplicated (evaluated and executed twice). Module duplication leads to inevitable runtime\n   * errors.\n   *\n   * There are many situations in which some modules can be loaded twice. In the worst case scenario,\n   * you may need to check your project for each of these issues and fix them all.\n   *\n   * # Trying to add a plugin to an existing build\n   *\n   * If you import an existing CKEditor 5 build and a plugin like this:\n   *\n   *\t\timport ClassicEditor from '@ckeditor/ckeditor5-build-classic';\n   *\t\timport Highlight from '@ckeditor/ckeditor5-highlight/src/highlight';\n   *\n   * Then your project loads some CKEditor 5 packages twice. How does it happen?\n   *\n   * The build package contains a file which is already compiled with webpack. This means\n   * that it contains all the necessary code from e.g. `@ckeditor/ckeditor5-engine` and `@ckeditor/ckeditor5-utils`.\n   *\n   * However, the `Highlight` plugin imports some of the modules from these packages, too. If you ask webpack to\n   * build such a project, you will end up with the modules being included (and run) twice &mdash; first, because they are\n   * included inside the build package, and second, because they are required by the `Highlight` plugin.\n   *\n   * Therefore, **you must never add plugins to an existing build** unless your plugin has no dependencies.\n   *\n   * Adding plugins to a build is done by taking the source version of this build (so, before it was built with webpack)\n   * and adding plugins there. In this situation, webpack will know that it only needs to load each plugin once.\n   *\n   * Read more in the {@glink builds/guides/integration/installing-plugins \"Installing plugins\"} guide.\n   *\n   * # Confused an editor build with an editor implementation\n   *\n   * This scenario is very similar to the previous one, but has a different origin.\n   *\n   * Let's assume that you wanted to use CKEditor 5 from source, as explained in the\n   * {@glink builds/guides/integration/advanced-setup#scenario-2-building-from-source \"Building from source\"} section\n   * or in the {@glink framework/guides/quick-start \"Quick start\"} guide of CKEditor 5 Framework.\n   *\n   * The correct way to do so is to import an editor and plugins and run them together like this:\n   *\n   *\t\timport ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor';\n   *\t\timport Essentials from '@ckeditor/ckeditor5-essentials/src/essentials';\n   *\t\timport Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';\n   *\t\timport Bold from '@ckeditor/ckeditor5-basic-styles/src/bold';\n   *\t\timport Italic from '@ckeditor/ckeditor5-basic-styles/src/italic';\n   *\n   *\t\tClassicEditor\n   *\t\t\t.create( document.querySelector( '#editor' ), {\n   *\t\t\t\tplugins: [ Essentials, Paragraph, Bold, Italic ],\n   *\t\t\t\ttoolbar: [ 'bold', 'italic' ]\n   *\t\t\t} )\n   *\t\t\t.then( editor => {\n   *\t\t\t\tconsole.log( 'Editor was initialized', editor );\n   *\t\t\t} )\n   *\t\t\t.catch( error => {\n   *\t\t\t\tconsole.error( error.stack );\n   *\t\t\t} );\n   *\n   * However, you might have mistakenly imported a build instead of the source `ClassicEditor`. In this case\n   * your imports will look like this:\n   *\n   *\t\timport ClassicEditor from '@ckeditor/ckeditor5-build-classic';\n   *\t\timport Essentials from '@ckeditor/ckeditor5-essentials/src/essentials';\n   *\t\timport Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';\n   *\t\timport Bold from '@ckeditor/ckeditor5-basic-styles/src/bold';\n   *\t\timport Italic from '@ckeditor/ckeditor5-basic-styles/src/italic';\n   *\n   * This creates the same situation as in the previous section because you use a build together with source plugins.\n   *\n   * Remember: `@ckeditor/ckeditor5-build-*` packages contain editor builds and `@ckeditor/ckeditor5-editor-*` contain source editors.\n   *\n   * # Loading two or more builds on one page\n   *\n   * If you use CKEditor 5 builds, you might have loaded two (or more) `ckeditor.js` files on one web page.\n   * Check your web page for duplicated `<script>` elements or make sure your page builder/bundler includes CKEditor only once.\n   *\n   * If you want to use two different types of editors at once, see the\n   * {@glink builds/guides/integration/advanced-setup#scenario-3-using-two-different-editors \"Using two different editors\"}\n   * section.\n   *\n   * # Using outdated packages\n   *\n   * Building CKEditor 5 from source requires using multiple npm packages. These packages have their dependencies\n   * to other packages. If you use the latest version of, for example, `@ckeditor/ckeditor5-editor-classic` with\n   * an outdated version of `@ckeditor/ckeditor5-image`, npm or yarn will need to install two different versions of\n   * `@ckeditor/ckeditor5-core` because `@ckeditor/ckeditor5-editor-classic` and `@ckeditor/ckeditor5-image` may require\n   * different versions of the core package.\n   *\n   * The solution to this issue is to update all packages to their latest version. We recommend\n   * using tools like [`node-check-updates`](https://www.npmjs.com/package/npm-check-updates) which simplify this process.\n   *\n   * # Conflicting version of dependencies\n   *\n   * This is a special case of the previous scenario. If you use CKEditor 5 with some third-party plugins,\n   * it may happen that even if you use the latest versions of the official packages and the latest version of\n   * these third-party packages, there will be a conflict between some of their dependencies.\n   *\n   * Such a problem can be resolved by either downgrading CKEditor 5 packages (which we do not recommend) or\n   * asking the author of the third-party package to upgrade its depdendencies (or forking their project and doing this yourself).\n   *\n   * # Packages were duplicated in `node_modules`\n   *\n   * In some situations, especially when calling `npm install` multiple times, it may happen\n   * that npm will not correctly \"deduplicate\" packages.\n   *\n   * Normally, npm deduplicates all packages so, for example, `@ckeditor/ckeditor5-core` is installed only once in `node_modules/`.\n   * However, it is known to fail to do so from time to time.\n   *\n   * We recommend checking if any of the steps listed below help:\n   *\n   * * `rm -rf node_modules && npm install` to make sure you have a clean `node_modules/` directory. This step\n   * is known to help in most cases.\n   * * If you use `yarn.lock` or `package-lock.json`, remove it before `npm install`.\n   * * Check whether all CKEditor 5 packages are up to date and reinstall them\n   * if you changed anything (`rm -rf node_modules && npm install`).\n   *\n   * If all packages are correct and compatible with each other, the steps above are known to help. If not, you may\n   * try to check with `npm ls` how many times packages like `@ckeditor/ckeditor5-core`, `@ckeditor/ckeditor5-engine` and\n   *`@ckeditor/ckeditor5-utils` are installed. If more than once, verify which package causes that.\n   *\n   * @error ckeditor-duplicated-modules\n   */\n  throw new CKEditorError('ckeditor-duplicated-modules: Some CKEditor 5 modules are duplicated.', null);\n} else {\n  windowOrGlobal.CKEDITOR_VERSION = version;\n}","/*!\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md.\n */\n!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.CKEditor=e():t.CKEditor=e()}(window,(function(){return function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var r in t)n.d(i,r,function(e){return t[e]}.bind(null,r));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,\"a\",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p=\"\",n(n.s=2)}([function(t,e,n){\"use strict\";(function(t){var n=\"object\"==typeof t&&t&&t.Object===Object&&t;e.a=n}).call(this,n(1))},function(t,e){var n;n=function(){return this}();try{n=n||new Function(\"return this\")()}catch(t){\"object\"==typeof window&&(n=window)}t.exports=n},function(t,e,n){\"use strict\";n.r(e);var i=function(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)},r=n(0),o=\"object\"==typeof self&&self&&self.Object===Object&&self,a=r.a||o||Function(\"return this\")(),u=function(){return a.Date.now()},c=a.Symbol,s=Object.prototype,f=s.hasOwnProperty,l=s.toString,d=c?c.toStringTag:void 0;var p=function(t){var e=f.call(t,d),n=t[d];try{t[d]=void 0;var i=!0}catch(t){}var r=l.call(t);return i&&(e?t[d]=n:delete t[d]),r},v=Object.prototype.toString;var y=function(t){return v.call(t)},b=c?c.toStringTag:void 0;var h=function(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":b&&b in Object(t)?p(t):y(t)};var m=function(t){return null!=t&&\"object\"==typeof t};var g=function(t){return\"symbol\"==typeof t||m(t)&&\"[object Symbol]\"==h(t)},j=/^\\s+|\\s+$/g,$=/^[-+]0x[0-9a-f]+$/i,O=/^0b[01]+$/i,_=/^0o[0-7]+$/i,w=parseInt;var x=function(t){if(\"number\"==typeof t)return t;if(g(t))return NaN;if(i(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=i(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=t.replace(j,\"\");var n=O.test(t);return n||_.test(t)?w(t.slice(2),n?2:8):$.test(t)?NaN:+t},S=Math.max,E=Math.min;var T=function(t,e,n){var r,o,a,c,s,f,l=0,d=!1,p=!1,v=!0;if(\"function\"!=typeof t)throw new TypeError(\"Expected a function\");function y(e){var n=r,i=o;return r=o=void 0,l=e,c=t.apply(i,n)}function b(t){return l=t,s=setTimeout(m,e),d?y(t):c}function h(t){var n=t-f;return void 0===f||n>=e||n<0||p&&t-l>=a}function m(){var t=u();if(h(t))return g(t);s=setTimeout(m,function(t){var n=e-(t-f);return p?E(n,a-(t-l)):n}(t))}function g(t){return s=void 0,v&&r?y(t):(r=o=void 0,c)}function j(){var t=u(),n=h(t);if(r=arguments,o=this,f=t,n){if(void 0===s)return b(f);if(p)return clearTimeout(s),s=setTimeout(m,e),y(f)}return void 0===s&&(s=setTimeout(m,e)),c}return e=x(e)||0,i(n)&&(d=!!n.leading,a=(p=\"maxWait\"in n)?S(x(n.maxWait)||0,e):a,v=\"trailing\"in n?!!n.trailing:v),j.cancel=function(){void 0!==s&&clearTimeout(s),l=0,r=f=o=s=void 0},j.flush=function(){return void 0===s?c:g(u())},j};var D={name:\"ckeditor\",render(t){return t(this.tagName)},props:{editor:{type:Function,default:null},value:{type:String,default:\"\"},config:{type:Object,default:()=>({})},tagName:{type:String,default:\"div\"},disabled:{type:Boolean,default:!1}},data:()=>({$_instance:null,$_lastEditorData:{type:String,default:\"\"}}),mounted(){const t=Object.assign({},this.config);this.value&&(t.initialData=this.value),this.editor.create(this.$el,t).then(t=>{this.$_instance=t,t.isReadOnly=this.disabled,this.$_setUpEditorEvents(),this.$emit(\"ready\",t)}).catch(t=>{console.error(t)})},beforeDestroy(){this.$_instance&&(this.$_instance.destroy(),this.$_instance=null),this.$emit(\"destroy\",this.$_instance)},watch:{value(t,e){t!==e&&t!==this.$_lastEditorData&&this.$_instance.setData(t)},disabled(t){this.$_instance.isReadOnly=t}},methods:{$_setUpEditorEvents(){const t=this.$_instance,e=T(e=>{const n=this.$_lastEditorData=t.getData();this.$emit(\"input\",n,e,t)},300,{leading:!0});t.model.document.on(\"change:data\",e),t.editing.view.document.on(\"focus\",e=>{this.$emit(\"focus\",e,t)}),t.editing.view.document.on(\"blur\",e=>{this.$emit(\"blur\",e,t)})}}};const N={install(t){t.component(\"ckeditor\",D)},component:D};e.default=N}]).default}));\n//# sourceMappingURL=ckeditor.js.map","<template>\n  <transition\n    name=\"fade\"\n    mode=\"out-in\"\n  >\n    <div :class=\"{'is-danger': hasError}\">\n      <div class=\"content\">\n        <ckeditor\n          :editor=\"editor\"\n          v-model=\"mValue\"\n          :config=\"configuration[configType]\"\n          @ready=\"onReady\"\n          @blur=\"onBlur\"\n          @keyup=\"onChange\"\n          @focus=\"onFocus\"\n          @input=\"onInput\"\n        ></ckeditor>\n      </div>\n      <div v-if=\"error\">\n        <span\n          v-if=\"!Array.isArray(error)\"\n          class=\"help is-danger\"\n          v-html=\"error\"\n        ></span>\n        <div\n          v-else\n          class=\"help is-danger\"\n        >\n          <div\n            v-for=\"(message, index) in error\"\n            :key=\"`e${index}`\"\n            v-html=\"message\"\n          ></div>\n        </div>\n      </div>\n    </div>\n  </transition>\n</template>\n\n<script>\nimport CKEditor from '@ckeditor/ckeditor5-vue'\nimport ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor'\nimport Essentials from '@ckeditor/ckeditor5-essentials/src/essentials'\nimport Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph'\n//import Table from '@ckeditor/ckeditor5-table/src/table'\nimport Bold from '@ckeditor/ckeditor5-basic-styles/src/bold'\nimport Italic from '@ckeditor/ckeditor5-basic-styles/src/italic'\nimport Underline from '@ckeditor/ckeditor5-basic-styles/src/underline'\nimport Link from '@ckeditor/ckeditor5-link/src/link'\nimport List from '@ckeditor/ckeditor5-list/src/list'\nimport RemoveFormat from '@ckeditor/ckeditor5-remove-format/src/removeformat'\nimport Clipboard from '@ckeditor/ckeditor5-clipboard/src/clipboard'\nimport plainTextToHtml from '@ckeditor/ckeditor5-clipboard/src/utils/plaintexttohtml'\n\nexport default {\n  props: {\n    value: {\n      type: String,\n      default: '',\n    },\n    configType: {\n      type: String,\n      default: 'standard',\n    },\n    height: {\n      type: String,\n      default: '90px',\n    },\n    language: {\n      type: String,\n      default: 'en',\n    },\n    error: {\n      type: [String, Array],\n      default: '',\n    },\n  },\n\n  components: {\n    ckeditor: CKEditor.component,\n  },\n\n  data() {\n    return {\n      editor: ClassicEditor,\n      mValue: this.value,\n      configuration: {\n        lite: {\n          plugins: [Essentials, RemoveFormat, Bold, Italic, Underline],\n          toolbar: [\n            'removeFormat',\n            '|',\n            'undo',\n            'redo',\n            '|',\n            'bold',\n            'italic',\n            'underline',\n          ],\n        },\n        standard: {\n          forcePasteAsPlainText: true,\n          plugins: [\n            Essentials,\n            RemoveFormat,\n            Bold,\n            Italic,\n            Underline,\n            Link,\n            List,\n            //Table,\n          ],\n          toolbar: [\n            'removeFormat',\n            '|',\n            'undo',\n            'redo',\n            '|',\n            'bold',\n            'italic',\n            'underline',\n            '|',\n            'link',\n            '|',\n            'bulletedList',\n            'numberedList',\n          ],\n          // ui: {\n          //   height: '300px',\n          // },\n        },\n      },\n    }\n  },\n\n  computed: {\n    hasError() {\n      if (\n        (!Array.isArray(this.error) && this.error) ||\n        (Array.isArray(this.error) && this.error.length)\n      ) {\n        return true\n      } else {\n        return false\n      }\n    },\n  },\n\n  methods: {\n    onReady(editor) {\n      const clipboardPlugin = editor.plugins.get('Clipboard')\n      const editingView = editor.editing.view\n      editingView.document.on('clipboardInput', (evt, data) => {\n        if (editor.isReadOnly) {\n          return\n        }\n\n        const dataTransfer = data.dataTransfer\n        let content = plainTextToHtml(dataTransfer.getData('text/plain'))\n\n        content = clipboardPlugin._htmlDataProcessor.toView(content)\n\n        clipboardPlugin.fire('inputTransformation', { content, dataTransfer })\n\n        editingView.scrollToTheSelection()\n\n        evt.stop()\n      })\n\n      editor.editing.view.document.on(\n        'enter',\n        (evt, data) => {\n          if (data.isSoft) {\n            editor.execute('shiftEnter')\n          } else {\n            editor.execute('enter')\n          }\n\n          data.preventDefault()\n          evt.stop()\n          editor.editing.view.scrollToTheSelection()\n        },\n        { priority: 'high' }\n      )\n    },\n    onBlur() {\n      this.$emit('input', this.mValue)\n    },\n    onChange() {\n      this.$emit('input', this.mValue)\n    },\n    onFocus() { },\n    onInput() {\n      this.$emit('input', this.mValue)\n    },\n  },\n}\n</script>\n\n<style lang=\"scss\">\n.is-danger {\n  --ck-color-toolbar-border: red;\n  --ck-color-text: red;\n  --ck-color-base-border: red;\n}\n.ck-editor {\n  height: 100%;\n  .ck-editor__editable {\n    height: var(--ckEditorHeight, 300px);\n  }\n}\n</style>\n","var render = function render() {\n  var _vm = this,\n    _c = _vm._self._c\n  return _c(\"transition\", { attrs: { name: \"fade\", mode: \"out-in\" } }, [\n    _c(\"div\", { class: { \"is-danger\": _vm.hasError } }, [\n      _c(\n        \"div\",\n        { staticClass: \"content\" },\n        [\n          _c(\"ckeditor\", {\n            attrs: {\n              editor: _vm.editor,\n              config: _vm.configuration[_vm.configType],\n            },\n            on: {\n              ready: _vm.onReady,\n              blur: _vm.onBlur,\n              keyup: _vm.onChange,\n              focus: _vm.onFocus,\n              input: _vm.onInput,\n            },\n            model: {\n              value: _vm.mValue,\n              callback: function ($$v) {\n                _vm.mValue = $$v\n              },\n              expression: \"mValue\",\n            },\n          }),\n        ],\n        1\n      ),\n      _vm.error\n        ? _c(\"div\", [\n            !Array.isArray(_vm.error)\n              ? _c(\"span\", {\n                  staticClass: \"help is-danger\",\n                  domProps: { innerHTML: _vm._s(_vm.error) },\n                })\n              : _c(\n                  \"div\",\n                  { staticClass: \"help is-danger\" },\n                  _vm._l(_vm.error, function (message, index) {\n                    return _c(\"div\", {\n                      key: `e${index}`,\n                      domProps: { innerHTML: _vm._s(message) },\n                    })\n                  }),\n                  0\n                ),\n          ])\n        : _vm._e(),\n    ]),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar getWeakData = require('../internals/internal-metadata').getWeakData;\nvar anInstance = require('../internals/an-instance');\nvar anObject = require('../internals/an-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar isObject = require('../internals/is-object');\nvar iterate = require('../internals/iterate');\nvar ArrayIterationModule = require('../internals/array-iteration');\nvar hasOwn = require('../internals/has-own-property');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\nvar find = ArrayIterationModule.find;\nvar findIndex = ArrayIterationModule.findIndex;\nvar splice = uncurryThis([].splice);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (state) {\n  return state.frozen || (state.frozen = new UncaughtFrozenStore());\n};\n\nvar UncaughtFrozenStore = function () {\n  this.entries = [];\n};\n\nvar findUncaughtFrozen = function (store, key) {\n  return find(store.entries, function (it) {\n    return it[0] === key;\n  });\n};\n\nUncaughtFrozenStore.prototype = {\n  get: function (key) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) return entry[1];\n  },\n  has: function (key) {\n    return !!findUncaughtFrozen(this, key);\n  },\n  set: function (key, value) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) entry[1] = value;\n    else this.entries.push([key, value]);\n  },\n  'delete': function (key) {\n    var index = findIndex(this.entries, function (it) {\n      return it[0] === key;\n    });\n    if (~index) splice(this.entries, index, 1);\n    return !!~index;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n    var Constructor = wrapper(function (that, iterable) {\n      anInstance(that, Prototype);\n      setInternalState(that, {\n        type: CONSTRUCTOR_NAME,\n        id: id++,\n        frozen: null\n      });\n      if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n    });\n\n    var Prototype = Constructor.prototype;\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    var define = function (that, key, value) {\n      var state = getInternalState(that);\n      var data = getWeakData(anObject(key), true);\n      if (data === true) uncaughtFrozenStore(state).set(key, value);\n      else data[state.id] = value;\n      return that;\n    };\n\n    defineBuiltIns(Prototype, {\n      // `{ WeakMap, WeakSet }.prototype.delete(key)` methods\n      // https://tc39.es/ecma262/#sec-weakmap.prototype.delete\n      // https://tc39.es/ecma262/#sec-weakset.prototype.delete\n      'delete': function (key) {\n        var state = getInternalState(this);\n        if (!isObject(key)) return false;\n        var data = getWeakData(key);\n        if (data === true) return uncaughtFrozenStore(state)['delete'](key);\n        return data && hasOwn(data, state.id) && delete data[state.id];\n      },\n      // `{ WeakMap, WeakSet }.prototype.has(key)` methods\n      // https://tc39.es/ecma262/#sec-weakmap.prototype.has\n      // https://tc39.es/ecma262/#sec-weakset.prototype.has\n      has: function has(key) {\n        var state = getInternalState(this);\n        if (!isObject(key)) return false;\n        var data = getWeakData(key);\n        if (data === true) return uncaughtFrozenStore(state).has(key);\n        return data && hasOwn(data, state.id);\n      }\n    });\n\n    defineBuiltIns(Prototype, IS_MAP ? {\n      // `WeakMap.prototype.get(key)` method\n      // https://tc39.es/ecma262/#sec-weakmap.prototype.get\n      get: function get(key) {\n        var state = getInternalState(this);\n        if (isObject(key)) {\n          var data = getWeakData(key);\n          if (data === true) return uncaughtFrozenStore(state).get(key);\n          if (data) return data[state.id];\n        }\n      },\n      // `WeakMap.prototype.set(key, value)` method\n      // https://tc39.es/ecma262/#sec-weakmap.prototype.set\n      set: function set(key, value) {\n        return define(this, key, value);\n      }\n    } : {\n      // `WeakSet.prototype.add(value)` method\n      // https://tc39.es/ecma262/#sec-weakset.prototype.add\n      add: function add(value) {\n        return define(this, value, true);\n      }\n    });\n\n    return Constructor;\n  }\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n  var regexp = /./;\n  try {\n    '/./'[METHOD_NAME](regexp);\n  } catch (error1) {\n    try {\n      regexp[MATCH] = false;\n      return '/./'[METHOD_NAME](regexp);\n    } catch (error2) { /* empty */ }\n  } return false;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\n\nvar quot = /\"/g;\nvar replace = uncurryThis(''.replace);\n\n// `CreateHTML` abstract operation\n// https://tc39.es/ecma262/#sec-createhtml\nmodule.exports = function (string, tag, attribute, value) {\n  var S = toString(requireObjectCoercible(string));\n  var p1 = '<' + tag;\n  if (attribute !== '') p1 += ' ' + attribute + '=\"' + replace(toString(value), quot, '&quot;') + '\"';\n  return p1 + '>' + S + '</' + tag + '>';\n};\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\n\nmodule.exports = function (descriptor) {\n  return descriptor !== undefined && (hasOwn(descriptor, 'value') || hasOwn(descriptor, 'writable'));\n};\n","'use strict';\nvar isRegExp = require('../internals/is-regexp');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it) {\n  if (isRegExp(it)) {\n    throw new $TypeError(\"The method doesn't accept regular expressions\");\n  } return it;\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseInt = globalThis.parseInt;\nvar Symbol = globalThis.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar hex = /^[+-]?0x/i;\nvar exec = uncurryThis(hex.exec);\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22\n  // MS Edge 18- broken with boxed symbols\n  || (ITERATOR && !fails(function () { $parseInt(Object(ITERATOR)); }));\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n  var S = trim(toString(string));\n  return $parseInt(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10));\n} : $parseInt;\n","'use strict';\nvar fails = require('../internals/fails');\n\n// check the existence of a method, lowercase\n// of a tag and escaping quotes in arguments\nmodule.exports = function (METHOD_NAME) {\n  return fails(function () {\n    var test = ''[METHOD_NAME]('\"');\n    return test !== test.toLowerCase() || test.split('\"').length > 3;\n  });\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $RangeError = RangeError;\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n  var str = toString(requireObjectCoercible(this));\n  var result = '';\n  var n = toIntegerOrInfinity(count);\n  if (n < 0 || n === Infinity) throw new $RangeError('Wrong number of repetitions');\n  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n  return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar iterate = require('../internals/iterate');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\n\nvar everyWithoutClosingOnEarlyError = iteratorHelperWithoutClosingOnEarlyError('every', TypeError);\n\n// `Iterator.prototype.every` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.every\n$({ target: 'Iterator', proto: true, real: true, forced: everyWithoutClosingOnEarlyError }, {\n  every: function every(predicate) {\n    anObject(this);\n    try {\n      aCallable(predicate);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (everyWithoutClosingOnEarlyError) return call(everyWithoutClosingOnEarlyError, this, predicate);\n\n    var record = getIteratorDirect(this);\n    var counter = 0;\n    return !iterate(record, function (value, stop) {\n      if (!predicate(value, counter++)) return stop();\n    }, { IS_RECORD: true, INTERRUPTED: true }).stopped;\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar parseInt = require('../internals/number-parse-int');\n\n// `Number.parseInt` method\n// https://tc39.es/ecma262/#sec-number.parseint\n// eslint-disable-next-line es/no-number-parseint -- required for testing\n$({ target: 'Number', stat: true, forced: Number.parseInt !== parseInt }, {\n  parseInt: parseInt\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names-external').f;\n\n// eslint-disable-next-line es/no-object-getownpropertynames -- required for testing\nvar FAILS_ON_PRIMITIVES = fails(function () { return !Object.getOwnPropertyNames(1); });\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n  getOwnPropertyNames: getOwnPropertyNames\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar isDataDescriptor = require('../internals/is-data-descriptor');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\n\n// `Reflect.get` method\n// https://tc39.es/ecma262/#sec-reflect.get\nfunction get(target, propertyKey /* , receiver */) {\n  var receiver = arguments.length < 3 ? target : arguments[2];\n  var descriptor, prototype;\n  if (anObject(target) === receiver) return target[propertyKey];\n  descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey);\n  if (descriptor) return isDataDescriptor(descriptor)\n    ? descriptor.value\n    : descriptor.get === undefined ? undefined : call(descriptor.get, receiver);\n  if (isObject(prototype = getPrototypeOf(target))) return get(prototype, propertyKey, receiver);\n}\n\n$({ target: 'Reflect', stat: true }, {\n  get: get\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n$({ global: true }, { Reflect: {} });\n\n// Reflect[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-reflect-@@tostringtag\nsetToStringTag(globalThis.Reflect, 'Reflect', true);\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.anchor` method\n// https://tc39.es/ecma262/#sec-string.prototype.anchor\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('anchor') }, {\n  anchor: function anchor(name) {\n    return createHTML(this, 'a', 'name', name);\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\nvar slice = uncurryThis(''.slice);\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n  var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');\n  return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.endsWith` method\n// https://tc39.es/ecma262/#sec-string.prototype.endswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n  endsWith: function endsWith(searchString /* , endPosition = @length */) {\n    var that = toString(requireObjectCoercible(this));\n    notARegExp(searchString);\n    var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n    var len = that.length;\n    var end = endPosition === undefined ? len : min(toLength(endPosition), len);\n    var search = toString(searchString);\n    return slice(that, end - search.length, end) === search;\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~stringIndexOf(\n      toString(requireObjectCoercible(this)),\n      toString(notARegExp(searchString)),\n      arguments.length > 1 ? arguments[1] : undefined\n    );\n  }\n});\n","'use strict';\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar getMethod = require('../internals/get-method');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n  return [\n    // `String.prototype.match` method\n    // https://tc39.es/ecma262/#sec-string.prototype.match\n    function match(regexp) {\n      var O = requireObjectCoercible(this);\n      var matcher = isObject(regexp) ? getMethod(regexp, MATCH) : undefined;\n      return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n    },\n    // `RegExp.prototype[@@match]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n    function (string) {\n      var rx = anObject(this);\n      var S = toString(string);\n      var res = maybeCallNative(nativeMatch, rx, S);\n\n      if (res.done) return res.value;\n\n      var flags = toString(getRegExpFlags(rx));\n\n      if (stringIndexOf(flags, 'g') === -1) return regExpExec(rx, S);\n\n      var fullUnicode = stringIndexOf(flags, 'u') !== -1;\n      rx.lastIndex = 0;\n      var A = [];\n      var n = 0;\n      var result;\n      while ((result = regExpExec(rx, S)) !== null) {\n        var matchStr = toString(result[0]);\n        A[n] = matchStr;\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n        n++;\n      }\n      return n === 0 ? null : A;\n    }\n  ];\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar repeat = require('../internals/string-repeat');\n\n// `String.prototype.repeat` method\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\n$({ target: 'String', proto: true }, {\n  repeat: repeat\n});\n","'use strict';\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar fails = require('../internals/fails');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar MAX_UINT32 = 0xFFFFFFFF;\nvar min = Math.min;\nvar push = uncurryThis([].push);\nvar stringSlice = uncurryThis(''.slice);\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n  // eslint-disable-next-line regexp/no-empty-group -- required for testing\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\nvar BUGGY = 'abbc'.split(/(b)*/)[1] === 'c' ||\n  // eslint-disable-next-line regexp/no-empty-group -- required for testing\n  'test'.split(/(?:)/, -1).length !== 4 ||\n  'ab'.split(/(?:ab)*/).length !== 2 ||\n  '.'.split(/(.?)(.?)/).length !== 4 ||\n  // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n  '.'.split(/()()/).length > 1 ||\n  ''.split(/.?/).length;\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n  var internalSplit = '0'.split(undefined, 0).length ? function (separator, limit) {\n    return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);\n  } : nativeSplit;\n\n  return [\n    // `String.prototype.split` method\n    // https://tc39.es/ecma262/#sec-string.prototype.split\n    function split(separator, limit) {\n      var O = requireObjectCoercible(this);\n      var splitter = isObject(separator) ? getMethod(separator, SPLIT) : undefined;\n      return splitter\n        ? call(splitter, separator, O, limit)\n        : call(internalSplit, toString(O), separator, limit);\n    },\n    // `RegExp.prototype[@@split]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n    //\n    // NOTE: This cannot be properly polyfilled in engines that don't support\n    // the 'y' flag.\n    function (string, limit) {\n      var rx = anObject(this);\n      var S = toString(string);\n\n      if (!BUGGY) {\n        var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n        if (res.done) return res.value;\n      }\n\n      var C = speciesConstructor(rx, RegExp);\n      var unicodeMatching = rx.unicode;\n      var flags = (rx.ignoreCase ? 'i' : '') +\n                  (rx.multiline ? 'm' : '') +\n                  (rx.unicode ? 'u' : '') +\n                  (UNSUPPORTED_Y ? 'g' : 'y');\n      // ^(? + rx + ) is needed, in combination with some S slicing, to\n      // simulate the 'y' flag.\n      var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      if (lim === 0) return [];\n      if (S.length === 0) return regExpExec(splitter, S) === null ? [S] : [];\n      var p = 0;\n      var q = 0;\n      var A = [];\n      while (q < S.length) {\n        splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n        var z = regExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);\n        var e;\n        if (\n          z === null ||\n          (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n        ) {\n          q = advanceStringIndex(S, q, unicodeMatching);\n        } else {\n          push(A, stringSlice(S, p, q));\n          if (A.length === lim) return A;\n          for (var i = 1; i <= z.length - 1; i++) {\n            push(A, z[i]);\n            if (A.length === lim) return A;\n          }\n          q = p = e;\n        }\n      }\n      push(A, stringSlice(S, p));\n      return A;\n    }\n  ];\n}, BUGGY || !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\nvar stringSlice = uncurryThis(''.slice);\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n  var descriptor = getOwnPropertyDescriptor(String.prototype, 'startsWith');\n  return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.startsWith` method\n// https://tc39.es/ecma262/#sec-string.prototype.startswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = toString(requireObjectCoercible(this));\n    notARegExp(searchString);\n    var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = toString(searchString);\n    return stringSlice(that, index, index + search.length) === search;\n  }\n});\n","'use strict';\nvar FREEZING = require('../internals/freezing');\nvar globalThis = require('../internals/global-this');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\nvar isObject = require('../internals/is-object');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar fails = require('../internals/fails');\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\n\nvar $Object = Object;\n// eslint-disable-next-line es/no-array-isarray -- safe\nvar isArray = Array.isArray;\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar isExtensible = $Object.isExtensible;\n// eslint-disable-next-line es/no-object-isfrozen -- safe\nvar isFrozen = $Object.isFrozen;\n// eslint-disable-next-line es/no-object-issealed -- safe\nvar isSealed = $Object.isSealed;\n// eslint-disable-next-line es/no-object-freeze -- safe\nvar freeze = $Object.freeze;\n// eslint-disable-next-line es/no-object-seal -- safe\nvar seal = $Object.seal;\n\nvar IS_IE11 = !globalThis.ActiveXObject && 'ActiveXObject' in globalThis;\nvar InternalWeakMap;\n\nvar wrapper = function (init) {\n  return function WeakMap() {\n    return init(this, arguments.length ? arguments[0] : undefined);\n  };\n};\n\n// `WeakMap` constructor\n// https://tc39.es/ecma262/#sec-weakmap-constructor\nvar $WeakMap = collection('WeakMap', wrapper, collectionWeak);\nvar WeakMapPrototype = $WeakMap.prototype;\nvar nativeSet = uncurryThis(WeakMapPrototype.set);\n\n// Chakra Edge bug: adding frozen arrays to WeakMap unfreeze them\nvar hasMSEdgeFreezingBug = function () {\n  return FREEZING && fails(function () {\n    var frozenArray = freeze([]);\n    nativeSet(new $WeakMap(), frozenArray, 1);\n    return !isFrozen(frozenArray);\n  });\n};\n\n// IE11 WeakMap frozen keys fix\n// We can't use feature detection because it crash some old IE builds\n// https://github.com/zloirock/core-js/issues/485\nif (NATIVE_WEAK_MAP) if (IS_IE11) {\n  InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);\n  InternalMetadataModule.enable();\n  var nativeDelete = uncurryThis(WeakMapPrototype['delete']);\n  var nativeHas = uncurryThis(WeakMapPrototype.has);\n  var nativeGet = uncurryThis(WeakMapPrototype.get);\n  defineBuiltIns(WeakMapPrototype, {\n    'delete': function (key) {\n      if (isObject(key) && !isExtensible(key)) {\n        var state = enforceInternalState(this);\n        if (!state.frozen) state.frozen = new InternalWeakMap();\n        return nativeDelete(this, key) || state.frozen['delete'](key);\n      } return nativeDelete(this, key);\n    },\n    has: function has(key) {\n      if (isObject(key) && !isExtensible(key)) {\n        var state = enforceInternalState(this);\n        if (!state.frozen) state.frozen = new InternalWeakMap();\n        return nativeHas(this, key) || state.frozen.has(key);\n      } return nativeHas(this, key);\n    },\n    get: function get(key) {\n      if (isObject(key) && !isExtensible(key)) {\n        var state = enforceInternalState(this);\n        if (!state.frozen) state.frozen = new InternalWeakMap();\n        return nativeHas(this, key) ? nativeGet(this, key) : state.frozen.get(key);\n      } return nativeGet(this, key);\n    },\n    set: function set(key, value) {\n      if (isObject(key) && !isExtensible(key)) {\n        var state = enforceInternalState(this);\n        if (!state.frozen) state.frozen = new InternalWeakMap();\n        nativeHas(this, key) ? nativeSet(this, key, value) : state.frozen.set(key, value);\n      } else nativeSet(this, key, value);\n      return this;\n    }\n  });\n// Chakra Edge frozen keys fix\n} else if (hasMSEdgeFreezingBug()) {\n  defineBuiltIns(WeakMapPrototype, {\n    set: function set(key, value) {\n      var arrayIntegrityLevel;\n      if (isArray(key)) {\n        if (isFrozen(key)) arrayIntegrityLevel = freeze;\n        else if (isSealed(key)) arrayIntegrityLevel = seal;\n      }\n      nativeSet(this, key, value);\n      if (arrayIntegrityLevel) arrayIntegrityLevel(key);\n      return this;\n    }\n  });\n}\n","'use strict';\n// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.weak-map.constructor');\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\n\n// `WeakSet` constructor\n// https://tc39.es/ecma262/#sec-weakset-constructor\ncollection('WeakSet', function (init) {\n  return function WeakSet() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionWeak);\n","'use strict';\n// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.weak-set.constructor');\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck.ck-editor{position:relative}.ck.ck-editor .ck-editor__top .ck-sticky-panel .ck-toolbar{z-index:var(--ck-z-modal)}.ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-radius:0}.ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-toolbar,.ck.ck-editor__top .ck-sticky-panel .ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius);border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-bottom-width:0}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar{border-bottom-width:1px;border-radius:0}.ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar,.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius);border-radius:0}.ck.ck-editor__main>.ck-editor__editable{background:var(--ck-color-base-background);border-radius:0}.ck-rounded-corners .ck.ck-editor__main>.ck-editor__editable,.ck.ck-editor__main>.ck-editor__editable.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-top-right-radius:0}.ck.ck-editor__main>.ck-editor__editable:not(.ck-focused){border-color:var(--ck-color-base-border)}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck.ck-placeholder:before,.ck .ck-placeholder:before{content:attr(data-placeholder);pointer-events:none}.ck.ck-read-only .ck-placeholder:before{display:none}.ck.ck-placeholder:before,.ck .ck-placeholder:before{cursor:text;color:var(--ck-color-engine-placeholder-text)}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck .ck-link_selected{background:var(--ck-color-link-selected-background)}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck.ck-link-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.ck.ck-link-actions .ck-link-actions__preview{display:inline-block}.ck.ck-link-actions .ck-link-actions__preview .ck-button__label{overflow:hidden}@media screen and (max-width:600px){.ck.ck-link-actions{-ms-flex-wrap:wrap;flex-wrap:wrap}.ck.ck-link-actions .ck-link-actions__preview{-ms-flex-preferred-size:100%;flex-basis:100%}.ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){-ms-flex-preferred-size:50%;flex-basis:50%}}.ck.ck-link-actions{padding:var(--ck-spacing-standard)}.ck.ck-link-actions .ck-button.ck-link-actions__preview{padding-left:0;padding-right:0}.ck.ck-link-actions .ck-button.ck-link-actions__preview,.ck.ck-link-actions .ck-button.ck-link-actions__preview:active,.ck.ck-link-actions .ck-button.ck-link-actions__preview:focus,.ck.ck-link-actions .ck-button.ck-link-actions__preview:hover{background:none}.ck.ck-link-actions .ck-button.ck-link-actions__preview:active{-webkit-box-shadow:none;box-shadow:none}.ck.ck-link-actions .ck-button.ck-link-actions__preview:focus .ck-button__label{text-decoration:underline}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label{padding:0 var(--ck-spacing-medium);color:var(--ck-color-link-default);text-overflow:ellipsis;cursor:pointer;max-width:var(--ck-input-text-width);min-width:3em;text-align:center}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label:hover{text-decoration:underline}.ck.ck-link-actions:focus{outline:none}[dir=ltr] .ck.ck-link-actions .ck-button:not(:first-child),[dir=rtl] .ck.ck-link-actions .ck-button:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-link-actions{padding:0;width:calc(var(--ck-input-text-width)*0.8)}.ck.ck-link-actions .ck-button.ck-link-actions__preview{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label{min-width:0;max-width:100%}.ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){margin-left:0}[dir=ltr] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview):first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){margin-left:0}[dir=rtl] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview):last-of-type{border-right:1px solid var(--ck-color-base-border)}}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck.ck-link-form{display:-webkit-box;display:-ms-flexbox;display:flex}.ck.ck-link-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-link-form{-ms-flex-wrap:wrap;flex-wrap:wrap}.ck.ck-link-form .ck-labeled-input{-ms-flex-preferred-size:100%;flex-basis:100%}.ck.ck-link-form .ck-button{-ms-flex-preferred-size:50%;flex-basis:50%}}.ck.ck-link-form_layout-vertical{display:block}.ck.ck-link-form{padding:var(--ck-spacing-standard)}.ck.ck-link-form:focus{outline:none}[dir=ltr] .ck.ck-link-form>:not(:first-child),[dir=rtl] .ck.ck-link-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-link-form{padding:0;width:calc(var(--ck-input-text-width)*0.8)}.ck.ck-link-form .ck-labeled-input{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-link-form .ck-labeled-input .ck-input-text{min-width:0;width:100%}.ck.ck-link-form .ck-button{padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-link-form .ck-button{margin-left:0}[dir=ltr] .ck.ck-link-form .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-form .ck-button{margin-left:0}[dir=rtl] .ck.ck-link-form .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}}.ck.ck-link-form_layout-vertical{padding:0;min-width:var(--ck-input-text-width)}.ck.ck-link-form_layout-vertical .ck-labeled-input{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) var(--ck-spacing-small)}.ck.ck-link-form_layout-vertical .ck-labeled-input .ck-input-text{min-width:0;width:100%}.ck.ck-link-form_layout-vertical .ck-button{padding:var(--ck-spacing-standard);margin:0;border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border);width:50%}[dir=ltr] .ck.ck-link-form_layout-vertical .ck-button{margin-left:0}[dir=ltr] .ck.ck-link-form_layout-vertical .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-form_layout-vertical .ck-button{margin-left:0}[dir=rtl] .ck.ck-link-form_layout-vertical .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}.ck.ck-link-form_layout-vertical .ck.ck-list{margin-left:0}.ck.ck-link-form_layout-vertical .ck.ck-list .ck-button.ck-switchbutton{border:0;width:100%}.ck.ck-link-form_layout-vertical .ck.ck-list .ck-button.ck-switchbutton:hover{background:none}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck.ck-button,a.ck.ck-button{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ck.ck-button .ck-tooltip,a.ck.ck-button .ck-tooltip{display:block}@media (hover:none){.ck.ck-button .ck-tooltip,a.ck.ck-button .ck-tooltip{display:none}}.ck.ck-button,a.ck.ck-button{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:left;-ms-flex-pack:left;justify-content:left}.ck.ck-button.ck-button_with-text .ck-button__label,a.ck.ck-button.ck-button_with-text .ck-button__label{display:inline-block}.ck.ck-button:not(.ck-button_with-text),a.ck.ck-button:not(.ck-button_with-text){-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.ck.ck-button:hover .ck-tooltip,a.ck.ck-button:hover .ck-tooltip{visibility:visible;opacity:1}.ck.ck-button .ck-button__label,.ck.ck-button:focus:not(:hover) .ck-tooltip,a.ck.ck-button .ck-button__label,a.ck.ck-button:focus:not(:hover) .ck-tooltip{display:none}.ck.ck-button,a.ck.ck-button{background:var(--ck-color-button-default-background)}.ck.ck-button:not(.ck-disabled):hover,a.ck.ck-button:not(.ck-disabled):hover{background:var(--ck-color-button-default-hover-background)}.ck.ck-button:not(.ck-disabled):active,a.ck.ck-button:not(.ck-disabled):active{background:var(--ck-color-button-default-active-background);-webkit-box-shadow:inset 0 2px 2px var(--ck-color-button-default-active-shadow);box-shadow:inset 0 2px 2px var(--ck-color-button-default-active-shadow)}.ck.ck-button.ck-disabled,a.ck.ck-button.ck-disabled{background:var(--ck-color-button-default-disabled-background)}.ck.ck-button,a.ck.ck-button{border-radius:0}.ck-rounded-corners .ck.ck-button,.ck-rounded-corners a.ck.ck-button,.ck.ck-button.ck-rounded-corners,a.ck.ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-button,a.ck.ck-button{white-space:nowrap;cursor:default;vertical-align:middle;padding:var(--ck-spacing-tiny);text-align:center;min-width:var(--ck-ui-component-min-height);min-height:var(--ck-ui-component-min-height);line-height:1;font-size:inherit;border:1px solid transparent;-webkit-transition:-webkit-box-shadow .2s ease-in-out;transition:-webkit-box-shadow .2s ease-in-out;transition:box-shadow .2s ease-in-out;transition:box-shadow .2s ease-in-out, -webkit-box-shadow .2s ease-in-out;-webkit-appearance:none}.ck.ck-button:active,.ck.ck-button:focus,a.ck.ck-button:active,a.ck.ck-button:focus{outline:none;border:var(--ck-focus-ring);-webkit-box-shadow:var(--ck-focus-outer-shadow),0 0;box-shadow:var(--ck-focus-outer-shadow),0 0;border-color:transparent}.ck.ck-button.ck-disabled:active,.ck.ck-button.ck-disabled:focus,a.ck.ck-button.ck-disabled:active,a.ck.ck-button.ck-disabled:focus{-webkit-box-shadow:var(--ck-focus-disabled-outer-shadow),0 0;box-shadow:var(--ck-focus-disabled-outer-shadow),0 0}.ck.ck-button.ck-disabled .ck-button__icon,a.ck.ck-button.ck-disabled .ck-button__icon{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-disabled .ck-button__label,a.ck.ck-button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-button_with-text,a.ck.ck-button.ck-button_with-text{padding:var(--ck-spacing-tiny) var(--ck-spacing-standard)}[dir=ltr] .ck.ck-button.ck-button_with-text .ck-button__icon,[dir=ltr] a.ck.ck-button.ck-button_with-text .ck-button__icon{margin-left:calc(var(--ck-spacing-small)*-1);margin-right:var(--ck-spacing-small)}[dir=rtl] .ck.ck-button.ck-button_with-text .ck-button__icon,[dir=rtl] a.ck.ck-button.ck-button_with-text .ck-button__icon{margin-right:calc(var(--ck-spacing-small)*-1);margin-left:var(--ck-spacing-small)}.ck.ck-button.ck-on,a.ck.ck-button.ck-on{background:var(--ck-color-button-on-background)}.ck.ck-button.ck-on:not(.ck-disabled):hover,a.ck.ck-button.ck-on:not(.ck-disabled):hover{background:var(--ck-color-button-on-hover-background)}.ck.ck-button.ck-on:not(.ck-disabled):active,a.ck.ck-button.ck-on:not(.ck-disabled):active{background:var(--ck-color-button-on-active-background);-webkit-box-shadow:inset 0 2px 2px var(--ck-color-button-on-active-shadow);box-shadow:inset 0 2px 2px var(--ck-color-button-on-active-shadow)}.ck.ck-button.ck-on.ck-disabled,a.ck.ck-button.ck-on.ck-disabled{background:var(--ck-color-button-on-disabled-background)}.ck.ck-button.ck-button-save,a.ck.ck-button.ck-button-save{color:var(--ck-color-button-save)}.ck.ck-button.ck-button-cancel,a.ck.ck-button.ck-button-cancel{color:var(--ck-color-button-cancel)}.ck.ck-button .ck-button__icon use,.ck.ck-button .ck-button__icon use *,a.ck.ck-button .ck-button__icon use,a.ck.ck-button .ck-button__icon use *{color:inherit}.ck.ck-button .ck-button__label,a.ck.ck-button .ck-button__label{font-size:inherit;font-weight:inherit;color:inherit;cursor:inherit;vertical-align:middle}[dir=ltr] .ck.ck-button .ck-button__label,[dir=ltr] a.ck.ck-button .ck-button__label{text-align:left}[dir=rtl] .ck.ck-button .ck-button__label,[dir=rtl] a.ck.ck-button .ck-button__label{text-align:right}.ck.ck-button-action,a.ck.ck-button-action{background:var(--ck-color-button-action-background)}.ck.ck-button-action:not(.ck-disabled):hover,a.ck.ck-button-action:not(.ck-disabled):hover{background:var(--ck-color-button-action-hover-background)}.ck.ck-button-action:not(.ck-disabled):active,a.ck.ck-button-action:not(.ck-disabled):active{background:var(--ck-color-button-action-active-background);-webkit-box-shadow:inset 0 2px 2px var(--ck-color-button-action-active-shadow);box-shadow:inset 0 2px 2px var(--ck-color-button-action-active-shadow)}.ck.ck-button-action.ck-disabled,a.ck.ck-button-action.ck-disabled{background:var(--ck-color-button-action-disabled-background)}.ck.ck-button-action,a.ck.ck-button-action{color:var(--ck-color-button-action-text)}.ck.ck-button-bold,a.ck.ck-button-bold{font-weight:700}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck.ck-button.ck-switchbutton .ck-button__toggle,.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{display:block}:root{--ck-switch-button-toggle-width:2.6153846154em;--ck-switch-button-toggle-inner-size:1.0769230769em;--ck-switch-button-toggle-spacing:1px;--ck-switch-button-translation:1.3846153847em}[dir=ltr] .ck.ck-button.ck-switchbutton .ck-button__label{margin-right:calc(var(--ck-spacing-large)*2)}[dir=rtl] .ck.ck-button.ck-switchbutton .ck-button__label{margin-left:calc(var(--ck-spacing-large)*2)}.ck.ck-button.ck-switchbutton.ck-disabled .ck-button__toggle{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-switchbutton .ck-button__toggle{border-radius:0}.ck-rounded-corners .ck.ck-button.ck-switchbutton .ck-button__toggle,.ck.ck-button.ck-switchbutton .ck-button__toggle.ck-rounded-corners{border-radius:var(--ck-border-radius)}[dir=ltr] .ck.ck-button.ck-switchbutton .ck-button__toggle{margin-left:auto}[dir=rtl] .ck.ck-button.ck-switchbutton .ck-button__toggle{margin-right:auto}.ck.ck-button.ck-switchbutton .ck-button__toggle{-webkit-transition:background .4s ease;transition:background .4s ease;width:var(--ck-switch-button-toggle-width);background:var(--ck-color-switch-button-off-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover{background:var(--ck-color-switch-button-off-hover-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover .ck-button__toggle__inner{-webkit-box-shadow:0 0 0 5px var(--ck-color-switch-button-inner-shadow);box-shadow:0 0 0 5px var(--ck-color-switch-button-inner-shadow)}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{border-radius:0}.ck-rounded-corners .ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner,.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner.ck-rounded-corners{border-radius:var(--ck-border-radius);border-radius:calc(var(--ck-border-radius)*0.5)}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{margin:var(--ck-switch-button-toggle-spacing);width:var(--ck-switch-button-toggle-inner-size);height:var(--ck-switch-button-toggle-inner-size);background:var(--ck-color-switch-button-inner-background);-webkit-transition:all .3s ease;transition:all .3s ease}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle{background:var(--ck-color-switch-button-on-background)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle:hover{background:var(--ck-color-switch-button-on-hover-background)}[dir=ltr] .ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner{-webkit-transform:translateX(var(--ck-switch-button-translation));transform:translateX(var(--ck-switch-button-translation))}[dir=rtl] .ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner{-webkit-transform:translateX(calc(var(--ck-switch-button-translation)*-1));transform:translateX(calc(var(--ck-switch-button-translation)*-1))}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck.ck-dropdown{display:inline-block;position:relative}.ck.ck-dropdown .ck-dropdown__arrow{pointer-events:none;z-index:var(--ck-z-default)}.ck.ck-dropdown .ck-button.ck-dropdown__button{width:100%}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on .ck-tooltip{display:none}.ck.ck-dropdown .ck-dropdown__panel{-webkit-backface-visibility:hidden;display:none;z-index:var(--ck-z-modal);position:absolute}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel-visible{display:inline-block;will-change:transform}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw{bottom:100%}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se{left:0}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{right:0}:root{--ck-dropdown-arrow-size:calc(var(--ck-icon-size)*0.5)}.ck.ck-dropdown{font-size:inherit}.ck.ck-dropdown .ck-dropdown__arrow{width:var(--ck-dropdown-arrow-size)}[dir=ltr] .ck.ck-dropdown .ck-dropdown__arrow{right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-dropdown .ck-dropdown__arrow{left:var(--ck-spacing-standard);margin-right:var(--ck-spacing-small)}.ck.ck-dropdown.ck-disabled .ck-dropdown__arrow{opacity:var(--ck-disabled-opacity)}[dir=ltr] .ck.ck-dropdown .ck-button.ck-dropdown__button:not(.ck-button_with-text){padding-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-dropdown .ck-button.ck-dropdown__button:not(.ck-button_with-text){padding-right:var(--ck-spacing-small)}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on{border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-dropdown .ck-button.ck-dropdown__button .ck-button__label{width:7em;overflow:hidden;text-overflow:ellipsis}.ck.ck-dropdown__panel{-webkit-box-shadow:var(--ck-drop-shadow),0 0;box-shadow:var(--ck-drop-shadow),0 0;border-radius:0}.ck-rounded-corners .ck.ck-dropdown__panel,.ck.ck-dropdown__panel.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0}.ck.ck-dropdown__panel{background:var(--ck-color-dropdown-panel-background);border:1px solid var(--ck-color-dropdown-panel-border);bottom:0;min-width:100%}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck.ck-dropdown .ck-dropdown__panel .ck-list{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list,.ck.ck-dropdown .ck-dropdown__panel .ck-list.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0}.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button,.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button,.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-top-right-radius:0}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck.ck-toolbar-dropdown .ck.ck-toolbar .ck.ck-toolbar__items{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.ck.ck-toolbar-dropdown .ck-dropdown__panel .ck-button:focus{z-index:calc(var(--ck-z-default) + 1)}.ck.ck-toolbar-dropdown .ck-toolbar{border:0}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck.ck-editor__editable:not(.ck-editor__nested-editable){border-radius:0}.ck-rounded-corners .ck.ck-editor__editable:not(.ck-editor__nested-editable),.ck.ck-editor__editable:not(.ck-editor__nested-editable).ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-editor__editable:not(.ck-editor__nested-editable).ck-focused{outline:none;border:var(--ck-focus-ring);-webkit-box-shadow:var(--ck-inner-shadow),0 0;box-shadow:var(--ck-inner-shadow),0 0}.ck.ck-editor__editable_inline{overflow:auto;padding:0 var(--ck-spacing-standard);border:1px solid transparent}.ck.ck-editor__editable_inline[dir=ltr]{text-align:left}.ck.ck-editor__editable_inline[dir=rtl]{text-align:right}.ck.ck-editor__editable_inline>:first-child{margin-top:var(--ck-spacing-large)}.ck.ck-editor__editable_inline>:last-child{margin-bottom:var(--ck-spacing-large)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_n]:after{border-bottom-color:var(--ck-color-base-foreground)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_s]:after{border-top-color:var(--ck-color-base-foreground)}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck.ck-icon{vertical-align:middle}:root{--ck-icon-size:calc(var(--ck-line-height-base)*var(--ck-font-size-normal))}.ck.ck-icon{width:var(--ck-icon-size);height:var(--ck-icon-size);font-size:.8333350694em;will-change:transform}.ck.ck-icon,.ck.ck-icon *{color:inherit;cursor:inherit}.ck.ck-icon :not([fill]){fill:currentColor}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \":root{--ck-input-text-width:18em}.ck.ck-input-text{border-radius:0}.ck-rounded-corners .ck.ck-input-text,.ck.ck-input-text.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-input-text{-webkit-box-shadow:var(--ck-inner-shadow),0 0;box-shadow:var(--ck-inner-shadow),0 0;background:var(--ck-color-input-background);border:1px solid var(--ck-color-input-border);padding:var(--ck-spacing-extra-tiny) var(--ck-spacing-medium);min-width:var(--ck-input-text-width);min-height:var(--ck-ui-component-min-height);-webkit-transition-property:border,-webkit-box-shadow;transition-property:border,-webkit-box-shadow;transition-property:box-shadow,border;transition-property:box-shadow,border,-webkit-box-shadow;-webkit-transition:.2s ease-in-out;transition:.2s ease-in-out}.ck.ck-input-text:focus{outline:none;border:var(--ck-focus-ring);-webkit-box-shadow:var(--ck-focus-outer-shadow),var(--ck-inner-shadow);box-shadow:var(--ck-focus-outer-shadow),var(--ck-inner-shadow)}.ck.ck-input-text[readonly]{border:1px solid var(--ck-color-input-disabled-border);background:var(--ck-color-input-disabled-background);color:var(--ck-color-input-disabled-text)}.ck.ck-input-text[readonly]:focus{-webkit-box-shadow:var(--ck-focus-disabled-outer-shadow),var(--ck-inner-shadow);box-shadow:var(--ck-focus-disabled-outer-shadow),var(--ck-inner-shadow)}.ck.ck-input-text.ck-error{border-color:var(--ck-color-input-error-border);-webkit-animation:ck-text-input-shake .3s ease both;animation:ck-text-input-shake .3s ease both}.ck.ck-input-text.ck-error:focus{-webkit-box-shadow:var(--ck-focus-error-outer-shadow),var(--ck-inner-shadow);box-shadow:var(--ck-focus-error-outer-shadow),var(--ck-inner-shadow)}@-webkit-keyframes ck-text-input-shake{20%{-webkit-transform:translateX(-2px);transform:translateX(-2px)}40%{-webkit-transform:translateX(2px);transform:translateX(2px)}60%{-webkit-transform:translateX(-1px);transform:translateX(-1px)}80%{-webkit-transform:translateX(1px);transform:translateX(1px)}}@keyframes ck-text-input-shake{20%{-webkit-transform:translateX(-2px);transform:translateX(-2px)}40%{-webkit-transform:translateX(2px);transform:translateX(2px)}60%{-webkit-transform:translateX(-1px);transform:translateX(-1px)}80%{-webkit-transform:translateX(1px);transform:translateX(1px)}}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck.ck-label{display:block}.ck.ck-voice-label{display:none}.ck.ck-label{font-weight:700}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck.ck-labeled-input .ck-labeled-input__status{font-size:var(--ck-font-size-small);margin-top:var(--ck-spacing-small);white-space:normal}.ck.ck-labeled-input .ck-labeled-input__status_error{color:var(--ck-color-base-error)}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck.ck-list{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.ck.ck-list .ck-list__item,.ck.ck-list .ck-list__separator{display:block}.ck.ck-list .ck-list__item>:focus{position:relative;z-index:var(--ck-z-default)}.ck.ck-list{border-radius:0}.ck-rounded-corners .ck.ck-list,.ck.ck-list.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-list{list-style-type:none;background:var(--ck-color-list-background)}.ck.ck-list__item{cursor:default;min-width:12em}.ck.ck-list__item .ck-button{min-height:unset;width:100%;text-align:left;border-radius:0;border:0;padding:calc(var(--ck-line-height-base)*0.2*var(--ck-font-size-base)) calc(var(--ck-line-height-base)*0.4*var(--ck-font-size-base))}.ck.ck-list__item .ck-button .ck-button__label{line-height:calc(var(--ck-line-height-base)*1.2*var(--ck-font-size-base))}.ck.ck-list__item .ck-button:active{-webkit-box-shadow:none;box-shadow:none}.ck.ck-list__item .ck-button.ck-on{background:var(--ck-color-list-button-on-background);color:var(--ck-color-list-button-on-text)}.ck.ck-list__item .ck-button.ck-on:hover:not(ck-disabled){background:var(--ck-color-list-button-on-background-focus)}.ck.ck-list__item .ck-button.ck-on:active{-webkit-box-shadow:none;box-shadow:none}.ck.ck-list__item .ck-button:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background)}.ck.ck-list__item .ck-switchbutton.ck-on{background:var(--ck-color-list-background);color:inherit}.ck.ck-list__item .ck-switchbutton.ck-on:hover:not(ck-disabled){background:var(--ck-color-list-button-hover-background);color:inherit}.ck.ck-list__separator{height:1px;width:100%;background:var(--ck-color-base-border)}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \":root{--ck-balloon-panel-arrow-z-index:calc(var(--ck-z-default) - 3)}.ck.ck-balloon-panel{display:none;position:absolute;z-index:var(--ck-z-modal)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{content:\\\"\\\";position:absolute}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_n]:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_n]:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_s]:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_s]:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel.ck-balloon-panel_visible{display:block}:root{--ck-balloon-arrow-offset:2px;--ck-balloon-arrow-height:10px;--ck-balloon-arrow-half-width:8px}.ck.ck-balloon-panel{border-radius:0}.ck-rounded-corners .ck.ck-balloon-panel,.ck.ck-balloon-panel.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-balloon-panel{-webkit-box-shadow:var(--ck-drop-shadow),0 0;box-shadow:var(--ck-drop-shadow),0 0;min-height:15px;background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{width:0;height:0;border-style:solid}.ck.ck-balloon-panel[class*=arrow_n]:after,.ck.ck-balloon-panel[class*=arrow_n]:before{border-left-width:var(--ck-balloon-arrow-half-width);border-bottom-width:var(--ck-balloon-arrow-height);border-right-width:var(--ck-balloon-arrow-half-width);border-top-width:0}.ck.ck-balloon-panel[class*=arrow_n]:before{border-bottom-color:var(--ck-color-panel-border)}.ck.ck-balloon-panel[class*=arrow_n]:after,.ck.ck-balloon-panel[class*=arrow_n]:before{border-left-color:transparent;border-right-color:transparent;border-top-color:transparent}.ck.ck-balloon-panel[class*=arrow_n]:after{border-bottom-color:var(--ck-color-panel-background);margin-top:var(--ck-balloon-arrow-offset)}.ck.ck-balloon-panel[class*=arrow_s]:after,.ck.ck-balloon-panel[class*=arrow_s]:before{border-left-width:var(--ck-balloon-arrow-half-width);border-bottom-width:0;border-right-width:var(--ck-balloon-arrow-half-width);border-top-width:var(--ck-balloon-arrow-height)}.ck.ck-balloon-panel[class*=arrow_s]:before{border-top-color:var(--ck-color-panel-border)}.ck.ck-balloon-panel[class*=arrow_s]:after,.ck.ck-balloon-panel[class*=arrow_s]:before{border-left-color:transparent;border-bottom-color:transparent;border-right-color:transparent}.ck.ck-balloon-panel[class*=arrow_s]:after{border-top-color:var(--ck-color-panel-background);margin-bottom:var(--ck-balloon-arrow-offset)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:before{left:50%;margin-left:calc(var(--ck-balloon-arrow-half-width)*-1);top:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:before{left:calc(var(--ck-balloon-arrow-half-width)*2);top:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:before{right:calc(var(--ck-balloon-arrow-half-width)*2);top:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:before{left:50%;margin-left:calc(var(--ck-balloon-arrow-half-width)*-1);bottom:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:before{left:calc(var(--ck-balloon-arrow-half-width)*2);bottom:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:before{right:calc(var(--ck-balloon-arrow-half-width)*2);bottom:calc(var(--ck-balloon-arrow-height)*-1)}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck .ck-balloon-rotator__navigation{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.ck .ck-balloon-rotator__content .ck-toolbar{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.ck .ck-balloon-rotator__navigation{background:var(--ck-color-toolbar-background);border-bottom:1px solid var(--ck-color-toolbar-border);padding:0 var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation>*{margin-right:var(--ck-spacing-small);margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation .ck-balloon-rotator__counter{margin-right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-small)}.ck .ck-balloon-rotator__content .ck.ck-annotation-wrapper{-webkit-box-shadow:none;box-shadow:none}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck .ck-fake-panel{position:absolute;z-index:calc(var(--ck-z-modal) - 1)}.ck .ck-fake-panel div{position:absolute}.ck .ck-fake-panel div:first-child{z-index:2}.ck .ck-fake-panel div:nth-child(2){z-index:1}:root{--ck-balloon-fake-panel-offset-horizontal:6px;--ck-balloon-fake-panel-offset-vertical:6px}.ck .ck-fake-panel div{-webkit-box-shadow:var(--ck-drop-shadow),0 0;box-shadow:var(--ck-drop-shadow),0 0;min-height:15px;background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border);border-radius:var(--ck-border-radius);width:100%;height:100%}.ck .ck-fake-panel div:first-child{margin-left:var(--ck-balloon-fake-panel-offset-horizontal);margin-top:var(--ck-balloon-fake-panel-offset-vertical)}.ck .ck-fake-panel div:nth-child(2){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*2);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*2)}.ck .ck-fake-panel div:nth-child(3){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*3);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*3)}.ck .ck-balloon-panel_arrow_s+.ck-fake-panel,.ck .ck-balloon-panel_arrow_se+.ck-fake-panel,.ck .ck-balloon-panel_arrow_sw+.ck-fake-panel{--ck-balloon-fake-panel-offset-vertical:-6px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck.ck-sticky-panel .ck-sticky-panel__content_sticky{z-index:var(--ck-z-modal);position:fixed;top:0}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky_bottom-limit{top:auto;position:absolute}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky{-webkit-box-shadow:var(--ck-drop-shadow),0 0;box-shadow:var(--ck-drop-shadow),0 0;border-width:0 1px 1px;border-top-left-radius:0;border-top-right-radius:0}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck.ck-toolbar{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ck.ck-toolbar>.ck-toolbar__items{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.ck.ck-toolbar .ck.ck-toolbar__separator{display:inline-block}.ck.ck-toolbar .ck.ck-toolbar__separator:first-child,.ck.ck-toolbar .ck.ck-toolbar__separator:last-child{display:none}.ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.ck.ck-toolbar.ck-toolbar_floating>.ck-toolbar__items{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck-dropdown__button .ck-dropdown__arrow{display:none}.ck.ck-toolbar{border-radius:0}.ck-rounded-corners .ck.ck-toolbar,.ck.ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-toolbar{background:var(--ck-color-toolbar-background);padding:0 var(--ck-spacing-small);border:1px solid var(--ck-color-toolbar-border)}.ck.ck-toolbar>.ck-toolbar__items>*{margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small);margin-right:var(--ck-spacing-small)}.ck.ck-toolbar.ck-toolbar_vertical{padding:0}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items>.ck{width:100%;margin:0;border-radius:0;border:0}.ck.ck-toolbar>.ck-toolbar__items>*,.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown{margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck.ck-button.ck-dropdown__button{padding-left:var(--ck-spacing-tiny)}.ck.ck-toolbar .ck.ck-toolbar__separator{-ms-flex-item-align:stretch;align-self:stretch;width:1px;min-width:1px;margin-top:0;margin-bottom:0;background:var(--ck-color-toolbar-border)}.ck-toolbar-container .ck.ck-toolbar{border:0}.ck.ck-toolbar[dir=ltr]>.ck.ck-toolbar__grouped-dropdown,[dir=ltr] .ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown{padding-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=ltr]>.ck.ck-toolbar__items>:last-child,[dir=ltr] .ck.ck-toolbar>.ck.ck-toolbar__items>:last-child{margin-right:0}.ck.ck-toolbar[dir=ltr].ck-toolbar_grouping>.ck-toolbar__items,[dir=ltr] .ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items{margin-right:var(--ck-spacing-small)}.ck.ck-toolbar[dir=rtl]>.ck.ck-toolbar__grouped-dropdown,[dir=rtl] .ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown{padding-right:var(--ck-spacing-small)}.ck.ck-toolbar[dir=rtl]>.ck.ck-toolbar__items>*,[dir=rtl] .ck.ck-toolbar>.ck.ck-toolbar__items>*{margin-left:var(--ck-spacing-small);margin-right:0}.ck.ck-toolbar[dir=rtl]>.ck.ck-toolbar__items>:last-child,[dir=rtl] .ck.ck-toolbar>.ck.ck-toolbar__items>:last-child{margin-left:0}.ck.ck-toolbar[dir=rtl].ck-toolbar_grouping>.ck-toolbar__items,[dir=rtl] .ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items{margin-left:var(--ck-spacing-small)}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck.ck-tooltip,.ck.ck-tooltip .ck-tooltip__text:after{position:absolute;pointer-events:none;-webkit-backface-visibility:hidden}.ck-tooltip{visibility:hidden;opacity:0;display:none;z-index:var(--ck-z-modal)}.ck-tooltip .ck-tooltip__text{display:inline-block}.ck-tooltip .ck-tooltip__text:after{content:\\\"\\\";width:0;height:0}:root{--ck-tooltip-arrow-size:5px}.ck.ck-tooltip{left:50%;top:0}.ck.ck-tooltip.ck-tooltip_s{bottom:calc(var(--ck-tooltip-arrow-size)*-1);-webkit-transform:translateY(100%);transform:translateY(100%)}.ck.ck-tooltip.ck-tooltip_s .ck-tooltip__text:after{top:calc(var(--ck-tooltip-arrow-size)*-1);-webkit-transform:translateX(-50%);transform:translateX(-50%);border-left-color:transparent;border-bottom-color:var(--ck-color-tooltip-background);border-right-color:transparent;border-top-color:transparent;border-left-width:var(--ck-tooltip-arrow-size);border-bottom-width:var(--ck-tooltip-arrow-size);border-right-width:var(--ck-tooltip-arrow-size);border-top-width:0}.ck.ck-tooltip.ck-tooltip_n{top:calc(var(--ck-tooltip-arrow-size)*-1);-webkit-transform:translateY(-100%);transform:translateY(-100%)}.ck.ck-tooltip.ck-tooltip_n .ck-tooltip__text:after{bottom:calc(var(--ck-tooltip-arrow-size)*-1);-webkit-transform:translateX(-50%);transform:translateX(-50%);border-left-color:transparent;border-bottom-color:transparent;border-right-color:transparent;border-top-color:var(--ck-color-tooltip-background);border-left-width:var(--ck-tooltip-arrow-size);border-bottom-width:0;border-right-width:var(--ck-tooltip-arrow-size);border-top-width:var(--ck-tooltip-arrow-size)}.ck.ck-tooltip .ck-tooltip__text{border-radius:0}.ck-rounded-corners .ck.ck-tooltip .ck-tooltip__text,.ck.ck-tooltip .ck-tooltip__text.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-tooltip .ck-tooltip__text{font-size:.9em;line-height:1.5;color:var(--ck-color-tooltip-text);padding:var(--ck-spacing-small) var(--ck-spacing-medium);background:var(--ck-color-tooltip-background);position:relative;left:-50%}.ck.ck-tooltip .ck-tooltip__text:after{border-style:solid;left:50%}.ck.ck-tooltip,.ck.ck-tooltip .ck-tooltip__text:after{-webkit-transition:opacity .2s ease-in-out .2s;transition:opacity .2s ease-in-out .2s}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ck-hidden{display:none!important}.ck.ck-reset,.ck.ck-reset_all,.ck.ck-reset_all *{-webkit-box-sizing:border-box;box-sizing:border-box;width:auto;height:auto;position:static}:root{--ck-z-default:1;--ck-z-modal:calc(var(--ck-z-default) + 999);--ck-color-base-foreground:#fafafa;--ck-color-base-background:#fff;--ck-color-base-border:#c4c4c4;--ck-color-base-action:#61b045;--ck-color-base-focus:#6cb5f9;--ck-color-base-text:#333;--ck-color-base-active:#198cf0;--ck-color-base-active-focus:#0e7fe1;--ck-color-base-error:#db3700;--ck-color-focus-border:#47a4f5;--ck-color-focus-shadow:rgba(119,186,248,0.5);--ck-color-focus-disabled-shadow:rgba(119,186,248,0.3);--ck-color-focus-error-shadow:rgba(255,64,31,0.3);--ck-color-text:var(--ck-color-base-text);--ck-color-shadow-drop:rgba(0,0,0,0.15);--ck-color-shadow-drop-active:rgba(0,0,0,0.2);--ck-color-shadow-inner:rgba(0,0,0,0.1);--ck-color-button-default-background:transparent;--ck-color-button-default-hover-background:#e6e6e6;--ck-color-button-default-active-background:#d9d9d9;--ck-color-button-default-active-shadow:#bfbfbf;--ck-color-button-default-disabled-background:transparent;--ck-color-button-on-background:#dedede;--ck-color-button-on-hover-background:#c4c4c4;--ck-color-button-on-active-background:#bababa;--ck-color-button-on-active-shadow:#a1a1a1;--ck-color-button-on-disabled-background:#dedede;--ck-color-button-action-background:var(--ck-color-base-action);--ck-color-button-action-hover-background:#579e3d;--ck-color-button-action-active-background:#53973b;--ck-color-button-action-active-shadow:#498433;--ck-color-button-action-disabled-background:#7ec365;--ck-color-button-action-text:var(--ck-color-base-background);--ck-color-button-save:#008a00;--ck-color-button-cancel:#db3700;--ck-color-switch-button-off-background:#b0b0b0;--ck-color-switch-button-off-hover-background:#a3a3a3;--ck-color-switch-button-on-background:var(--ck-color-button-action-background);--ck-color-switch-button-on-hover-background:#579e3d;--ck-color-switch-button-inner-background:var(--ck-color-base-background);--ck-color-switch-button-inner-shadow:rgba(0,0,0,0.1);--ck-color-dropdown-panel-background:var(--ck-color-base-background);--ck-color-dropdown-panel-border:var(--ck-color-base-border);--ck-color-input-background:var(--ck-color-base-background);--ck-color-input-border:#c7c7c7;--ck-color-input-error-border:var(--ck-color-base-error);--ck-color-input-text:var(--ck-color-base-text);--ck-color-input-disabled-background:#f2f2f2;--ck-color-input-disabled-border:#c7c7c7;--ck-color-input-disabled-text:#5c5c5c;--ck-color-list-background:var(--ck-color-base-background);--ck-color-list-button-hover-background:var(--ck-color-button-default-hover-background);--ck-color-list-button-on-background:var(--ck-color-base-active);--ck-color-list-button-on-background-focus:var(--ck-color-base-active-focus);--ck-color-list-button-on-text:var(--ck-color-base-background);--ck-color-panel-background:var(--ck-color-base-background);--ck-color-panel-border:var(--ck-color-base-border);--ck-color-toolbar-background:var(--ck-color-base-foreground);--ck-color-toolbar-border:var(--ck-color-base-border);--ck-color-tooltip-background:var(--ck-color-base-text);--ck-color-tooltip-text:var(--ck-color-base-background);--ck-color-engine-placeholder-text:#707070;--ck-color-upload-bar-background:#6cb5f9;--ck-color-link-default:#0000f0;--ck-color-link-selected-background:rgba(31,177,255,0.1);--ck-disabled-opacity:.5;--ck-focus-outer-shadow-geometry:0 0 0 3px;--ck-focus-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-shadow);--ck-focus-disabled-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-disabled-shadow);--ck-focus-error-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-error-shadow);--ck-focus-ring:1px solid var(--ck-color-focus-border);--ck-font-size-base:13px;--ck-line-height-base:1.84615;--ck-font-face:Helvetica,Arial,Tahoma,Verdana,Sans-Serif;--ck-font-size-tiny:0.7em;--ck-font-size-small:0.75em;--ck-font-size-normal:1em;--ck-font-size-big:1.4em;--ck-font-size-large:1.8em;--ck-ui-component-min-height:2.3em}.ck.ck-reset,.ck.ck-reset_all,.ck.ck-reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;vertical-align:middle;-webkit-transition:none;transition:none;word-wrap:break-word}.ck.ck-reset_all,.ck.ck-reset_all *{border-collapse:collapse;font:normal normal normal var(--ck-font-size-base)/var(--ck-line-height-base) var(--ck-font-face);color:var(--ck-color-text);text-align:left;white-space:nowrap;cursor:auto;float:none}.ck.ck-reset_all .ck-rtl *{text-align:right}.ck.ck-reset_all iframe{vertical-align:inherit}.ck.ck-reset_all textarea{white-space:pre-wrap}.ck.ck-reset_all input[type=password],.ck.ck-reset_all input[type=text],.ck.ck-reset_all textarea{cursor:text}.ck.ck-reset_all input[type=password][disabled],.ck.ck-reset_all input[type=text][disabled],.ck.ck-reset_all textarea[disabled]{cursor:default}.ck.ck-reset_all fieldset{padding:10px;border:2px groove #dfdee3}.ck.ck-reset_all button::-moz-focus-inner{padding:0;border:0}.ck[dir=rtl],.ck[dir=rtl] .ck{text-align:right}:root{--ck-border-radius:2px;--ck-inner-shadow:2px 2px 3px var(--ck-color-shadow-inner) inset;--ck-drop-shadow:0 1px 2px 1px var(--ck-color-shadow-drop);--ck-drop-shadow-active:0 3px 6px 1px var(--ck-color-shadow-drop-active);--ck-spacing-unit:0.6em;--ck-spacing-large:calc(var(--ck-spacing-unit)*1.5);--ck-spacing-standard:var(--ck-spacing-unit);--ck-spacing-medium:calc(var(--ck-spacing-unit)*0.8);--ck-spacing-small:calc(var(--ck-spacing-unit)*0.5);--ck-spacing-tiny:calc(var(--ck-spacing-unit)*0.3);--ck-spacing-extra-tiny:calc(var(--ck-spacing-unit)*0.16)}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"/**\\n* Colors\\n*/\\n/**\\n* Text sizes\\n*/\\n/**\\n* Column settings\\n*/\\n/**\\n* Font properties\\n*/\\n.is-danger {\\n  --ck-color-toolbar-border: red;\\n  --ck-color-text: red;\\n  --ck-color-base-border: red;\\n}\\n.ck-editor {\\n  height: 100%;\\n}\\n.ck-editor .ck-editor__editable {\\n  height: var(--ckEditorHeight, 300px);\\n}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\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 == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\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\nexport default Hash;\n","import baseCreate from './_baseCreate.js';\nimport baseLodash from './_baseLodash.js';\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295;\n\n/**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\nfunction LazyWrapper(value) {\n  this.__wrapped__ = value;\n  this.__actions__ = [];\n  this.__dir__ = 1;\n  this.__filtered__ = false;\n  this.__iteratees__ = [];\n  this.__takeCount__ = MAX_ARRAY_LENGTH;\n  this.__views__ = [];\n}\n\n// Ensure `LazyWrapper` is an instance of `baseLodash`.\nLazyWrapper.prototype = baseCreate(baseLodash.prototype);\nLazyWrapper.prototype.constructor = LazyWrapper;\n\nexport default LazyWrapper;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\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 == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\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\nexport default ListCache;\n","import baseCreate from './_baseCreate.js';\nimport baseLodash from './_baseLodash.js';\n\n/**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\nfunction LodashWrapper(value, chainAll) {\n  this.__wrapped__ = value;\n  this.__actions__ = [];\n  this.__chain__ = !!chainAll;\n  this.__index__ = 0;\n  this.__values__ = undefined;\n}\n\nLodashWrapper.prototype = baseCreate(baseLodash.prototype);\nLodashWrapper.prototype.constructor = LodashWrapper;\n\nexport default LodashWrapper;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\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 == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\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\nexport default MapCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\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 == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\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  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\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\nexport default Stack;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\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\nexport default apply;\n","/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    var value = array[index];\n    setter(accumulator, value, iteratee(value), array);\n  }\n  return accumulator;\n}\n\nexport default arrayAggregator;\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 == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nexport default arrayEach;\n","/**\n * A specialized version of `_.forEachRight` 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 arrayEachRight(array, iteratee) {\n  var length = array == null ? 0 : array.length;\n\n  while (length--) {\n    if (iteratee(array[length], length, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nexport default arrayEachRight;\n","/**\n * A specialized version of `_.every` for arrays without support for\n * iteratee 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 all elements pass the predicate check,\n *  else `false`.\n */\nfunction arrayEvery(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (!predicate(array[index], index, array)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport default arrayEvery;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nexport default arrayFilter;\n","import baseIndexOf from './_baseIndexOf.js';\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 == null ? 0 : array.length;\n  return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\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 == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (comparator(value, array[index])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport default arrayIncludesWith;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\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 * 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  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default arrayLikeKeys;\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 == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nexport default arrayMap;\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\nexport default arrayPush;\n","/**\n * A specialized version of `_.reduce` 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 * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n *  the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  if (initAccum && length) {\n    accumulator = array[++index];\n  }\n  while (++index < length) {\n    accumulator = iteratee(accumulator, array[index], index, array);\n  }\n  return accumulator;\n}\n\nexport default arrayReduce;\n","/**\n * A specialized version of `_.reduceRight` 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 * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n *  the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduceRight(array, iteratee, accumulator, initAccum) {\n  var length = array == null ? 0 : array.length;\n  if (initAccum && length) {\n    accumulator = array[--length];\n  }\n  while (length--) {\n    accumulator = iteratee(accumulator, array[length], length, array);\n  }\n  return accumulator;\n}\n\nexport default arrayReduceRight;\n","import baseRandom from './_baseRandom.js';\n\n/**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\nfunction arraySample(array) {\n  var length = array.length;\n  return length ? array[baseRandom(0, length - 1)] : undefined;\n}\n\nexport default arraySample;\n","import baseClamp from './_baseClamp.js';\nimport copyArray from './_copyArray.js';\nimport shuffleSelf from './_shuffleSelf.js';\n\n/**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\nfunction arraySampleSize(array, n) {\n  return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n}\n\nexport default arraySampleSize;\n","import copyArray from './_copyArray.js';\nimport shuffleSelf from './_shuffleSelf.js';\n\n/**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\nfunction arrayShuffle(array) {\n  return shuffleSelf(copyArray(array));\n}\n\nexport default arrayShuffle;\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 == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport default arraySome;\n","import baseProperty from './_baseProperty.js';\n\n/**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nvar asciiSize = baseProperty('length');\n\nexport default asciiSize;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n  return string.split('');\n}\n\nexport default asciiToArray;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n  return string.match(reAsciiWord) || [];\n}\n\nexport default asciiWords;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nexport default assignMergeValue;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\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 * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nexport default assignValue;\n","import eq from './eq.js';\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\nexport default assocIndexOf;\n","import baseEach from './_baseEach.js';\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n  baseEach(collection, function(value, key, collection) {\n    setter(accumulator, value, iteratee(value), collection);\n  });\n  return accumulator;\n}\n\nexport default baseAggregator;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nexport default baseAssignValue;\n","import get from './get.js';\n\n/**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\nfunction baseAt(object, paths) {\n  var index = -1,\n      length = paths.length,\n      result = Array(length),\n      skip = object == null;\n\n  while (++index < length) {\n    result[index] = skip ? undefined : get(object, paths[index]);\n  }\n  return result;\n}\n\nexport default baseAt;\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n  if (number === number) {\n    if (upper !== undefined) {\n      number = number <= upper ? number : upper;\n    }\n    if (lower !== undefined) {\n      number = number >= lower ? number : lower;\n    }\n  }\n  return number;\n}\n\nexport default baseClamp;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\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    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 identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nexport default baseClone;\n","import baseConformsTo from './_baseConformsTo.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseConforms(source) {\n  var props = keys(source);\n  return function(object) {\n    return baseConformsTo(object, source, props);\n  };\n}\n\nexport default baseConforms;\n","/**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\nfunction baseConformsTo(object, source, props) {\n  var length = props.length;\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (length--) {\n    var key = props[length],\n        predicate = source[key],\n        value = object[key];\n\n    if ((value === undefined && !(key in object)) || !predicate(value)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport default baseConformsTo;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nexport default baseCreate;\n","/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\nfunction baseDelay(func, wait, args) {\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  return setTimeout(function() { func.apply(undefined, args); }, wait);\n}\n\nexport default baseDelay;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      isCommon = true,\n      length = array.length,\n      result = [],\n      valuesLength = values.length;\n\n  if (!length) {\n    return result;\n  }\n  if (iteratee) {\n    values = arrayMap(values, baseUnary(iteratee));\n  }\n  if (comparator) {\n    includes = arrayIncludesWith;\n    isCommon = false;\n  }\n  else if (values.length >= LARGE_ARRAY_SIZE) {\n    includes = cacheHas;\n    isCommon = false;\n    values = new SetCache(values);\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee == null ? value : iteratee(value);\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var valuesIndex = valuesLength;\n      while (valuesIndex--) {\n        if (values[valuesIndex] === computed) {\n          continue outer;\n        }\n      }\n      result.push(value);\n    }\n    else if (!includes(values, computed, comparator)) {\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nexport default baseDifference;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\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\nexport default baseEach;\n","import baseForOwnRight from './_baseForOwnRight.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEachRight` 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 baseEachRight = createBaseEach(baseForOwnRight, true);\n\nexport default baseEachRight;\n","import baseEach from './_baseEach.js';\n\n/**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n *  else `false`\n */\nfunction baseEvery(collection, predicate) {\n  var result = true;\n  baseEach(collection, function(value, index, collection) {\n    result = !!predicate(value, index, collection);\n    return result;\n  });\n  return result;\n}\n\nexport default baseEvery;\n","import isSymbol from './isSymbol.js';\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n  var index = -1,\n      length = array.length;\n\n  while (++index < length) {\n    var value = array[index],\n        current = iteratee(value);\n\n    if (current != null && (computed === undefined\n          ? (current === current && !isSymbol(current))\n          : comparator(current, computed)\n        )) {\n      var computed = current,\n          result = value;\n    }\n  }\n  return result;\n}\n\nexport default baseExtremum;\n","import toInteger from './toInteger.js';\nimport toLength from './toLength.js';\n\n/**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\nfunction baseFill(array, value, start, end) {\n  var length = array.length;\n\n  start = toInteger(start);\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = (end === undefined || end > length) ? length : toInteger(end);\n  if (end < 0) {\n    end += length;\n  }\n  end = start > end ? 0 : toLength(end);\n  while (start < end) {\n    array[start++] = value;\n  }\n  return array;\n}\n\nexport default baseFill;\n","import baseEach from './_baseEach.js';\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n  var result = [];\n  baseEach(collection, function(value, index, collection) {\n    if (predicate(value, index, collection)) {\n      result.push(value);\n    }\n  });\n  return result;\n}\n\nexport default baseFilter;\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\nexport default baseFindIndex;\n","/**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\nfunction baseFindKey(collection, predicate, eachFunc) {\n  var result;\n  eachFunc(collection, function(value, key, collection) {\n    if (predicate(value, key, collection)) {\n      result = key;\n      return false;\n    }\n  });\n  return result;\n}\n\nexport default baseFindKey;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\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\nexport default baseFlatten;\n","import createBaseFor from './_createBaseFor.js';\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\nexport default baseFor;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\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\nexport default baseForOwn;\n","import baseForRight from './_baseForRight.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwnRight` 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 baseForOwnRight(object, iteratee) {\n  return object && baseForRight(object, iteratee, keys);\n}\n\nexport default baseForOwnRight;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\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 baseForRight = createBaseFor(true);\n\nexport default baseForRight;\n","import arrayFilter from './_arrayFilter.js';\nimport isFunction from './isFunction.js';\n\n/**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\nfunction baseFunctions(object, props) {\n  return arrayFilter(props, function(key) {\n    return isFunction(object[key]);\n  });\n}\n\nexport default baseFunctions;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\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 = castPath(path, object);\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\nexport default baseGet;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n *  else `false`.\n */\nfunction baseGt(value, other) {\n  return value > other;\n}\n\nexport default baseGt;\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 * The base implementation of `_.has` 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 baseHas(object, key) {\n  return object != null && hasOwnProperty.call(object, key);\n}\n\nexport default baseHas;\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\nexport default baseHasIn;\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 * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\nfunction baseInRange(number, start, end) {\n  return number >= nativeMin(start, end) && number < nativeMax(start, end);\n}\n\nexport default baseInRange;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\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  return value === value\n    ? strictIndexOf(array, value, fromIndex)\n    : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","/**\n * This function is like `baseIndexOf` except that it accepts a comparator.\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 * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOfWith(array, value, fromIndex, comparator) {\n  var index = fromIndex - 1,\n      length = array.length;\n\n  while (++index < length) {\n    if (comparator(array[index], value)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nexport default baseIndexOfWith;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays 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 array of shared values.\n */\nfunction baseIntersection(arrays, iteratee, comparator) {\n  var includes = comparator ? arrayIncludesWith : arrayIncludes,\n      length = arrays[0].length,\n      othLength = arrays.length,\n      othIndex = othLength,\n      caches = Array(othLength),\n      maxLength = Infinity,\n      result = [];\n\n  while (othIndex--) {\n    var array = arrays[othIndex];\n    if (othIndex && iteratee) {\n      array = arrayMap(array, baseUnary(iteratee));\n    }\n    maxLength = nativeMin(array.length, maxLength);\n    caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n      ? new SetCache(othIndex && array)\n      : undefined;\n  }\n  array = arrays[0];\n\n  var index = -1,\n      seen = caches[0];\n\n  outer:\n  while (++index < length && result.length < maxLength) {\n    var value = array[index],\n        computed = iteratee ? iteratee(value) : value;\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (!(seen\n          ? cacheHas(seen, computed)\n          : includes(result, computed, comparator)\n        )) {\n      othIndex = othLength;\n      while (--othIndex) {\n        var cache = caches[othIndex];\n        if (!(cache\n              ? cacheHas(cache, computed)\n              : includes(arrays[othIndex], computed, comparator))\n            ) {\n          continue outer;\n        }\n      }\n      if (seen) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nexport default baseIntersection;\n","import baseForOwn from './_baseForOwn.js';\n\n/**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseInverter(object, setter, iteratee, accumulator) {\n  baseForOwn(object, function(value, key, object) {\n    setter(accumulator, iteratee(value), key, object);\n  });\n  return accumulator;\n}\n\nexport default baseInverter;\n","import apply from './_apply.js';\nimport castPath from './_castPath.js';\nimport last from './last.js';\nimport parent from './_parent.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\nfunction baseInvoke(object, path, args) {\n  path = castPath(path, object);\n  object = parent(object, path);\n  var func = object == null ? object : object[toKey(last(path))];\n  return func == null ? undefined : apply(func, object, args);\n}\n\nexport default baseInvoke;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\nvar arrayBufferTag = '[object ArrayBuffer]';\n\n/**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\nfunction baseIsArrayBuffer(value) {\n  return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n}\n\nexport default baseIsArrayBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar dateTag = '[object Date]';\n\n/**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\nfunction baseIsDate(value) {\n  return isObjectLike(value) && baseGetTag(value) == dateTag;\n}\n\nexport default baseIsDate;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\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 {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\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, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\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 * 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 {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\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, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_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, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\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, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nexport default baseIsMatch;\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\nexport default baseIsNaN;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\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 detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\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/** 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/**\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) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar regexpTag = '[object RegExp]';\n\n/**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\nfunction baseIsRegExp(value) {\n  return isObjectLike(value) && baseGetTag(value) == regexpTag;\n}\n\nexport default baseIsRegExp;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\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    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\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 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/**\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[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\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\nexport default baseIteratee;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\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 * 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\nexport default baseKeys;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\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 * The base implementation of `_.keysIn` 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 baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeysIn;\n","/**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\nfunction baseLodash() {\n  // No operation performed.\n}\n\nexport default baseLodash;\n","/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n *  else `false`.\n */\nfunction baseLt(value, other) {\n  return value < other;\n}\n\nexport default baseLt;\n","import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\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\nexport default baseMap;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\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\nexport default baseMatches;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\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, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nexport default baseMatchesProperty;\n","import baseSum from './_baseSum.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/**\n * The base implementation of `_.mean` and `_.meanBy` 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 {number} Returns the mean.\n */\nfunction baseMean(array, iteratee) {\n  var length = array == null ? 0 : array.length;\n  return length ? (baseSum(array, iteratee) / length) : NAN;\n}\n\nexport default baseMean;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\nexport default baseMerge;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import isIndex from './_isIndex.js';\n\n/**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\nfunction baseNth(array, n) {\n  var length = array.length;\n  if (!length) {\n    return;\n  }\n  n += n < 0 ? length : 0;\n  return isIndex(n, length) ? array[n] : undefined;\n}\n\nexport default baseNth;\n","import arrayMap from './_arrayMap.js';\nimport baseGet from './_baseGet.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport baseSortBy from './_baseSortBy.js';\nimport baseUnary from './_baseUnary.js';\nimport compareMultiple from './_compareMultiple.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\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  if (iteratees.length) {\n    iteratees = arrayMap(iteratees, function(iteratee) {\n      if (isArray(iteratee)) {\n        return function(value) {\n          return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n        }\n      }\n      return iteratee;\n    });\n  } else {\n    iteratees = [identity];\n  }\n\n  var index = -1;\n  iteratees = arrayMap(iteratees, 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\nexport default baseOrderBy;\n","import basePickBy from './_basePickBy.js';\nimport hasIn from './hasIn.js';\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n  return basePickBy(object, paths, function(value, path) {\n    return hasIn(object, path);\n  });\n}\n\nexport default basePick;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\n\n/**\n * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n  var index = -1,\n      length = paths.length,\n      result = {};\n\n  while (++index < length) {\n    var path = paths[index],\n        value = baseGet(object, path);\n\n    if (predicate(value, path)) {\n      baseSet(result, castPath(path, object), value);\n    }\n  }\n  return result;\n}\n\nexport default basePickBy;\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\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\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\nexport default basePropertyDeep;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n  return function(key) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nexport default basePropertyOf;\n","import arrayMap from './_arrayMap.js';\nimport baseIndexOf from './_baseIndexOf.js';\nimport baseIndexOfWith from './_baseIndexOfWith.js';\nimport baseUnary from './_baseUnary.js';\nimport copyArray from './_copyArray.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\nfunction basePullAll(array, values, iteratee, comparator) {\n  var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n      index = -1,\n      length = values.length,\n      seen = array;\n\n  if (array === values) {\n    values = copyArray(values);\n  }\n  if (iteratee) {\n    seen = arrayMap(array, baseUnary(iteratee));\n  }\n  while (++index < length) {\n    var fromIndex = 0,\n        value = values[index],\n        computed = iteratee ? iteratee(value) : value;\n\n    while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n      if (seen !== array) {\n        splice.call(seen, fromIndex, 1);\n      }\n      splice.call(array, fromIndex, 1);\n    }\n  }\n  return array;\n}\n\nexport default basePullAll;\n","import baseUnset from './_baseUnset.js';\nimport isIndex from './_isIndex.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\nfunction basePullAt(array, indexes) {\n  var length = array ? indexes.length : 0,\n      lastIndex = length - 1;\n\n  while (length--) {\n    var index = indexes[length];\n    if (length == lastIndex || index !== previous) {\n      var previous = index;\n      if (isIndex(index)) {\n        splice.call(array, index, 1);\n      } else {\n        baseUnset(array, index);\n      }\n    }\n  }\n  return array;\n}\n\nexport default basePullAt;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeFloor = Math.floor,\n    nativeRandom = Math.random;\n\n/**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\nfunction baseRandom(lower, upper) {\n  return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n}\n\nexport default baseRandom;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n    nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n  var index = -1,\n      length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n      result = Array(length);\n\n  while (length--) {\n    result[fromRight ? length : ++index] = start;\n    start += step;\n  }\n  return result;\n}\n\nexport default baseRange;\n","/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n *  `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n  eachFunc(collection, function(value, index, collection) {\n    accumulator = initAccum\n      ? (initAccum = false, value)\n      : iteratee(accumulator, value, index, collection);\n  });\n  return accumulator;\n}\n\nexport default baseReduce;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeFloor = Math.floor;\n\n/**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\nfunction baseRepeat(string, n) {\n  var result = '';\n  if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n    return result;\n  }\n  // Leverage the exponentiation by squaring algorithm for a faster repeat.\n  // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n  do {\n    if (n % 2) {\n      result += string;\n    }\n    n = nativeFloor(n / 2);\n    if (n) {\n      string += string;\n    }\n  } while (n);\n\n  return result;\n}\n\nexport default baseRepeat;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\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  return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","import arraySample from './_arraySample.js';\nimport values from './values.js';\n\n/**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\nfunction baseSample(collection) {\n  return arraySample(values(collection));\n}\n\nexport default baseSample;\n","import baseClamp from './_baseClamp.js';\nimport shuffleSelf from './_shuffleSelf.js';\nimport values from './values.js';\n\n/**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\nfunction baseSampleSize(collection, n) {\n  var array = values(collection);\n  return shuffleSelf(array, baseClamp(n, 0, array.length));\n}\n\nexport default baseSampleSize;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n  if (!isObject(object)) {\n    return object;\n  }\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      lastIndex = length - 1,\n      nested = object;\n\n  while (nested != null && ++index < length) {\n    var key = toKey(path[index]),\n        newValue = value;\n\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return object;\n    }\n\n    if (index != lastIndex) {\n      var objValue = nested[key];\n      newValue = customizer ? customizer(objValue, key, nested) : undefined;\n      if (newValue === undefined) {\n        newValue = isObject(objValue)\n          ? objValue\n          : (isIndex(path[index + 1]) ? [] : {});\n      }\n    }\n    assignValue(nested, key, newValue);\n    nested = nested[key];\n  }\n  return object;\n}\n\nexport default baseSet;\n","import identity from './identity.js';\nimport metaMap from './_metaMap.js';\n\n/**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\nvar baseSetData = !metaMap ? identity : function(func, data) {\n  metaMap.set(func, data);\n  return func;\n};\n\nexport default baseSetData;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nexport default baseSetToString;\n","import shuffleSelf from './_shuffleSelf.js';\nimport values from './values.js';\n\n/**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\nfunction baseShuffle(collection) {\n  return shuffleSelf(values(collection));\n}\n\nexport default baseShuffle;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\nexport default baseSlice;\n","import baseEach from './_baseEach.js';\n\n/**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection 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 baseSome(collection, predicate) {\n  var result;\n\n  baseEach(collection, function(value, index, collection) {\n    result = predicate(value, index, collection);\n    return !result;\n  });\n  return !!result;\n}\n\nexport default baseSome;\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\nexport default baseSortBy;\n","import baseSortedIndexBy from './_baseSortedIndexBy.js';\nimport identity from './identity.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295,\n    HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n/**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n *  into `array`.\n */\nfunction baseSortedIndex(array, value, retHighest) {\n  var low = 0,\n      high = array == null ? low : array.length;\n\n  if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n    while (low < high) {\n      var mid = (low + high) >>> 1,\n          computed = array[mid];\n\n      if (computed !== null && !isSymbol(computed) &&\n          (retHighest ? (computed <= value) : (computed < value))) {\n        low = mid + 1;\n      } else {\n        high = mid;\n      }\n    }\n    return high;\n  }\n  return baseSortedIndexBy(array, value, identity, retHighest);\n}\n\nexport default baseSortedIndex;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295,\n    MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeFloor = Math.floor,\n    nativeMin = Math.min;\n\n/**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n *  into `array`.\n */\nfunction baseSortedIndexBy(array, value, iteratee, retHighest) {\n  var low = 0,\n      high = array == null ? 0 : array.length;\n  if (high === 0) {\n    return 0;\n  }\n\n  value = iteratee(value);\n  var valIsNaN = value !== value,\n      valIsNull = value === null,\n      valIsSymbol = isSymbol(value),\n      valIsUndefined = value === undefined;\n\n  while (low < high) {\n    var mid = nativeFloor((low + high) / 2),\n        computed = iteratee(array[mid]),\n        othIsDefined = computed !== undefined,\n        othIsNull = computed === null,\n        othIsReflexive = computed === computed,\n        othIsSymbol = isSymbol(computed);\n\n    if (valIsNaN) {\n      var setLow = retHighest || othIsReflexive;\n    } else if (valIsUndefined) {\n      setLow = othIsReflexive && (retHighest || othIsDefined);\n    } else if (valIsNull) {\n      setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n    } else if (valIsSymbol) {\n      setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n    } else if (othIsNull || othIsSymbol) {\n      setLow = false;\n    } else {\n      setLow = retHighest ? (computed <= value) : (computed < value);\n    }\n    if (setLow) {\n      low = mid + 1;\n    } else {\n      high = mid;\n    }\n  }\n  return nativeMin(high, MAX_ARRAY_INDEX);\n}\n\nexport default baseSortedIndexBy;\n","import eq from './eq.js';\n\n/**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * 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 * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseSortedUniq(array, iteratee) {\n  var index = -1,\n      length = array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee ? iteratee(value) : value;\n\n    if (!index || !eq(computed, seen)) {\n      var seen = computed;\n      result[resIndex++] = value === 0 ? 0 : value;\n    }\n  }\n  return result;\n}\n\nexport default baseSortedUniq;\n","/**\n * The base implementation of `_.sum` and `_.sumBy` 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 {number} Returns the sum.\n */\nfunction baseSum(array, iteratee) {\n  var result,\n      index = -1,\n      length = array.length;\n\n  while (++index < length) {\n    var current = iteratee(array[index]);\n    if (current !== undefined) {\n      result = result === undefined ? current : (result + current);\n    }\n  }\n  return result;\n}\n\nexport default baseSum;\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\nexport default baseTimes;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\nfunction baseToNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  return +value;\n}\n\nexport default baseToNumber;\n","import arrayMap from './_arrayMap.js';\n\n/**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\nfunction baseToPairs(object, props) {\n  return arrayMap(props, function(key) {\n    return [key, object[key]];\n  });\n}\n\nexport default baseToPairs;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\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 (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\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\nexport default baseToString;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nexport default baseTrim;\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\nexport default baseUnary;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport cacheHas from './_cacheHas.js';\nimport createSet from './_createSet.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\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\nexport default baseUniq;\n","import castPath from './_castPath.js';\nimport last from './last.js';\nimport parent from './_parent.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n  path = castPath(path, object);\n  object = parent(object, path);\n  return object == null || delete object[toKey(last(path))];\n}\n\nexport default baseUnset;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\n\n/**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseUpdate(object, path, updater, customizer) {\n  return baseSet(object, path, updater(baseGet(object, path)), customizer);\n}\n\nexport default baseUpdate;\n","import arrayMap from './_arrayMap.js';\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n  return arrayMap(props, function(key) {\n    return object[key];\n  });\n}\n\nexport default baseValues;\n","import baseSlice from './_baseSlice.js';\n\n/**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseWhile(array, predicate, isDrop, fromRight) {\n  var length = array.length,\n      index = fromRight ? length : -1;\n\n  while ((fromRight ? index-- : ++index < length) &&\n    predicate(array[index], index, array)) {}\n\n  return isDrop\n    ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n    : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n}\n\nexport default baseWhile;\n","import LazyWrapper from './_LazyWrapper.js';\nimport arrayPush from './_arrayPush.js';\nimport arrayReduce from './_arrayReduce.js';\n\n/**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\nfunction baseWrapperValue(value, actions) {\n  var result = value;\n  if (result instanceof LazyWrapper) {\n    result = result.value();\n  }\n  return arrayReduce(actions, function(result, action) {\n    return action.func.apply(action.thisArg, arrayPush([result], action.args));\n  }, result);\n}\n\nexport default baseWrapperValue;\n","import baseDifference from './_baseDifference.js';\nimport baseFlatten from './_baseFlatten.js';\nimport baseUniq from './_baseUniq.js';\n\n/**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays 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 array of values.\n */\nfunction baseXor(arrays, iteratee, comparator) {\n  var length = arrays.length;\n  if (length < 2) {\n    return length ? baseUniq(arrays[0]) : [];\n  }\n  var index = -1,\n      result = Array(length);\n\n  while (++index < length) {\n    var array = arrays[index],\n        othIndex = -1;\n\n    while (++othIndex < length) {\n      if (othIndex != index) {\n        result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n      }\n    }\n  }\n  return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n}\n\nexport default baseXor;\n","/**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\nfunction baseZipObject(props, values, assignFunc) {\n  var index = -1,\n      length = props.length,\n      valsLength = values.length,\n      result = {};\n\n  while (++index < length) {\n    var value = index < valsLength ? values[index] : undefined;\n    assignFunc(result, props[index], value);\n  }\n  return result;\n}\n\nexport default baseZipObject;\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\nexport default cacheHas;\n","import isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\nfunction castArrayLikeObject(value) {\n  return isArrayLikeObject(value) ? value : [];\n}\n\nexport default castArrayLikeObject;\n","import identity from './identity.js';\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n  return typeof value == 'function' ? value : identity;\n}\n\nexport default castFunction;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\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 * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import baseRest from './_baseRest.js';\n\n/**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nvar castRest = baseRest;\n\nexport default castRest;\n","import baseSlice from './_baseSlice.js';\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n  var length = array.length;\n  end = end === undefined ? length : end;\n  return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nexport default castSlice;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\nfunction charsEndIndex(strSymbols, chrSymbols) {\n  var index = strSymbols.length;\n\n  while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n  return index;\n}\n\nexport default charsEndIndex;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\nfunction charsStartIndex(strSymbols, chrSymbols) {\n  var index = -1,\n      length = strSymbols.length;\n\n  while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n  return index;\n}\n\nexport default charsStartIndex;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nexport default cloneArrayBuffer;\n","import root from './_root.js';\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/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nexport default cloneBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import isSymbol from './isSymbol.js';\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\nexport default compareAscending;\n","import compareAscending from './_compareAscending.js';\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\nexport default compareMultiple;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\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\nexport default composeArgs;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\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\nexport default composeArgsRight;\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\nexport default copyArray;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nexport default copyObject;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\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\nexport default countHolders;\n","import arrayAggregator from './_arrayAggregator.js';\nimport baseAggregator from './_baseAggregator.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n  return function(collection, iteratee) {\n    var func = isArray(collection) ? arrayAggregator : baseAggregator,\n        accumulator = initializer ? initializer() : {};\n\n    return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n  };\n}\n\nexport default createAggregator;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nexport default createAssigner;\n","import isArrayLike from './isArrayLike.js';\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\nexport default createBaseEach;\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\nexport default createBaseFor;\n","import createCtor from './_createCtor.js';\nimport root from './_root.js';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1;\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 & WRAP_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\nexport default createBind;\n","import castSlice from './_castSlice.js';\nimport hasUnicode from './_hasUnicode.js';\nimport stringToArray from './_stringToArray.js';\nimport toString from './toString.js';\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n  return function(string) {\n    string = toString(string);\n\n    var strSymbols = hasUnicode(string)\n      ? stringToArray(string)\n      : undefined;\n\n    var chr = strSymbols\n      ? strSymbols[0]\n      : string.charAt(0);\n\n    var trailing = strSymbols\n      ? castSlice(strSymbols, 1).join('')\n      : string.slice(1);\n\n    return chr[methodName]() + trailing;\n  };\n}\n\nexport default createCaseFirst;\n","import arrayReduce from './_arrayReduce.js';\nimport deburr from './deburr.js';\nimport words from './words.js';\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n  return function(string) {\n    return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n  };\n}\n\nexport default createCompounder;\n","import baseCreate from './_baseCreate.js';\nimport isObject from './isObject.js';\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\nexport default createCtor;\n","import apply from './_apply.js';\nimport createCtor from './_createCtor.js';\nimport createHybrid from './_createHybrid.js';\nimport createRecurry from './_createRecurry.js';\nimport getHolder from './_getHolder.js';\nimport replaceHolders from './_replaceHolders.js';\nimport root from './_root.js';\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\nexport default createCurry;\n","import baseIteratee from './_baseIteratee.js';\nimport isArrayLike from './isArrayLike.js';\nimport keys from './keys.js';\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n  return function(collection, predicate, fromIndex) {\n    var iterable = Object(collection);\n    if (!isArrayLike(collection)) {\n      var iteratee = baseIteratee(predicate, 3);\n      collection = keys(collection);\n      predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n    }\n    var index = findIndexFunc(collection, predicate, fromIndex);\n    return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n  };\n}\n\nexport default createFind;\n","import LodashWrapper from './_LodashWrapper.js';\nimport flatRest from './_flatRest.js';\nimport getData from './_getData.js';\nimport getFuncName from './_getFuncName.js';\nimport isArray from './isArray.js';\nimport isLaziable from './_isLaziable.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_CURRY_FLAG = 8,\n    WRAP_PARTIAL_FLAG = 32,\n    WRAP_ARY_FLAG = 128,\n    WRAP_REARG_FLAG = 256;\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 flatRest(function(funcs) {\n    var length = funcs.length,\n        index = length,\n        prereq = LodashWrapper.prototype.thru;\n\n    if (fromRight) {\n      funcs.reverse();\n    }\n    while (index--) {\n      var func = funcs[index];\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n        var wrapper = new LodashWrapper([], true);\n      }\n    }\n    index = wrapper ? index : length;\n    while (++index < length) {\n      func = funcs[index];\n\n      var funcName = getFuncName(func),\n          data = funcName == 'wrapper' ? getData(func) : undefined;\n\n      if (data && isLaziable(data[0]) &&\n            data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n            !data[4].length && data[9] == 1\n          ) {\n        wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n      } else {\n        wrapper = (func.length == 1 && isLaziable(func))\n          ? wrapper[funcName]()\n          : wrapper.thru(func);\n      }\n    }\n    return function() {\n      var args = arguments,\n          value = args[0];\n\n      if (wrapper && args.length == 1 && isArray(value)) {\n        return wrapper.plant(value).value();\n      }\n      var index = 0,\n          result = length ? funcs[index].apply(this, args) : value;\n\n      while (++index < length) {\n        result = funcs[index].call(this, result);\n      }\n      return result;\n    };\n  });\n}\n\nexport default createFlow;\n","import composeArgs from './_composeArgs.js';\nimport composeArgsRight from './_composeArgsRight.js';\nimport countHolders from './_countHolders.js';\nimport createCtor from './_createCtor.js';\nimport createRecurry from './_createRecurry.js';\nimport getHolder from './_getHolder.js';\nimport reorder from './_reorder.js';\nimport replaceHolders from './_replaceHolders.js';\nimport root from './_root.js';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n    WRAP_BIND_KEY_FLAG = 2,\n    WRAP_CURRY_FLAG = 8,\n    WRAP_CURRY_RIGHT_FLAG = 16,\n    WRAP_ARY_FLAG = 128,\n    WRAP_FLIP_FLAG = 512;\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 & WRAP_ARY_FLAG,\n      isBind = bitmask & WRAP_BIND_FLAG,\n      isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n      isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n      isFlip = bitmask & WRAP_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\nexport default createHybrid;\n","import baseInverter from './_baseInverter.js';\n\n/**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\nfunction createInverter(setter, toIteratee) {\n  return function(object, iteratee) {\n    return baseInverter(object, setter, toIteratee(iteratee), {});\n  };\n}\n\nexport default createInverter;\n","import baseToNumber from './_baseToNumber.js';\nimport baseToString from './_baseToString.js';\n\n/**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\nfunction createMathOperation(operator, defaultValue) {\n  return function(value, other) {\n    var result;\n    if (value === undefined && other === undefined) {\n      return defaultValue;\n    }\n    if (value !== undefined) {\n      result = value;\n    }\n    if (other !== undefined) {\n      if (result === undefined) {\n        return other;\n      }\n      if (typeof value == 'string' || typeof other == 'string') {\n        value = baseToString(value);\n        other = baseToString(other);\n      } else {\n        value = baseToNumber(value);\n        other = baseToNumber(other);\n      }\n      result = operator(value, other);\n    }\n    return result;\n  };\n}\n\nexport default createMathOperation;\n","import apply from './_apply.js';\nimport arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseRest from './_baseRest.js';\nimport baseUnary from './_baseUnary.js';\nimport flatRest from './_flatRest.js';\n\n/**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\nfunction createOver(arrayFunc) {\n  return flatRest(function(iteratees) {\n    iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n    return baseRest(function(args) {\n      var thisArg = this;\n      return arrayFunc(iteratees, function(iteratee) {\n        return apply(iteratee, thisArg, args);\n      });\n    });\n  });\n}\n\nexport default createOver;\n","import baseRepeat from './_baseRepeat.js';\nimport baseToString from './_baseToString.js';\nimport castSlice from './_castSlice.js';\nimport hasUnicode from './_hasUnicode.js';\nimport stringSize from './_stringSize.js';\nimport stringToArray from './_stringToArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil;\n\n/**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\nfunction createPadding(length, chars) {\n  chars = chars === undefined ? ' ' : baseToString(chars);\n\n  var charsLength = chars.length;\n  if (charsLength < 2) {\n    return charsLength ? baseRepeat(chars, length) : chars;\n  }\n  var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n  return hasUnicode(chars)\n    ? castSlice(stringToArray(result), 0, length).join('')\n    : result.slice(0, length);\n}\n\nexport default createPadding;\n","import apply from './_apply.js';\nimport createCtor from './_createCtor.js';\nimport root from './_root.js';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1;\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 & WRAP_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\nexport default createPartial;\n","import baseRange from './_baseRange.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport toFinite from './toFinite.js';\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n  return function(start, end, step) {\n    if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n      end = step = undefined;\n    }\n    // Ensure the sign of `-0` is preserved.\n    start = toFinite(start);\n    if (end === undefined) {\n      end = start;\n      start = 0;\n    } else {\n      end = toFinite(end);\n    }\n    step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n    return baseRange(start, end, step, fromRight);\n  };\n}\n\nexport default createRange;\n","import isLaziable from './_isLaziable.js';\nimport setData from './_setData.js';\nimport setWrapToString from './_setWrapToString.js';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n    WRAP_BIND_KEY_FLAG = 2,\n    WRAP_CURRY_BOUND_FLAG = 4,\n    WRAP_CURRY_FLAG = 8,\n    WRAP_PARTIAL_FLAG = 32,\n    WRAP_PARTIAL_RIGHT_FLAG = 64;\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 & WRAP_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 ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n  bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n  if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n    bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n  }\n  var newData = [\n    func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n    newHoldersRight, argPos, ary, arity\n  ];\n\n  var result = wrapFunc.apply(undefined, newData);\n  if (isLaziable(func)) {\n    setData(result, newData);\n  }\n  result.placeholder = placeholder;\n  return setWrapToString(result, func, bitmask);\n}\n\nexport default createRecurry;\n","import toNumber from './toNumber.js';\n\n/**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\nfunction createRelationalOperation(operator) {\n  return function(value, other) {\n    if (!(typeof value == 'string' && typeof other == 'string')) {\n      value = toNumber(value);\n      other = toNumber(other);\n    }\n    return operator(value, other);\n  };\n}\n\nexport default createRelationalOperation;\n","import root from './_root.js';\nimport toInteger from './toInteger.js';\nimport toNumber from './toNumber.js';\nimport toString from './toString.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsFinite = root.isFinite,\n    nativeMin = Math.min;\n\n/**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\nfunction createRound(methodName) {\n  var func = Math[methodName];\n  return function(number, precision) {\n    number = toNumber(number);\n    precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n    if (precision && nativeIsFinite(number)) {\n      // Shift with exponential notation to avoid floating-point issues.\n      // See [MDN](https://mdn.io/round#Examples) for more details.\n      var pair = (toString(number) + 'e').split('e'),\n          value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n      pair = (toString(value) + 'e').split('e');\n      return +(pair[0] + 'e' + (+pair[1] - precision));\n    }\n    return func(number);\n  };\n}\n\nexport default createRound;\n","import Set from './_Set.js';\nimport noop from './noop.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\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\nexport default createSet;\n","import baseToPairs from './_baseToPairs.js';\nimport getTag from './_getTag.js';\nimport mapToArray from './_mapToArray.js';\nimport setToPairs from './_setToPairs.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\nfunction createToPairs(keysFunc) {\n  return function(object) {\n    var tag = getTag(object);\n    if (tag == mapTag) {\n      return mapToArray(object);\n    }\n    if (tag == setTag) {\n      return setToPairs(object);\n    }\n    return baseToPairs(object, keysFunc(object));\n  };\n}\n\nexport default createToPairs;\n","import baseSetData from './_baseSetData.js';\nimport createBind from './_createBind.js';\nimport createCurry from './_createCurry.js';\nimport createHybrid from './_createHybrid.js';\nimport createPartial from './_createPartial.js';\nimport getData from './_getData.js';\nimport mergeData from './_mergeData.js';\nimport setData from './_setData.js';\nimport setWrapToString from './_setWrapToString.js';\nimport toInteger from './toInteger.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n    WRAP_BIND_KEY_FLAG = 2,\n    WRAP_CURRY_FLAG = 8,\n    WRAP_CURRY_RIGHT_FLAG = 16,\n    WRAP_PARTIAL_FLAG = 32,\n    WRAP_PARTIAL_RIGHT_FLAG = 64;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\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 *    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 & WRAP_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 &= ~(WRAP_PARTIAL_FLAG | WRAP_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 & WRAP_PARTIAL_RIGHT_FLAG) {\n    var partialsRight = partials,\n        holdersRight = holders;\n\n    partials = holders = undefined;\n  }\n  var data = isBindKey ? undefined : getData(func);\n\n  var newData = [\n    func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n    argPos, ary, arity\n  ];\n\n  if (data) {\n    mergeData(newData, data);\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] === undefined\n    ? (isBindKey ? 0 : func.length)\n    : nativeMax(newData[9] - length, 0);\n\n  if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n    bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n  }\n  if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n    var result = createBind(func, bitmask, thisArg);\n  } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n    result = createCurry(func, bitmask, arity);\n  } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n    result = createPartial(func, bitmask, thisArg, partials);\n  } else {\n    result = createHybrid.apply(undefined, newData);\n  }\n  var setter = data ? baseSetData : setData;\n  return setWrapToString(setter(result, newData), func, bitmask);\n}\n\nexport default createWrap;\n","import eq from './eq.js';\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 by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\nfunction customDefaultsAssignIn(objValue, srcValue, key, object) {\n  if (objValue === undefined ||\n      (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n    return srcValue;\n  }\n  return objValue;\n}\n\nexport default customDefaultsAssignIn;\n","import baseMerge from './_baseMerge.js';\nimport isObject from './isObject.js';\n\n/**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n * @returns {*} Returns the value to assign.\n */\nfunction customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n  if (isObject(objValue) && isObject(srcValue)) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, objValue);\n    baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n    stack['delete'](srcValue);\n  }\n  return objValue;\n}\n\nexport default customDefaultsMerge;\n","import isPlainObject from './isPlainObject.js';\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n  return isPlainObject(value) ? undefined : value;\n}\n\nexport default customOmitClone;\n","import basePropertyOf from './_basePropertyOf.js';\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n  // Latin-1 Supplement block.\n  '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n  '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n  '\\xc7': 'C',  '\\xe7': 'c',\n  '\\xd0': 'D',  '\\xf0': 'd',\n  '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n  '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n  '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n  '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n  '\\xd1': 'N',  '\\xf1': 'n',\n  '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n  '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n  '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n  '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n  '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n  '\\xc6': 'Ae', '\\xe6': 'ae',\n  '\\xde': 'Th', '\\xfe': 'th',\n  '\\xdf': 'ss',\n  // Latin Extended-A block.\n  '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n  '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n  '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n  '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n  '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n  '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n  '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n  '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n  '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n  '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n  '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n  '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n  '\\u0134': 'J',  '\\u0135': 'j',\n  '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n  '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n  '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n  '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n  '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n  '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n  '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n  '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n  '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n  '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n  '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n  '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n  '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n  '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n  '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n  '\\u0174': 'W',  '\\u0175': 'w',\n  '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n  '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n  '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n  '\\u0132': 'IJ', '\\u0133': 'ij',\n  '\\u0152': 'Oe', '\\u0153': 'oe',\n  '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nexport default deburrLetter;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nexport default defineProperty;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\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 {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\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, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_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 (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nexport default equalArrays;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\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 {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\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, bitmask, customizer, equalFunc, 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 & COMPARE_PARTIAL_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 |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, 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\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\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 * 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 {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\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, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(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  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\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, bitmask, customizer, 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\nexport default equalObjects;\n","import basePropertyOf from './_basePropertyOf.js';\n\n/** Used to map characters to HTML entities. */\nvar htmlEscapes = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;'\n};\n\n/**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\nvar escapeHtmlChar = basePropertyOf(htmlEscapes);\n\nexport default escapeHtmlChar;\n","/** Used to escape characters for inclusion in compiled string literals. */\nvar stringEscapes = {\n  '\\\\': '\\\\',\n  \"'\": \"'\",\n  '\\n': 'n',\n  '\\r': 'r',\n  '\\u2028': 'u2028',\n  '\\u2029': 'u2029'\n};\n\n/**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\nfunction escapeStringChar(chr) {\n  return '\\\\' + stringEscapes[chr];\n}\n\nexport default escapeStringChar;\n","import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","import metaMap from './_metaMap.js';\nimport noop from './noop.js';\n\n/**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\nvar getData = !metaMap ? noop : function(func) {\n  return metaMap.get(func);\n};\n\nexport default getData;\n","import realNames from './_realNames.js';\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 * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\nfunction getFuncName(func) {\n  var result = (func.name + ''),\n      array = realNames[result],\n      length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n  while (length--) {\n    var data = array[length],\n        otherFunc = data.func;\n    if (otherFunc == null || otherFunc == func) {\n      return data.name;\n    }\n  }\n  return result;\n}\n\nexport default getFuncName;\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\nexport default getHolder;\n","import isKeyable from './_isKeyable.js';\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\nexport default getMapData;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\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\nexport default getMatchData;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\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\nexport default getNative;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import Symbol from './_Symbol.js';\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 nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nexport default getRawTag;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nexport default getSymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nexport default getSymbolsIn;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\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/**\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 and promises in Node.js < 6.\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 = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\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\nexport default getTag;\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\nexport default getValue;\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 view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n *  positions of the view.\n */\nfunction getView(start, end, transforms) {\n  var index = -1,\n      length = transforms.length;\n\n  while (++index < length) {\n    var data = transforms[index],\n        size = data.size;\n\n    switch (data.type) {\n      case 'drop':      start += size; break;\n      case 'dropRight': end -= size; break;\n      case 'take':      end = nativeMin(end, start + size); break;\n      case 'takeRight': start = nativeMax(start, end - size); break;\n    }\n  }\n  return { 'start': start, 'end': end };\n}\n\nexport default getView;\n","/** Used to match wrap detail comments. */\nvar reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n    reSplitDetails = /,? & /;\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\nexport default getWrapDetails;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\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 = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\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 || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n  return reHasUnicodeWord.test(string);\n}\n\nexport default hasUnicodeWord;\n","import nativeCreate from './_nativeCreate.js';\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  this.size = 0;\n}\n\nexport default hashClear;\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  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\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 * 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\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\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 * 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\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\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  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nexport default hashSet;\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 * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nexport default initCloneArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\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/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nexport default initCloneByTag;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nexport default initCloneObject;\n","/** Used to match wrap detail comments. */\nvar reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\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  if (!length) {\n    return source;\n  }\n  var lastIndex = length - 1;\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\nexport default insertWrapDetails;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\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\nexport default isFlattenable;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\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  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nexport default isIterateeCall;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\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\nexport default isKey;\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\nexport default isKeyable;\n","import LazyWrapper from './_LazyWrapper.js';\nimport getData from './_getData.js';\nimport getFuncName from './_getFuncName.js';\nimport lodash from './wrapperLodash.js';\n\n/**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n *  else `false`.\n */\nfunction isLaziable(func) {\n  var funcName = getFuncName(func),\n      other = lodash[funcName];\n\n  if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n    return false;\n  }\n  if (func === other) {\n    return true;\n  }\n  var data = getData(other);\n  return !!data && func === data[0];\n}\n\nexport default isLaziable;\n","import coreJsData from './_coreJsData.js';\nimport isFunction from './isFunction.js';\nimport stubFalse from './stubFalse.js';\n\n/**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\nvar isMaskable = coreJsData ? isFunction : stubFalse;\n\nexport default isMaskable;\n","import coreJsData from './_coreJsData.js';\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/**\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\nexport default isMasked;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\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\nexport default isPrototype;\n","import isObject from './isObject.js';\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\nexport default isStrictComparable;\n","/**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction iteratorToArray(iterator) {\n  var data,\n      result = [];\n\n  while (!(data = iterator.next()).done) {\n    result.push(data.value);\n  }\n  return result;\n}\n\nexport default iteratorToArray;\n","import LazyWrapper from './_LazyWrapper.js';\nimport copyArray from './_copyArray.js';\n\n/**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\nfunction lazyClone() {\n  var result = new LazyWrapper(this.__wrapped__);\n  result.__actions__ = copyArray(this.__actions__);\n  result.__dir__ = this.__dir__;\n  result.__filtered__ = this.__filtered__;\n  result.__iteratees__ = copyArray(this.__iteratees__);\n  result.__takeCount__ = this.__takeCount__;\n  result.__views__ = copyArray(this.__views__);\n  return result;\n}\n\nexport default lazyClone;\n","import LazyWrapper from './_LazyWrapper.js';\n\n/**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\nfunction lazyReverse() {\n  if (this.__filtered__) {\n    var result = new LazyWrapper(this);\n    result.__dir__ = -1;\n    result.__filtered__ = true;\n  } else {\n    result = this.clone();\n    result.__dir__ *= -1;\n  }\n  return result;\n}\n\nexport default lazyReverse;\n","import baseWrapperValue from './_baseWrapperValue.js';\nimport getView from './_getView.js';\nimport isArray from './isArray.js';\n\n/** Used to indicate the type of lazy iteratees. */\nvar LAZY_FILTER_FLAG = 1,\n    LAZY_MAP_FLAG = 2;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\nfunction lazyValue() {\n  var array = this.__wrapped__.value(),\n      dir = this.__dir__,\n      isArr = isArray(array),\n      isRight = dir < 0,\n      arrLength = isArr ? array.length : 0,\n      view = getView(0, arrLength, this.__views__),\n      start = view.start,\n      end = view.end,\n      length = end - start,\n      index = isRight ? end : (start - 1),\n      iteratees = this.__iteratees__,\n      iterLength = iteratees.length,\n      resIndex = 0,\n      takeCount = nativeMin(length, this.__takeCount__);\n\n  if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n    return baseWrapperValue(array, this.__actions__);\n  }\n  var result = [];\n\n  outer:\n  while (length-- && resIndex < takeCount) {\n    index += dir;\n\n    var iterIndex = -1,\n        value = array[index];\n\n    while (++iterIndex < iterLength) {\n      var data = iteratees[iterIndex],\n          iteratee = data.iteratee,\n          type = data.type,\n          computed = iteratee(value);\n\n      if (type == LAZY_MAP_FLAG) {\n        value = computed;\n      } else if (!computed) {\n        if (type == LAZY_FILTER_FLAG) {\n          continue outer;\n        } else {\n          break outer;\n        }\n      }\n    }\n    result[resIndex++] = value;\n  }\n  return result;\n}\n\nexport default lazyValue;\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  this.size = 0;\n}\n\nexport default listCacheClear;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\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  --this.size;\n  return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\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\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\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\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\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    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nexport default listCacheSet;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\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.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nexport default mapCacheClear;\n","import getMapData from './_getMapData.js';\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  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\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\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\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\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\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  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nexport default mapCacheSet;\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\nexport default mapToArray;\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\nexport default matchesStrictComparable;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nexport default memoizeCapped;\n","import composeArgs from './_composeArgs.js';\nimport composeArgsRight from './_composeArgsRight.js';\nimport replaceHolders from './_replaceHolders.js';\n\n/** Used as the internal argument placeholder. */\nvar PLACEHOLDER = '__lodash_placeholder__';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n    WRAP_BIND_KEY_FLAG = 2,\n    WRAP_CURRY_BOUND_FLAG = 4,\n    WRAP_CURRY_FLAG = 8,\n    WRAP_ARY_FLAG = 128,\n    WRAP_REARG_FLAG = 256;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\nfunction mergeData(data, source) {\n  var bitmask = data[1],\n      srcBitmask = source[1],\n      newBitmask = bitmask | srcBitmask,\n      isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n  var isCombo =\n    ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n    ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n    ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n  // Exit early if metadata can't be merged.\n  if (!(isCommon || isCombo)) {\n    return data;\n  }\n  // Use source `thisArg` if available.\n  if (srcBitmask & WRAP_BIND_FLAG) {\n    data[2] = source[2];\n    // Set when currying a bound function.\n    newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n  }\n  // Compose partial arguments.\n  var value = source[3];\n  if (value) {\n    var partials = data[3];\n    data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n    data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n  }\n  // Compose partial right arguments.\n  value = source[5];\n  if (value) {\n    partials = data[5];\n    data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n    data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n  }\n  // Use source `argPos` if available.\n  value = source[7];\n  if (value) {\n    data[7] = value;\n  }\n  // Use source `ary` if it's smaller.\n  if (srcBitmask & WRAP_ARY_FLAG) {\n    data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n  }\n  // Use source `arity` if one is not provided.\n  if (data[9] == null) {\n    data[9] = source[9];\n  }\n  // Use source `func` and merge bitmasks.\n  data[0] = source[0];\n  data[1] = newBitmask;\n\n  return data;\n}\n\nexport default mergeData;\n","import WeakMap from './_WeakMap.js';\n\n/** Used to store function metadata. */\nvar metaMap = WeakMap && new WeakMap;\n\nexport default metaMap;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default nativeKeysIn;\n","import freeGlobal from './_freeGlobal.js';\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    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nexport default nodeUtil;\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 nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\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\nexport default overArg;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\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 * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\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] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nexport default overRest;\n","import baseGet from './_baseGet.js';\nimport baseSlice from './_baseSlice.js';\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n  return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nexport default parent;\n","/** Used to match template delimiters. */\nvar reEscape = /<%-([\\s\\S]+?)%>/g;\n\nexport default reEscape;\n","/** Used to match template delimiters. */\nvar reEvaluate = /<%([\\s\\S]+?)%>/g;\n\nexport default reEvaluate;\n","/** Used to match template delimiters. */\nvar reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\nexport default reInterpolate;\n","/** Used to lookup unminified function names. */\nvar realNames = {};\n\nexport default realNames;\n","import copyArray from './_copyArray.js';\nimport isIndex from './_isIndex.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\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\nexport default reorder;\n","/** Used as the internal argument placeholder. */\nvar PLACEHOLDER = '__lodash_placeholder__';\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\nexport default replaceHolders;\n","import freeGlobal from './_freeGlobal.js';\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\nexport default root;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\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 safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\nexport default safeGet;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\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\nexport default setCacheAdd;\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\nexport default setCacheHas;\n","import baseSetData from './_baseSetData.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\nvar setData = shortOut(baseSetData);\n\nexport default setData;\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\nexport default setToArray;\n","/**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\nfunction setToPairs(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = [value, value];\n  });\n  return result;\n}\n\nexport default setToPairs;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","import getWrapDetails from './_getWrapDetails.js';\nimport insertWrapDetails from './_insertWrapDetails.js';\nimport setToString from './_setToString.js';\nimport updateWrapDetails from './_updateWrapDetails.js';\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 */\nfunction setWrapToString(wrapper, reference, bitmask) {\n  var source = (reference + '');\n  return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n}\n\nexport default setWrapToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nexport default shortOut;\n","import baseRandom from './_baseRandom.js';\n\n/**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\nfunction shuffleSelf(array, size) {\n  var index = -1,\n      length = array.length,\n      lastIndex = length - 1;\n\n  size = size === undefined ? length : size;\n  while (++index < size) {\n    var rand = baseRandom(index, lastIndex),\n        value = array[rand];\n\n    array[rand] = array[index];\n    array[index] = value;\n  }\n  array.length = size;\n  return array;\n}\n\nexport default shuffleSelf;\n","import ListCache from './_ListCache.js';\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  this.size = 0;\n}\n\nexport default stackClear;\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  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nexport default stackDelete;\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\nexport default stackGet;\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\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\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 data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nexport default stackSet;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\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 strictIndexOf(array, value, fromIndex) {\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\nexport default strictIndexOf;\n","/**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\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 strictLastIndexOf(array, value, fromIndex) {\n  var index = fromIndex + 1;\n  while (index--) {\n    if (array[index] === value) {\n      return index;\n    }\n  }\n  return index;\n}\n\nexport default strictLastIndexOf;\n","import asciiSize from './_asciiSize.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeSize from './_unicodeSize.js';\n\n/**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\nfunction stringSize(string) {\n  return hasUnicode(string)\n    ? unicodeSize(string)\n    : asciiSize(string);\n}\n\nexport default stringSize;\n","import asciiToArray from './_asciiToArray.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeToArray from './_unicodeToArray.js';\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n  return hasUnicode(string)\n    ? unicodeToArray(string)\n    : asciiToArray(string);\n}\n\nexport default stringToArray;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\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 = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nexport default stringToPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\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\nexport default toKey;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\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\nexport default toSource;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nexport default trimmedEndIndex;\n","import basePropertyOf from './_basePropertyOf.js';\n\n/** Used to map HTML entities to characters. */\nvar htmlUnescapes = {\n  '&amp;': '&',\n  '&lt;': '<',\n  '&gt;': '>',\n  '&quot;': '\"',\n  '&#39;': \"'\"\n};\n\n/**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\nvar unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\nexport default unescapeHtmlChar;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nfunction unicodeSize(string) {\n  var result = reUnicode.lastIndex = 0;\n  while (reUnicode.test(string)) {\n    ++result;\n  }\n  return result;\n}\n\nexport default unicodeSize;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n  return string.match(reUnicode) || [];\n}\n\nexport default unicodeToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsDingbatRange = '\\\\u2700-\\\\u27bf',\n    rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n    rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n    rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n    rsPunctuationRange = '\\\\u2000-\\\\u206f',\n    rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n    rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n    rsVarRange = '\\\\ufe0e\\\\ufe0f',\n    rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n    rsBreak = '[' + rsBreakRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsDigits = '\\\\d+',\n    rsDingbat = '[' + rsDingbatRange + ']',\n    rsLower = '[' + rsLowerRange + ']',\n    rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsUpper = '[' + rsUpperRange + ']',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n    rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n    rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n    rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n    reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n    rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n  rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n  rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n  rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n  rsUpper + '+' + rsOptContrUpper,\n  rsOrdUpper,\n  rsOrdLower,\n  rsDigits,\n  rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n  return string.match(reUnicodeWord) || [];\n}\n\nexport default unicodeWords;\n","import arrayEach from './_arrayEach.js';\nimport arrayIncludes from './_arrayIncludes.js';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n    WRAP_BIND_KEY_FLAG = 2,\n    WRAP_CURRY_FLAG = 8,\n    WRAP_CURRY_RIGHT_FLAG = 16,\n    WRAP_PARTIAL_FLAG = 32,\n    WRAP_PARTIAL_RIGHT_FLAG = 64,\n    WRAP_ARY_FLAG = 128,\n    WRAP_REARG_FLAG = 256,\n    WRAP_FLIP_FLAG = 512;\n\n/** Used to associate wrap methods with their bit flags. */\nvar wrapFlags = [\n  ['ary', WRAP_ARY_FLAG],\n  ['bind', WRAP_BIND_FLAG],\n  ['bindKey', WRAP_BIND_KEY_FLAG],\n  ['curry', WRAP_CURRY_FLAG],\n  ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n  ['flip', WRAP_FLIP_FLAG],\n  ['partial', WRAP_PARTIAL_FLAG],\n  ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n  ['rearg', WRAP_REARG_FLAG]\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\nexport default updateWrapDetails;\n","import LazyWrapper from './_LazyWrapper.js';\nimport LodashWrapper from './_LodashWrapper.js';\nimport copyArray from './_copyArray.js';\n\n/**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\nfunction wrapperClone(wrapper) {\n  if (wrapper instanceof LazyWrapper) {\n    return wrapper.clone();\n  }\n  var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n  result.__actions__ = copyArray(wrapper.__actions__);\n  result.__index__  = wrapper.__index__;\n  result.__values__ = wrapper.__values__;\n  return result;\n}\n\nexport default wrapperClone;\n","import createMathOperation from './_createMathOperation.js';\n\n/**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\nvar add = createMathOperation(function(augend, addend) {\n  return augend + addend;\n}, 0);\n\nexport default add;\n","import toInteger from './toInteger.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n *   console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n *   asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\nfunction after(n, func) {\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  n = toInteger(n);\n  return function() {\n    if (--n < 1) {\n      return func.apply(this, arguments);\n    }\n  };\n}\n\nexport default after;\n","import chunk from './chunk.js';\nimport compact from './compact.js';\nimport concat from './concat.js';\nimport difference from './difference.js';\nimport differenceBy from './differenceBy.js';\nimport differenceWith from './differenceWith.js';\nimport drop from './drop.js';\nimport dropRight from './dropRight.js';\nimport dropRightWhile from './dropRightWhile.js';\nimport dropWhile from './dropWhile.js';\nimport fill from './fill.js';\nimport findIndex from './findIndex.js';\nimport findLastIndex from './findLastIndex.js';\nimport first from './first.js';\nimport flatten from './flatten.js';\nimport flattenDeep from './flattenDeep.js';\nimport flattenDepth from './flattenDepth.js';\nimport fromPairs from './fromPairs.js';\nimport head from './head.js';\nimport indexOf from './indexOf.js';\nimport initial from './initial.js';\nimport intersection from './intersection.js';\nimport intersectionBy from './intersectionBy.js';\nimport intersectionWith from './intersectionWith.js';\nimport join from './join.js';\nimport last from './last.js';\nimport lastIndexOf from './lastIndexOf.js';\nimport nth from './nth.js';\nimport pull from './pull.js';\nimport pullAll from './pullAll.js';\nimport pullAllBy from './pullAllBy.js';\nimport pullAllWith from './pullAllWith.js';\nimport pullAt from './pullAt.js';\nimport remove from './remove.js';\nimport reverse from './reverse.js';\nimport slice from './slice.js';\nimport sortedIndex from './sortedIndex.js';\nimport sortedIndexBy from './sortedIndexBy.js';\nimport sortedIndexOf from './sortedIndexOf.js';\nimport sortedLastIndex from './sortedLastIndex.js';\nimport sortedLastIndexBy from './sortedLastIndexBy.js';\nimport sortedLastIndexOf from './sortedLastIndexOf.js';\nimport sortedUniq from './sortedUniq.js';\nimport sortedUniqBy from './sortedUniqBy.js';\nimport tail from './tail.js';\nimport take from './take.js';\nimport takeRight from './takeRight.js';\nimport takeRightWhile from './takeRightWhile.js';\nimport takeWhile from './takeWhile.js';\nimport union from './union.js';\nimport unionBy from './unionBy.js';\nimport unionWith from './unionWith.js';\nimport uniq from './uniq.js';\nimport uniqBy from './uniqBy.js';\nimport uniqWith from './uniqWith.js';\nimport unzip from './unzip.js';\nimport unzipWith from './unzipWith.js';\nimport without from './without.js';\nimport xor from './xor.js';\nimport xorBy from './xorBy.js';\nimport xorWith from './xorWith.js';\nimport zip from './zip.js';\nimport zipObject from './zipObject.js';\nimport zipObjectDeep from './zipObjectDeep.js';\nimport zipWith from './zipWith.js';\n\nexport default {\n  chunk, compact, concat, difference, differenceBy,\n  differenceWith, drop, dropRight, dropRightWhile, dropWhile,\n  fill, findIndex, findLastIndex, first, flatten,\n  flattenDeep, flattenDepth, fromPairs, head, indexOf,\n  initial, intersection, intersectionBy, intersectionWith, join,\n  last, lastIndexOf, nth, pull, pullAll,\n  pullAllBy, pullAllWith, pullAt, remove, reverse,\n  slice, sortedIndex, sortedIndexBy, sortedIndexOf, sortedLastIndex,\n  sortedLastIndexBy, sortedLastIndexOf, sortedUniq, sortedUniqBy, tail,\n  take, takeRight, takeRightWhile, takeWhile, union,\n  unionBy, unionWith, uniq, uniqBy, uniqWith,\n  unzip, unzipWith, without, xor, xorBy,\n  xorWith, zip, zipObject, zipObjectDeep, zipWith\n};\n","export { default as chunk } from './chunk.js';\nexport { default as compact } from './compact.js';\nexport { default as concat } from './concat.js';\nexport { default as difference } from './difference.js';\nexport { default as differenceBy } from './differenceBy.js';\nexport { default as differenceWith } from './differenceWith.js';\nexport { default as drop } from './drop.js';\nexport { default as dropRight } from './dropRight.js';\nexport { default as dropRightWhile } from './dropRightWhile.js';\nexport { default as dropWhile } from './dropWhile.js';\nexport { default as fill } from './fill.js';\nexport { default as findIndex } from './findIndex.js';\nexport { default as findLastIndex } from './findLastIndex.js';\nexport { default as first } from './first.js';\nexport { default as flatten } from './flatten.js';\nexport { default as flattenDeep } from './flattenDeep.js';\nexport { default as flattenDepth } from './flattenDepth.js';\nexport { default as fromPairs } from './fromPairs.js';\nexport { default as head } from './head.js';\nexport { default as indexOf } from './indexOf.js';\nexport { default as initial } from './initial.js';\nexport { default as intersection } from './intersection.js';\nexport { default as intersectionBy } from './intersectionBy.js';\nexport { default as intersectionWith } from './intersectionWith.js';\nexport { default as join } from './join.js';\nexport { default as last } from './last.js';\nexport { default as lastIndexOf } from './lastIndexOf.js';\nexport { default as nth } from './nth.js';\nexport { default as pull } from './pull.js';\nexport { default as pullAll } from './pullAll.js';\nexport { default as pullAllBy } from './pullAllBy.js';\nexport { default as pullAllWith } from './pullAllWith.js';\nexport { default as pullAt } from './pullAt.js';\nexport { default as remove } from './remove.js';\nexport { default as reverse } from './reverse.js';\nexport { default as slice } from './slice.js';\nexport { default as sortedIndex } from './sortedIndex.js';\nexport { default as sortedIndexBy } from './sortedIndexBy.js';\nexport { default as sortedIndexOf } from './sortedIndexOf.js';\nexport { default as sortedLastIndex } from './sortedLastIndex.js';\nexport { default as sortedLastIndexBy } from './sortedLastIndexBy.js';\nexport { default as sortedLastIndexOf } from './sortedLastIndexOf.js';\nexport { default as sortedUniq } from './sortedUniq.js';\nexport { default as sortedUniqBy } from './sortedUniqBy.js';\nexport { default as tail } from './tail.js';\nexport { default as take } from './take.js';\nexport { default as takeRight } from './takeRight.js';\nexport { default as takeRightWhile } from './takeRightWhile.js';\nexport { default as takeWhile } from './takeWhile.js';\nexport { default as union } from './union.js';\nexport { default as unionBy } from './unionBy.js';\nexport { default as unionWith } from './unionWith.js';\nexport { default as uniq } from './uniq.js';\nexport { default as uniqBy } from './uniqBy.js';\nexport { default as uniqWith } from './uniqWith.js';\nexport { default as unzip } from './unzip.js';\nexport { default as unzipWith } from './unzipWith.js';\nexport { default as without } from './without.js';\nexport { default as xor } from './xor.js';\nexport { default as xorBy } from './xorBy.js';\nexport { default as xorWith } from './xorWith.js';\nexport { default as zip } from './zip.js';\nexport { default as zipObject } from './zipObject.js';\nexport { default as zipObjectDeep } from './zipObjectDeep.js';\nexport { default as zipWith } from './zipWith.js';\nexport { default } from './array.default.js';\n","import createWrap from './_createWrap.js';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_ARY_FLAG = 128;\n\n/**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\nfunction ary(func, n, guard) {\n  n = guard ? undefined : n;\n  n = (func && n == null) ? func.length : n;\n  return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n}\n\nexport default ary;\n","import assignValue from './_assignValue.js';\nimport copyObject from './_copyObject.js';\nimport createAssigner from './_createAssigner.js';\nimport isArrayLike from './isArrayLike.js';\nimport isPrototype from './_isPrototype.js';\nimport keys from './keys.js';\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 * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * function Bar() {\n *   this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n  if (isPrototype(source) || isArrayLike(source)) {\n    copyObject(source, keys(source), object);\n    return;\n  }\n  for (var key in source) {\n    if (hasOwnProperty.call(source, key)) {\n      assignValue(object, key, source[key]);\n    }\n  }\n});\n\nexport default assign;\n","import copyObject from './_copyObject.js';\nimport createAssigner from './_createAssigner.js';\nimport keysIn from './keysIn.js';\n\n/**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * function Bar() {\n *   this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\nvar assignIn = createAssigner(function(object, source) {\n  copyObject(source, keysIn(source), object);\n});\n\nexport default assignIn;\n","import copyObject from './_copyObject.js';\nimport createAssigner from './_createAssigner.js';\nimport keysIn from './keysIn.js';\n\n/**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n *   return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n  copyObject(source, keysIn(source), object, customizer);\n});\n\nexport default assignInWith;\n","import copyObject from './_copyObject.js';\nimport createAssigner from './_createAssigner.js';\nimport keys from './keys.js';\n\n/**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n *   return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n  copyObject(source, keys(source), object, customizer);\n});\n\nexport default assignWith;\n","import baseAt from './_baseAt.js';\nimport flatRest from './_flatRest.js';\n\n/**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\nvar at = flatRest(baseAt);\n\nexport default at;\n","import apply from './_apply.js';\nimport baseRest from './_baseRest.js';\nimport isError from './isError.js';\n\n/**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n *   return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n *   elements = [];\n * }\n */\nvar attempt = baseRest(function(func, args) {\n  try {\n    return apply(func, undefined, args);\n  } catch (e) {\n    return isError(e) ? e : new Error(e);\n  }\n});\n\nexport default attempt;\n","import toInteger from './toInteger.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\nfunction before(n, func) {\n  var result;\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  n = toInteger(n);\n  return function() {\n    if (--n > 0) {\n      result = func.apply(this, arguments);\n    }\n    if (n <= 1) {\n      func = undefined;\n    }\n    return result;\n  };\n}\n\nexport default before;\n","import baseRest from './_baseRest.js';\nimport createWrap from './_createWrap.js';\nimport getHolder from './_getHolder.js';\nimport replaceHolders from './_replaceHolders.js';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n    WRAP_PARTIAL_FLAG = 32;\n\n/**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n *   return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\nvar bind = baseRest(function(func, thisArg, partials) {\n  var bitmask = WRAP_BIND_FLAG;\n  if (partials.length) {\n    var holders = replaceHolders(partials, getHolder(bind));\n    bitmask |= WRAP_PARTIAL_FLAG;\n  }\n  return createWrap(func, bitmask, thisArg, partials, holders);\n});\n\n// Assign default placeholders.\nbind.placeholder = {};\n\nexport default bind;\n","import arrayEach from './_arrayEach.js';\nimport baseAssignValue from './_baseAssignValue.js';\nimport bind from './bind.js';\nimport flatRest from './_flatRest.js';\nimport toKey from './_toKey.js';\n\n/**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n *   'label': 'docs',\n *   'click': function() {\n *     console.log('clicked ' + this.label);\n *   }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\nvar bindAll = flatRest(function(object, methodNames) {\n  arrayEach(methodNames, function(key) {\n    key = toKey(key);\n    baseAssignValue(object, key, bind(object[key], object));\n  });\n  return object;\n});\n\nexport default bindAll;\n","import baseRest from './_baseRest.js';\nimport createWrap from './_createWrap.js';\nimport getHolder from './_getHolder.js';\nimport replaceHolders from './_replaceHolders.js';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n    WRAP_BIND_KEY_FLAG = 2,\n    WRAP_PARTIAL_FLAG = 32;\n\n/**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n *   'user': 'fred',\n *   'greet': function(greeting, punctuation) {\n *     return greeting + ' ' + this.user + punctuation;\n *   }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n *   return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\nvar bindKey = baseRest(function(object, key, partials) {\n  var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n  if (partials.length) {\n    var holders = replaceHolders(partials, getHolder(bindKey));\n    bitmask |= WRAP_PARTIAL_FLAG;\n  }\n  return createWrap(key, bitmask, object, partials, holders);\n});\n\n// Assign default placeholders.\nbindKey.placeholder = {};\n\nexport default bindKey;\n","import capitalize from './capitalize.js';\nimport createCompounder from './_createCompounder.js';\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n  word = word.toLowerCase();\n  return result + (index ? capitalize(word) : word);\n});\n\nexport default camelCase;\n","import toString from './toString.js';\nimport upperFirst from './upperFirst.js';\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n  return upperFirst(toString(string).toLowerCase());\n}\n\nexport default capitalize;\n","import isArray from './isArray.js';\n\n/**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\nfunction castArray() {\n  if (!arguments.length) {\n    return [];\n  }\n  var value = arguments[0];\n  return isArray(value) ? value : [value];\n}\n\nexport default castArray;\n","import createRound from './_createRound.js';\n\n/**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\nvar ceil = createRound('ceil');\n\nexport default ceil;\n","import lodash from './wrapperLodash.js';\n\n/**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'age': 36 },\n *   { 'user': 'fred',    'age': 40 },\n *   { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n *   .chain(users)\n *   .sortBy('age')\n *   .map(function(o) {\n *     return o.user + ' is ' + o.age;\n *   })\n *   .head()\n *   .value();\n * // => 'pebbles is 1'\n */\nfunction chain(value) {\n  var result = lodash(value);\n  result.__chain__ = true;\n  return result;\n}\n\nexport default chain;\n","import baseSlice from './_baseSlice.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport toInteger from './toInteger.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n    nativeMax = Math.max;\n\n/**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\nfunction chunk(array, size, guard) {\n  if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n    size = 1;\n  } else {\n    size = nativeMax(toInteger(size), 0);\n  }\n  var length = array == null ? 0 : array.length;\n  if (!length || size < 1) {\n    return [];\n  }\n  var index = 0,\n      resIndex = 0,\n      result = Array(nativeCeil(length / size));\n\n  while (index < length) {\n    result[resIndex++] = baseSlice(array, index, (index += size));\n  }\n  return result;\n}\n\nexport default chunk;\n","import baseClamp from './_baseClamp.js';\nimport toNumber from './toNumber.js';\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n  if (upper === undefined) {\n    upper = lower;\n    lower = undefined;\n  }\n  if (upper !== undefined) {\n    upper = toNumber(upper);\n    upper = upper === upper ? upper : 0;\n  }\n  if (lower !== undefined) {\n    lower = toNumber(lower);\n    lower = lower === lower ? lower : 0;\n  }\n  return baseClamp(toNumber(number), lower, upper);\n}\n\nexport default clamp;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n  return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nexport default clone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n *   if (_.isElement(value)) {\n *     return value.cloneNode(true);\n *   }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\nfunction cloneDeepWith(value, customizer) {\n  customizer = typeof customizer == 'function' ? customizer : undefined;\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n}\n\nexport default cloneDeepWith;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n *   if (_.isElement(value)) {\n *     return value.cloneNode(false);\n *   }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\nfunction cloneWith(value, customizer) {\n  customizer = typeof customizer == 'function' ? customizer : undefined;\n  return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n}\n\nexport default cloneWith;\n","import countBy from './countBy.js';\nimport each from './each.js';\nimport eachRight from './eachRight.js';\nimport every from './every.js';\nimport filter from './filter.js';\nimport find from './find.js';\nimport findLast from './findLast.js';\nimport flatMap from './flatMap.js';\nimport flatMapDeep from './flatMapDeep.js';\nimport flatMapDepth from './flatMapDepth.js';\nimport forEach from './forEach.js';\nimport forEachRight from './forEachRight.js';\nimport groupBy from './groupBy.js';\nimport includes from './includes.js';\nimport invokeMap from './invokeMap.js';\nimport keyBy from './keyBy.js';\nimport map from './map.js';\nimport orderBy from './orderBy.js';\nimport partition from './partition.js';\nimport reduce from './reduce.js';\nimport reduceRight from './reduceRight.js';\nimport reject from './reject.js';\nimport sample from './sample.js';\nimport sampleSize from './sampleSize.js';\nimport shuffle from './shuffle.js';\nimport size from './size.js';\nimport some from './some.js';\nimport sortBy from './sortBy.js';\n\nexport default {\n  countBy, each, eachRight, every, filter,\n  find, findLast, flatMap, flatMapDeep, flatMapDepth,\n  forEach, forEachRight, groupBy, includes, invokeMap,\n  keyBy, map, orderBy, partition, reduce,\n  reduceRight, reject, sample, sampleSize, shuffle,\n  size, some, sortBy\n};\n","export { default as countBy } from './countBy.js';\nexport { default as each } from './each.js';\nexport { default as eachRight } from './eachRight.js';\nexport { default as every } from './every.js';\nexport { default as filter } from './filter.js';\nexport { default as find } from './find.js';\nexport { default as findLast } from './findLast.js';\nexport { default as flatMap } from './flatMap.js';\nexport { default as flatMapDeep } from './flatMapDeep.js';\nexport { default as flatMapDepth } from './flatMapDepth.js';\nexport { default as forEach } from './forEach.js';\nexport { default as forEachRight } from './forEachRight.js';\nexport { default as groupBy } from './groupBy.js';\nexport { default as includes } from './includes.js';\nexport { default as invokeMap } from './invokeMap.js';\nexport { default as keyBy } from './keyBy.js';\nexport { default as map } from './map.js';\nexport { default as orderBy } from './orderBy.js';\nexport { default as partition } from './partition.js';\nexport { default as reduce } from './reduce.js';\nexport { default as reduceRight } from './reduceRight.js';\nexport { default as reject } from './reject.js';\nexport { default as sample } from './sample.js';\nexport { default as sampleSize } from './sampleSize.js';\nexport { default as shuffle } from './shuffle.js';\nexport { default as size } from './size.js';\nexport { default as some } from './some.js';\nexport { default as sortBy } from './sortBy.js';\nexport { default } from './collection.default.js';\n","import LodashWrapper from './_LodashWrapper.js';\n\n/**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\nfunction wrapperCommit() {\n  return new LodashWrapper(this.value(), this.__chain__);\n}\n\nexport default wrapperCommit;\n","/**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\nfunction compact(array) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (value) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nexport default compact;\n","import arrayPush from './_arrayPush.js';\nimport baseFlatten from './_baseFlatten.js';\nimport copyArray from './_copyArray.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\nfunction concat() {\n  var length = arguments.length;\n  if (!length) {\n    return [];\n  }\n  var args = Array(length - 1),\n      array = arguments[0],\n      index = length;\n\n  while (index--) {\n    args[index - 1] = arguments[index];\n  }\n  return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n}\n\nexport default concat;\n","import apply from './_apply.js';\nimport arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseRest from './_baseRest.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n *   [_.stubTrue,                      _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\nfunction cond(pairs) {\n  var length = pairs == null ? 0 : pairs.length,\n      toIteratee = baseIteratee;\n\n  pairs = !length ? [] : arrayMap(pairs, function(pair) {\n    if (typeof pair[1] != 'function') {\n      throw new TypeError(FUNC_ERROR_TEXT);\n    }\n    return [toIteratee(pair[0]), pair[1]];\n  });\n\n  return baseRest(function(args) {\n    var index = -1;\n    while (++index < length) {\n      var pair = pairs[index];\n      if (apply(pair[0], this, args)) {\n        return apply(pair[1], this, args);\n      }\n    }\n  });\n}\n\nexport default cond;\n","import baseClone from './_baseClone.js';\nimport baseConforms from './_baseConforms.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1;\n\n/**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n *   { 'a': 2, 'b': 1 },\n *   { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\nfunction conforms(source) {\n  return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n}\n\nexport default conforms;\n","import baseConformsTo from './_baseConformsTo.js';\nimport keys from './keys.js';\n\n/**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\nfunction conformsTo(object, source) {\n  return source == null || baseConformsTo(object, source, keys(source));\n}\n\nexport default conformsTo;\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\nexport default constant;\n","import baseAssignValue from './_baseAssignValue.js';\nimport createAggregator from './_createAggregator.js';\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 * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\nvar countBy = createAggregator(function(result, value, key) {\n  if (hasOwnProperty.call(result, key)) {\n    ++result[key];\n  } else {\n    baseAssignValue(result, key, 1);\n  }\n});\n\nexport default countBy;\n","import baseAssign from './_baseAssign.js';\nimport baseCreate from './_baseCreate.js';\n\n/**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n *   this.x = 0;\n *   this.y = 0;\n * }\n *\n * function Circle() {\n *   Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n *   'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\nfunction create(prototype, properties) {\n  var result = baseCreate(prototype);\n  return properties == null ? result : baseAssign(result, properties);\n}\n\nexport default create;\n","import createWrap from './_createWrap.js';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_CURRY_FLAG = 8;\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, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n  result.placeholder = curry.placeholder;\n  return result;\n}\n\n// Assign default placeholders.\ncurry.placeholder = {};\n\nexport default curry;\n","import createWrap from './_createWrap.js';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_CURRY_RIGHT_FLAG = 16;\n\n/**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, 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 3.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 = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\nfunction curryRight(func, arity, guard) {\n  arity = guard ? undefined : arity;\n  var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n  result.placeholder = curryRight.placeholder;\n  return result;\n}\n\n// Assign default placeholders.\ncurryRight.placeholder = {};\n\nexport default curryRight;\n","import now from './now.js';\n\nexport default {\n  now\n};\n","export { default as now } from './now.js';\nexport { default } from './date.default.js';\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\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 * 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        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\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        clearTimeout(timerId);\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\nexport default debounce;\n","import deburrLetter from './_deburrLetter.js';\nimport toString from './toString.js';\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n  string = toString(string);\n  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nexport default deburr;\n","/**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\nfunction defaultTo(value, defaultValue) {\n  return (value == null || value !== value) ? defaultValue : value;\n}\n\nexport default defaultTo;\n","import baseRest from './_baseRest.js';\nimport eq from './eq.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport keysIn from './keysIn.js';\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 * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n  object = Object(object);\n\n  var index = -1;\n  var length = sources.length;\n  var guard = length > 2 ? sources[2] : undefined;\n\n  if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n    length = 1;\n  }\n\n  while (++index < length) {\n    var source = sources[index];\n    var props = keysIn(source);\n    var propsIndex = -1;\n    var propsLength = props.length;\n\n    while (++propsIndex < propsLength) {\n      var key = props[propsIndex];\n      var value = object[key];\n\n      if (value === undefined ||\n          (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        object[key] = source[key];\n      }\n    }\n  }\n\n  return object;\n});\n\nexport default defaults;\n","import apply from './_apply.js';\nimport baseRest from './_baseRest.js';\nimport customDefaultsMerge from './_customDefaultsMerge.js';\nimport mergeWith from './mergeWith.js';\n\n/**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\nvar defaultsDeep = baseRest(function(args) {\n  args.push(undefined, customDefaultsMerge);\n  return apply(mergeWith, undefined, args);\n});\n\nexport default defaultsDeep;\n","import baseDelay from './_baseDelay.js';\nimport baseRest from './_baseRest.js';\n\n/**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n *   console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\nvar defer = baseRest(function(func, args) {\n  return baseDelay(func, 1, args);\n});\n\nexport default defer;\n","import baseDelay from './_baseDelay.js';\nimport baseRest from './_baseRest.js';\nimport toNumber from './toNumber.js';\n\n/**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n *   console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\nvar delay = baseRest(function(func, wait, args) {\n  return baseDelay(func, toNumber(wait) || 0, args);\n});\n\nexport default delay;\n","import baseDifference from './_baseDifference.js';\nimport baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n  return isArrayLikeObject(array)\n    ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n    : [];\n});\n\nexport default difference;\n","import baseDifference from './_baseDifference.js';\nimport baseFlatten from './_baseFlatten.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport last from './last.js';\n\n/**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\nvar differenceBy = baseRest(function(array, values) {\n  var iteratee = last(values);\n  if (isArrayLikeObject(iteratee)) {\n    iteratee = undefined;\n  }\n  return isArrayLikeObject(array)\n    ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2))\n    : [];\n});\n\nexport default differenceBy;\n","import baseDifference from './_baseDifference.js';\nimport baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport last from './last.js';\n\n/**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\nvar differenceWith = baseRest(function(array, values) {\n  var comparator = last(values);\n  if (isArrayLikeObject(comparator)) {\n    comparator = undefined;\n  }\n  return isArrayLikeObject(array)\n    ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n    : [];\n});\n\nexport default differenceWith;\n","import createMathOperation from './_createMathOperation.js';\n\n/**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\nvar divide = createMathOperation(function(dividend, divisor) {\n  return dividend / divisor;\n}, 1);\n\nexport default divide;\n","import baseSlice from './_baseSlice.js';\nimport toInteger from './toInteger.js';\n\n/**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\nfunction drop(array, n, guard) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return [];\n  }\n  n = (guard || n === undefined) ? 1 : toInteger(n);\n  return baseSlice(array, n < 0 ? 0 : n, length);\n}\n\nexport default drop;\n","import baseSlice from './_baseSlice.js';\nimport toInteger from './toInteger.js';\n\n/**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\nfunction dropRight(array, n, guard) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return [];\n  }\n  n = (guard || n === undefined) ? 1 : toInteger(n);\n  n = length - n;\n  return baseSlice(array, 0, n < 0 ? 0 : n);\n}\n\nexport default dropRight;\n","import baseIteratee from './_baseIteratee.js';\nimport baseWhile from './_baseWhile.js';\n\n/**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'active': true },\n *   { 'user': 'fred',    'active': false },\n *   { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\nfunction dropRightWhile(array, predicate) {\n  return (array && array.length)\n    ? baseWhile(array, baseIteratee(predicate, 3), true, true)\n    : [];\n}\n\nexport default dropRightWhile;\n","import baseIteratee from './_baseIteratee.js';\nimport baseWhile from './_baseWhile.js';\n\n/**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'active': false },\n *   { 'user': 'fred',    'active': false },\n *   { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\nfunction dropWhile(array, predicate) {\n  return (array && array.length)\n    ? baseWhile(array, baseIteratee(predicate, 3), true)\n    : [];\n}\n\nexport default dropWhile;\n","export { default } from './forEach.js'\n","export { default } from './forEachRight.js'\n","import baseClamp from './_baseClamp.js';\nimport baseToString from './_baseToString.js';\nimport toInteger from './toInteger.js';\nimport toString from './toString.js';\n\n/**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n *  else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\nfunction endsWith(string, target, position) {\n  string = toString(string);\n  target = baseToString(target);\n\n  var length = string.length;\n  position = position === undefined\n    ? length\n    : baseClamp(toInteger(position), 0, length);\n\n  var end = position;\n  position -= target.length;\n  return position >= 0 && string.slice(position, end) == target;\n}\n\nexport default endsWith;\n","export { default } from './toPairs.js'\n","export { default } from './toPairsIn.js'\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\nexport default eq;\n","import escapeHtmlChar from './_escapeHtmlChar.js';\nimport toString from './toString.js';\n\n/** Used to match HTML entities and HTML characters. */\nvar reUnescapedHtml = /[&<>\"']/g,\n    reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n/**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, &amp; pebbles'\n */\nfunction escape(string) {\n  string = toString(string);\n  return (string && reHasUnescapedHtml.test(string))\n    ? string.replace(reUnescapedHtml, escapeHtmlChar)\n    : string;\n}\n\nexport default escape;\n","import toString from './toString.js';\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    reHasRegExpChar = RegExp(reRegExpChar.source);\n\n/**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\nfunction escapeRegExp(string) {\n  string = toString(string);\n  return (string && reHasRegExpChar.test(string))\n    ? string.replace(reRegExpChar, '\\\\$&')\n    : string;\n}\n\nexport default escapeRegExp;\n","import arrayEvery from './_arrayEvery.js';\nimport baseEvery from './_baseEvery.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n *  else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n *   { 'user': 'barney', 'age': 36, 'active': false },\n *   { 'user': 'fred',   'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\nfunction every(collection, predicate, guard) {\n  var func = isArray(collection) ? arrayEvery : baseEvery;\n  if (guard && isIterateeCall(collection, predicate, guard)) {\n    predicate = undefined;\n  }\n  return func(collection, baseIteratee(predicate, 3));\n}\n\nexport default every;\n","export { default } from './assignIn.js'\n","export { default } from './assignInWith.js'\n","import baseFill from './_baseFill.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\nfunction fill(array, value, start, end) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return [];\n  }\n  if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n    start = 0;\n    end = length;\n  }\n  return baseFill(array, value, start, end);\n}\n\nexport default fill;\n","import arrayFilter from './_arrayFilter.js';\nimport baseFilter from './_baseFilter.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n *   { 'user': 'barney', 'age': 36, 'active': true },\n *   { 'user': 'fred',   'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n  var func = isArray(collection) ? arrayFilter : baseFilter;\n  return func(collection, baseIteratee(predicate, 3));\n}\n\nexport default filter;\n","import createFind from './_createFind.js';\nimport findIndex from './findIndex.js';\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'age': 36, 'active': true },\n *   { 'user': 'fred',    'age': 40, 'active': false },\n *   { 'user': 'pebbles', 'age': 1,  'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nexport default find;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIteratee from './_baseIteratee.js';\nimport toInteger from './toInteger.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'active': false },\n *   { 'user': 'fred',    'active': false },\n *   { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return -1;\n  }\n  var index = fromIndex == null ? 0 : toInteger(fromIndex);\n  if (index < 0) {\n    index = nativeMax(length + index, 0);\n  }\n  return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nexport default findIndex;\n","import baseFindKey from './_baseFindKey.js';\nimport baseForOwn from './_baseForOwn.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n *  else `undefined`.\n * @example\n *\n * var users = {\n *   'barney':  { 'age': 36, 'active': true },\n *   'fred':    { 'age': 40, 'active': false },\n *   'pebbles': { 'age': 1,  'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\nfunction findKey(object, predicate) {\n  return baseFindKey(object, baseIteratee(predicate, 3), baseForOwn);\n}\n\nexport default findKey;\n","import createFind from './_createFind.js';\nimport findLastIndex from './findLastIndex.js';\n\n/**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n *   return n % 2 == 1;\n * });\n * // => 3\n */\nvar findLast = createFind(findLastIndex);\n\nexport default findLast;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIteratee from './_baseIteratee.js';\nimport toInteger from './toInteger.js';\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 * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'active': true },\n *   { 'user': 'fred',    'active': false },\n *   { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\nfunction findLastIndex(array, predicate, fromIndex) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return -1;\n  }\n  var index = length - 1;\n  if (fromIndex !== undefined) {\n    index = toInteger(fromIndex);\n    index = fromIndex < 0\n      ? nativeMax(length + index, 0)\n      : nativeMin(index, length - 1);\n  }\n  return baseFindIndex(array, baseIteratee(predicate, 3), index, true);\n}\n\nexport default findLastIndex;\n","import baseFindKey from './_baseFindKey.js';\nimport baseForOwnRight from './_baseForOwnRight.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n *  else `undefined`.\n * @example\n *\n * var users = {\n *   'barney':  { 'age': 36, 'active': true },\n *   'fred':    { 'age': 40, 'active': false },\n *   'pebbles': { 'age': 1,  'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\nfunction findLastKey(object, predicate) {\n  return baseFindKey(object, baseIteratee(predicate, 3), baseForOwnRight);\n}\n\nexport default findLastKey;\n","export { default } from './head.js'\n","import baseFlatten from './_baseFlatten.js';\nimport map from './map.js';\n\n/**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\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 {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n *   return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\nfunction flatMap(collection, iteratee) {\n  return baseFlatten(map(collection, iteratee), 1);\n}\n\nexport default flatMap;\n","import baseFlatten from './_baseFlatten.js';\nimport map from './map.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n *   return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\nfunction flatMapDeep(collection, iteratee) {\n  return baseFlatten(map(collection, iteratee), INFINITY);\n}\n\nexport default flatMapDeep;\n","import baseFlatten from './_baseFlatten.js';\nimport map from './map.js';\nimport toInteger from './toInteger.js';\n\n/**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n *   return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\nfunction flatMapDepth(collection, iteratee, depth) {\n  depth = depth === undefined ? 1 : toInteger(depth);\n  return baseFlatten(map(collection, iteratee), depth);\n}\n\nexport default flatMapDepth;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import baseFlatten from './_baseFlatten.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\nfunction flattenDeep(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, INFINITY) : [];\n}\n\nexport default flattenDeep;\n","import baseFlatten from './_baseFlatten.js';\nimport toInteger from './toInteger.js';\n\n/**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\nfunction flattenDepth(array, depth) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return [];\n  }\n  depth = depth === undefined ? 1 : toInteger(depth);\n  return baseFlatten(array, depth);\n}\n\nexport default flattenDepth;\n","import createWrap from './_createWrap.js';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_FLIP_FLAG = 512;\n\n/**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n *   return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\nfunction flip(func) {\n  return createWrap(func, WRAP_FLIP_FLAG);\n}\n\nexport default flip;\n","import createRound from './_createRound.js';\n\n/**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\nvar floor = createRound('floor');\n\nexport default floor;\n","import createFlow from './_createFlow.js';\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\nexport default flow;\n","import createFlow from './_createFlow.js';\n\n/**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n *   return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\nvar flowRight = createFlow(true);\n\nexport default flowRight;\n","import arrayEach from './_arrayEach.js';\nimport baseEach from './_baseEach.js';\nimport castFunction from './_castFunction.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n *   console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n  var func = isArray(collection) ? arrayEach : baseEach;\n  return func(collection, castFunction(iteratee));\n}\n\nexport default forEach;\n","import arrayEachRight from './_arrayEachRight.js';\nimport baseEachRight from './_baseEachRight.js';\nimport castFunction from './_castFunction.js';\nimport isArray from './isArray.js';\n\n/**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n *   console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\nfunction forEachRight(collection, iteratee) {\n  var func = isArray(collection) ? arrayEachRight : baseEachRight;\n  return func(collection, castFunction(iteratee));\n}\n\nexport default forEachRight;\n","import baseFor from './_baseFor.js';\nimport castFunction from './_castFunction.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\nfunction forIn(object, iteratee) {\n  return object == null\n    ? object\n    : baseFor(object, castFunction(iteratee), keysIn);\n}\n\nexport default forIn;\n","import baseForRight from './_baseForRight.js';\nimport castFunction from './_castFunction.js';\nimport keysIn from './keysIn.js';\n\n/**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\nfunction forInRight(object, iteratee) {\n  return object == null\n    ? object\n    : baseForRight(object, castFunction(iteratee), keysIn);\n}\n\nexport default forInRight;\n","import baseForOwn from './_baseForOwn.js';\nimport castFunction from './_castFunction.js';\n\n/**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forOwn(object, iteratee) {\n  return object && baseForOwn(object, castFunction(iteratee));\n}\n\nexport default forOwn;\n","import baseForOwnRight from './_baseForOwnRight.js';\nimport castFunction from './_castFunction.js';\n\n/**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\nfunction forOwnRight(object, iteratee) {\n  return object && baseForOwnRight(object, castFunction(iteratee));\n}\n\nexport default forOwnRight;\n","/**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction fromPairs(pairs) {\n  var index = -1,\n      length = pairs == null ? 0 : pairs.length,\n      result = {};\n\n  while (++index < length) {\n    var pair = pairs[index];\n    result[pair[0]] = pair[1];\n  }\n  return result;\n}\n\nexport default fromPairs;\n","import after from './after.js';\nimport ary from './ary.js';\nimport before from './before.js';\nimport bind from './bind.js';\nimport bindKey from './bindKey.js';\nimport curry from './curry.js';\nimport curryRight from './curryRight.js';\nimport debounce from './debounce.js';\nimport defer from './defer.js';\nimport delay from './delay.js';\nimport flip from './flip.js';\nimport memoize from './memoize.js';\nimport negate from './negate.js';\nimport once from './once.js';\nimport overArgs from './overArgs.js';\nimport partial from './partial.js';\nimport partialRight from './partialRight.js';\nimport rearg from './rearg.js';\nimport rest from './rest.js';\nimport spread from './spread.js';\nimport throttle from './throttle.js';\nimport unary from './unary.js';\nimport wrap from './wrap.js';\n\nexport default {\n  after, ary, before, bind, bindKey,\n  curry, curryRight, debounce, defer, delay,\n  flip, memoize, negate, once, overArgs,\n  partial, partialRight, rearg, rest, spread,\n  throttle, unary, wrap\n};\n","export { default as after } from './after.js';\nexport { default as ary } from './ary.js';\nexport { default as before } from './before.js';\nexport { default as bind } from './bind.js';\nexport { default as bindKey } from './bindKey.js';\nexport { default as curry } from './curry.js';\nexport { default as curryRight } from './curryRight.js';\nexport { default as debounce } from './debounce.js';\nexport { default as defer } from './defer.js';\nexport { default as delay } from './delay.js';\nexport { default as flip } from './flip.js';\nexport { default as memoize } from './memoize.js';\nexport { default as negate } from './negate.js';\nexport { default as once } from './once.js';\nexport { default as overArgs } from './overArgs.js';\nexport { default as partial } from './partial.js';\nexport { default as partialRight } from './partialRight.js';\nexport { default as rearg } from './rearg.js';\nexport { default as rest } from './rest.js';\nexport { default as spread } from './spread.js';\nexport { default as throttle } from './throttle.js';\nexport { default as unary } from './unary.js';\nexport { default as wrap } from './wrap.js';\nexport { default } from './function.default.js';\n","import baseFunctions from './_baseFunctions.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n *   this.a = _.constant('a');\n *   this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\nfunction functions(object) {\n  return object == null ? [] : baseFunctions(object, keys(object));\n}\n\nexport default functions;\n","import baseFunctions from './_baseFunctions.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n *   this.a = _.constant('a');\n *   this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\nfunction functionsIn(object) {\n  return object == null ? [] : baseFunctions(object, keysIn(object));\n}\n\nexport default functionsIn;\n","import baseGet from './_baseGet.js';\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\nexport default get;\n","import baseAssignValue from './_baseAssignValue.js';\nimport createAggregator from './_createAggregator.js';\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 * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\nvar groupBy = createAggregator(function(result, value, key) {\n  if (hasOwnProperty.call(result, key)) {\n    result[key].push(value);\n  } else {\n    baseAssignValue(result, key, [value]);\n  }\n});\n\nexport default groupBy;\n","import baseGt from './_baseGt.js';\nimport createRelationalOperation from './_createRelationalOperation.js';\n\n/**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.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 `value` is greater than `other`,\n *  else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\nvar gt = createRelationalOperation(baseGt);\n\nexport default gt;\n","import createRelationalOperation from './_createRelationalOperation.js';\n\n/**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.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 `value` is greater than or equal to\n *  `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\nvar gte = createRelationalOperation(function(value, other) {\n  return value >= other;\n});\n\nexport default gte;\n","import baseHas from './_baseHas.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\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 = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n  return object != null && hasPath(object, path, baseHas);\n}\n\nexport default has;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\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\nexport default hasIn;\n","/**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\nfunction head(array) {\n  return (array && array.length) ? array[0] : undefined;\n}\n\nexport default head;\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\nexport default identity;\n","import baseInRange from './_baseInRange.js';\nimport toFinite from './toFinite.js';\nimport toNumber from './toNumber.js';\n\n/**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\nfunction inRange(number, start, end) {\n  start = toFinite(start);\n  if (end === undefined) {\n    end = start;\n    start = 0;\n  } else {\n    end = toFinite(end);\n  }\n  number = toNumber(number);\n  return baseInRange(number, start, end);\n}\n\nexport default inRange;\n","import baseIndexOf from './_baseIndexOf.js';\nimport isArrayLike from './isArrayLike.js';\nimport isString from './isString.js';\nimport toInteger from './toInteger.js';\nimport values from './values.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n  collection = isArrayLike(collection) ? collection : values(collection);\n  fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n  var length = collection.length;\n  if (fromIndex < 0) {\n    fromIndex = nativeMax(length + fromIndex, 0);\n  }\n  return isString(collection)\n    ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n    : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\nexport default includes;\n","import baseIndexOf from './_baseIndexOf.js';\nimport toInteger from './toInteger.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\nfunction indexOf(array, value, fromIndex) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return -1;\n  }\n  var index = fromIndex == null ? 0 : toInteger(fromIndex);\n  if (index < 0) {\n    index = nativeMax(length + index, 0);\n  }\n  return baseIndexOf(array, value, index);\n}\n\nexport default indexOf;\n","import baseSlice from './_baseSlice.js';\n\n/**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\nfunction initial(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseSlice(array, 0, -1) : [];\n}\n\nexport default initial;\n","import arrayMap from './_arrayMap.js';\nimport baseIntersection from './_baseIntersection.js';\nimport baseRest from './_baseRest.js';\nimport castArrayLikeObject from './_castArrayLikeObject.js';\n\n/**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\nvar intersection = baseRest(function(arrays) {\n  var mapped = arrayMap(arrays, castArrayLikeObject);\n  return (mapped.length && mapped[0] === arrays[0])\n    ? baseIntersection(mapped)\n    : [];\n});\n\nexport default intersection;\n","import arrayMap from './_arrayMap.js';\nimport baseIntersection from './_baseIntersection.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseRest from './_baseRest.js';\nimport castArrayLikeObject from './_castArrayLikeObject.js';\nimport last from './last.js';\n\n/**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\nvar intersectionBy = baseRest(function(arrays) {\n  var iteratee = last(arrays),\n      mapped = arrayMap(arrays, castArrayLikeObject);\n\n  if (iteratee === last(mapped)) {\n    iteratee = undefined;\n  } else {\n    mapped.pop();\n  }\n  return (mapped.length && mapped[0] === arrays[0])\n    ? baseIntersection(mapped, baseIteratee(iteratee, 2))\n    : [];\n});\n\nexport default intersectionBy;\n","import arrayMap from './_arrayMap.js';\nimport baseIntersection from './_baseIntersection.js';\nimport baseRest from './_baseRest.js';\nimport castArrayLikeObject from './_castArrayLikeObject.js';\nimport last from './last.js';\n\n/**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\nvar intersectionWith = baseRest(function(arrays) {\n  var comparator = last(arrays),\n      mapped = arrayMap(arrays, castArrayLikeObject);\n\n  comparator = typeof comparator == 'function' ? comparator : undefined;\n  if (comparator) {\n    mapped.pop();\n  }\n  return (mapped.length && mapped[0] === arrays[0])\n    ? baseIntersection(mapped, undefined, comparator)\n    : [];\n});\n\nexport default intersectionWith;\n","import constant from './constant.js';\nimport createInverter from './_createInverter.js';\nimport identity from './identity.js';\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 nativeObjectToString = objectProto.toString;\n\n/**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\nvar invert = createInverter(function(result, value, key) {\n  if (value != null &&\n      typeof value.toString != 'function') {\n    value = nativeObjectToString.call(value);\n  }\n\n  result[value] = key;\n}, constant(identity));\n\nexport default invert;\n","import baseIteratee from './_baseIteratee.js';\nimport createInverter from './_createInverter.js';\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 nativeObjectToString = objectProto.toString;\n\n/**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n *   return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\nvar invertBy = createInverter(function(result, value, key) {\n  if (value != null &&\n      typeof value.toString != 'function') {\n    value = nativeObjectToString.call(value);\n  }\n\n  if (hasOwnProperty.call(result, value)) {\n    result[value].push(key);\n  } else {\n    result[value] = [key];\n  }\n}, baseIteratee);\n\nexport default invertBy;\n","import baseInvoke from './_baseInvoke.js';\nimport baseRest from './_baseRest.js';\n\n/**\n * Invokes the method at `path` 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 of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\nvar invoke = baseRest(baseInvoke);\n\nexport default invoke;\n","import apply from './_apply.js';\nimport baseEach from './_baseEach.js';\nimport baseInvoke from './_baseInvoke.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\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|string} path The path of the method to invoke or\n *  the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\nvar invokeMap = baseRest(function(collection, path, args) {\n  var index = -1,\n      isFunc = typeof path == 'function',\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value) {\n    result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n  });\n  return result;\n});\n\nexport default invokeMap;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\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/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\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 */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\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\nexport default isArray;\n","import baseIsArrayBuffer from './_baseIsArrayBuffer.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer;\n\n/**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\nvar isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\nexport default isArrayBuffer;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\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\nexport default isArrayLike;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default isArrayLikeObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]';\n\n/**\n * Checks if `value` is classified as a boolean primitive or 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 boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\nfunction isBoolean(value) {\n  return value === true || value === false ||\n    (isObjectLike(value) && baseGetTag(value) == boolTag);\n}\n\nexport default isBoolean;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\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/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseIsDate from './_baseIsDate.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsDate = nodeUtil && nodeUtil.isDate;\n\n/**\n * Checks if `value` is classified as a `Date` 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 date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\nvar isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\nexport default isDate;\n","import isObjectLike from './isObjectLike.js';\nimport isPlainObject from './isPlainObject.js';\n\n/**\n * Checks if `value` is likely a DOM element.\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 DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\nfunction isElement(value) {\n  return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n}\n\nexport default isElement;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\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 * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\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 empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n  if (value == null) {\n    return true;\n  }\n  if (isArrayLike(value) &&\n      (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n        isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n    return !value.length;\n  }\n  var tag = getTag(value);\n  if (tag == mapTag || tag == setTag) {\n    return !value.size;\n  }\n  if (isPrototype(value)) {\n    return !baseKeys(value).length;\n  }\n  for (var key in value) {\n    if (hasOwnProperty.call(value, key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport default isEmpty;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.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 * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\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 * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n *   return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n *   if (isGreeting(objValue) && isGreeting(othValue)) {\n *     return true;\n *   }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\nfunction isEqualWith(value, other, customizer) {\n  customizer = typeof customizer == 'function' ? customizer : undefined;\n  var result = customizer ? customizer(value, other) : undefined;\n  return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n}\n\nexport default isEqualWith;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\nimport isPlainObject from './isPlainObject.js';\n\n/** `Object#toString` result references. */\nvar domExcTag = '[object DOMException]',\n    errorTag = '[object Error]';\n\n/**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\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 an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\nfunction isError(value) {\n  if (!isObjectLike(value)) {\n    return false;\n  }\n  var tag = baseGetTag(value);\n  return tag == errorTag || tag == domExcTag ||\n    (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n}\n\nexport default isError;\n","import root from './_root.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsFinite = root.isFinite;\n\n/**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\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 finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\nfunction isFinite(value) {\n  return typeof value == 'number' && nativeIsFinite(value);\n}\n\nexport default isFinite;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\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  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import toInteger from './toInteger.js';\n\n/**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\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 integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\nfunction isInteger(value) {\n  return typeof value == 'number' && value == toInteger(value);\n}\n\nexport default isInteger;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\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\nexport default isLength;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\n\n/**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\nfunction isMatch(object, source) {\n  return object === source || baseIsMatch(object, source, getMatchData(source));\n}\n\nexport default isMatch;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\n\n/**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n *   return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n *     return true;\n *   }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\nfunction isMatchWith(object, source, customizer) {\n  customizer = typeof customizer == 'function' ? customizer : undefined;\n  return baseIsMatch(object, source, getMatchData(source), customizer);\n}\n\nexport default isMatchWith;\n","import isNumber from './isNumber.js';\n\n/**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\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 `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\nfunction isNaN(value) {\n  // An `NaN` primitive is the only value that is not equal to itself.\n  // Perform the `toStringTag` check first to avoid errors with some\n  // ActiveX objects in IE.\n  return isNumber(value) && value != +value;\n}\n\nexport default isNaN;\n","import baseIsNative from './_baseIsNative.js';\nimport isMaskable from './_isMaskable.js';\n\n/** Error message constants. */\nvar CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.';\n\n/**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\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 native function,\n *  else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (isMaskable(value)) {\n    throw new Error(CORE_ERROR_TEXT);\n  }\n  return baseIsNative(value);\n}\n\nexport default isNative;\n","/**\n * Checks if `value` is `null` or `undefined`.\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 nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n  return value == null;\n}\n\nexport default isNil;\n","/**\n * Checks if `value` is `null`.\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 `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\nfunction isNull(value) {\n  return value === null;\n}\n\nexport default isNull;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\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 number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n  return typeof value == 'number' ||\n    (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nexport default isNumber;\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 != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\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 != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\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/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import baseIsRegExp from './_baseIsRegExp.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsRegExp = nodeUtil && nodeUtil.isRegExp;\n\n/**\n * Checks if `value` is classified as a `RegExp` 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 regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\nvar isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\nexport default isRegExp;\n","import isInteger from './isInteger.js';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\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 safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\nfunction isSafeInteger(value) {\n  return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isSafeInteger;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' ||\n    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\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) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\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\nexport default isTypedArray;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n  return value === undefined;\n}\n\nexport default isUndefined;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar weakMapTag = '[object WeakMap]';\n\n/**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\nfunction isWeakMap(value) {\n  return isObjectLike(value) && getTag(value) == weakMapTag;\n}\n\nexport default isWeakMap;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar weakSetTag = '[object WeakSet]';\n\n/**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\nfunction isWeakSet(value) {\n  return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n}\n\nexport default isWeakSet;\n","import baseClone from './_baseClone.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1;\n\n/**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n *   { 'user': 'barney', 'age': 36, 'active': true },\n *   { 'user': 'fred',   'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n *     return func.test(string);\n *   };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\nfunction iteratee(func) {\n  return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n}\n\nexport default iteratee;\n","/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeJoin = arrayProto.join;\n\n/**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\nfunction join(array, separator) {\n  return array == null ? '' : nativeJoin.call(array, separator);\n}\n\nexport default join;\n","import createCompounder from './_createCompounder.js';\n\n/**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\nvar kebabCase = createCompounder(function(result, word, index) {\n  return result + (index ? '-' : '') + word.toLowerCase();\n});\n\nexport default kebabCase;\n","import baseAssignValue from './_baseAssignValue.js';\nimport createAggregator from './_createAggregator.js';\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\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 {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n *   { 'dir': 'left', 'code': 97 },\n *   { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n *   return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\nvar keyBy = createAggregator(function(result, value, key) {\n  baseAssignValue(result, key, value);\n});\n\nexport default keyBy;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\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\nexport default keys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\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 * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import castArray from './castArray.js';\nimport clone from './clone.js';\nimport cloneDeep from './cloneDeep.js';\nimport cloneDeepWith from './cloneDeepWith.js';\nimport cloneWith from './cloneWith.js';\nimport conformsTo from './conformsTo.js';\nimport eq from './eq.js';\nimport gt from './gt.js';\nimport gte from './gte.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayBuffer from './isArrayBuffer.js';\nimport isArrayLike from './isArrayLike.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBoolean from './isBoolean.js';\nimport isBuffer from './isBuffer.js';\nimport isDate from './isDate.js';\nimport isElement from './isElement.js';\nimport isEmpty from './isEmpty.js';\nimport isEqual from './isEqual.js';\nimport isEqualWith from './isEqualWith.js';\nimport isError from './isError.js';\nimport isFinite from './isFinite.js';\nimport isFunction from './isFunction.js';\nimport isInteger from './isInteger.js';\nimport isLength from './isLength.js';\nimport isMap from './isMap.js';\nimport isMatch from './isMatch.js';\nimport isMatchWith from './isMatchWith.js';\nimport isNaN from './isNaN.js';\nimport isNative from './isNative.js';\nimport isNil from './isNil.js';\nimport isNull from './isNull.js';\nimport isNumber from './isNumber.js';\nimport isObject from './isObject.js';\nimport isObjectLike from './isObjectLike.js';\nimport isPlainObject from './isPlainObject.js';\nimport isRegExp from './isRegExp.js';\nimport isSafeInteger from './isSafeInteger.js';\nimport isSet from './isSet.js';\nimport isString from './isString.js';\nimport isSymbol from './isSymbol.js';\nimport isTypedArray from './isTypedArray.js';\nimport isUndefined from './isUndefined.js';\nimport isWeakMap from './isWeakMap.js';\nimport isWeakSet from './isWeakSet.js';\nimport lt from './lt.js';\nimport lte from './lte.js';\nimport toArray from './toArray.js';\nimport toFinite from './toFinite.js';\nimport toInteger from './toInteger.js';\nimport toLength from './toLength.js';\nimport toNumber from './toNumber.js';\nimport toPlainObject from './toPlainObject.js';\nimport toSafeInteger from './toSafeInteger.js';\nimport toString from './toString.js';\n\nexport default {\n  castArray, clone, cloneDeep, cloneDeepWith, cloneWith,\n  conformsTo, eq, gt, gte, isArguments,\n  isArray, isArrayBuffer, isArrayLike, isArrayLikeObject, isBoolean,\n  isBuffer, isDate, isElement, isEmpty, isEqual,\n  isEqualWith, isError, isFinite, isFunction, isInteger,\n  isLength, isMap, isMatch, isMatchWith, isNaN,\n  isNative, isNil, isNull, isNumber, isObject,\n  isObjectLike, isPlainObject, isRegExp, isSafeInteger, isSet,\n  isString, isSymbol, isTypedArray, isUndefined, isWeakMap,\n  isWeakSet, lt, lte, toArray, toFinite,\n  toInteger, toLength, toNumber, toPlainObject, toSafeInteger,\n  toString\n};\n","export { default as castArray } from './castArray.js';\nexport { default as clone } from './clone.js';\nexport { default as cloneDeep } from './cloneDeep.js';\nexport { default as cloneDeepWith } from './cloneDeepWith.js';\nexport { default as cloneWith } from './cloneWith.js';\nexport { default as conformsTo } from './conformsTo.js';\nexport { default as eq } from './eq.js';\nexport { default as gt } from './gt.js';\nexport { default as gte } from './gte.js';\nexport { default as isArguments } from './isArguments.js';\nexport { default as isArray } from './isArray.js';\nexport { default as isArrayBuffer } from './isArrayBuffer.js';\nexport { default as isArrayLike } from './isArrayLike.js';\nexport { default as isArrayLikeObject } from './isArrayLikeObject.js';\nexport { default as isBoolean } from './isBoolean.js';\nexport { default as isBuffer } from './isBuffer.js';\nexport { default as isDate } from './isDate.js';\nexport { default as isElement } from './isElement.js';\nexport { default as isEmpty } from './isEmpty.js';\nexport { default as isEqual } from './isEqual.js';\nexport { default as isEqualWith } from './isEqualWith.js';\nexport { default as isError } from './isError.js';\nexport { default as isFinite } from './isFinite.js';\nexport { default as isFunction } from './isFunction.js';\nexport { default as isInteger } from './isInteger.js';\nexport { default as isLength } from './isLength.js';\nexport { default as isMap } from './isMap.js';\nexport { default as isMatch } from './isMatch.js';\nexport { default as isMatchWith } from './isMatchWith.js';\nexport { default as isNaN } from './isNaN.js';\nexport { default as isNative } from './isNative.js';\nexport { default as isNil } from './isNil.js';\nexport { default as isNull } from './isNull.js';\nexport { default as isNumber } from './isNumber.js';\nexport { default as isObject } from './isObject.js';\nexport { default as isObjectLike } from './isObjectLike.js';\nexport { default as isPlainObject } from './isPlainObject.js';\nexport { default as isRegExp } from './isRegExp.js';\nexport { default as isSafeInteger } from './isSafeInteger.js';\nexport { default as isSet } from './isSet.js';\nexport { default as isString } from './isString.js';\nexport { default as isSymbol } from './isSymbol.js';\nexport { default as isTypedArray } from './isTypedArray.js';\nexport { default as isUndefined } from './isUndefined.js';\nexport { default as isWeakMap } from './isWeakMap.js';\nexport { default as isWeakSet } from './isWeakSet.js';\nexport { default as lt } from './lt.js';\nexport { default as lte } from './lte.js';\nexport { default as toArray } from './toArray.js';\nexport { default as toFinite } from './toFinite.js';\nexport { default as toInteger } from './toInteger.js';\nexport { default as toLength } from './toLength.js';\nexport { default as toNumber } from './toNumber.js';\nexport { default as toPlainObject } from './toPlainObject.js';\nexport { default as toSafeInteger } from './toSafeInteger.js';\nexport { default as toString } from './toString.js';\nexport { default } from './lang.default.js';\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictLastIndexOf from './_strictLastIndexOf.js';\nimport toInteger from './toInteger.js';\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 * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\nfunction lastIndexOf(array, value, fromIndex) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return -1;\n  }\n  var index = length;\n  if (fromIndex !== undefined) {\n    index = toInteger(fromIndex);\n    index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n  }\n  return value === value\n    ? strictLastIndexOf(array, value, index)\n    : baseFindIndex(array, baseIsNaN, index, true);\n}\n\nexport default lastIndexOf;\n","/**\n * @license\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"es\" -o ./`\n * Copyright OpenJS Foundation and other contributors <https://openjsf.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 */\nimport array from './array.js';\nimport collection from './collection.js';\nimport date from './date.js';\nimport func from './function.js';\nimport lang from './lang.js';\nimport math from './math.js';\nimport number from './number.js';\nimport object from './object.js';\nimport seq from './seq.js';\nimport string from './string.js';\nimport util from './util.js';\nimport LazyWrapper from './_LazyWrapper.js';\nimport LodashWrapper from './_LodashWrapper.js';\nimport Symbol from './_Symbol.js';\nimport arrayEach from './_arrayEach.js';\nimport arrayPush from './_arrayPush.js';\nimport baseForOwn from './_baseForOwn.js';\nimport baseFunctions from './_baseFunctions.js';\nimport baseInvoke from './_baseInvoke.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseRest from './_baseRest.js';\nimport createHybrid from './_createHybrid.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport isObject from './isObject.js';\nimport keys from './keys.js';\nimport last from './last.js';\nimport lazyClone from './_lazyClone.js';\nimport lazyReverse from './_lazyReverse.js';\nimport lazyValue from './_lazyValue.js';\nimport _mixin from './mixin.js';\nimport negate from './negate.js';\nimport realNames from './_realNames.js';\nimport thru from './thru.js';\nimport toInteger from './toInteger.js';\nimport lodash from './wrapperLodash.js';\n\n/** Used as the semantic version number. */\nvar VERSION = '4.17.21';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_KEY_FLAG = 2;\n\n/** Used to indicate the type of lazy iteratees. */\nvar LAZY_FILTER_FLAG = 1,\n    LAZY_WHILE_FLAG = 3;\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295;\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n    objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar symIterator = Symbol ? Symbol.iterator : undefined;\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// wrap `_.mixin` so it works when provided only one argument\nvar mixin = (function(func) {\n  return function(object, source, options) {\n    if (options == null) {\n      var isObj = isObject(source),\n          props = isObj && keys(source),\n          methodNames = props && props.length && baseFunctions(source, props);\n\n      if (!(methodNames ? methodNames.length : isObj)) {\n        options = source;\n        source = object;\n        object = this;\n      }\n    }\n    return func(object, source, options);\n  };\n}(_mixin));\n\n// Add methods that return wrapped values in chain sequences.\nlodash.after = func.after;\nlodash.ary = func.ary;\nlodash.assign = object.assign;\nlodash.assignIn = object.assignIn;\nlodash.assignInWith = object.assignInWith;\nlodash.assignWith = object.assignWith;\nlodash.at = object.at;\nlodash.before = func.before;\nlodash.bind = func.bind;\nlodash.bindAll = util.bindAll;\nlodash.bindKey = func.bindKey;\nlodash.castArray = lang.castArray;\nlodash.chain = seq.chain;\nlodash.chunk = array.chunk;\nlodash.compact = array.compact;\nlodash.concat = array.concat;\nlodash.cond = util.cond;\nlodash.conforms = util.conforms;\nlodash.constant = util.constant;\nlodash.countBy = collection.countBy;\nlodash.create = object.create;\nlodash.curry = func.curry;\nlodash.curryRight = func.curryRight;\nlodash.debounce = func.debounce;\nlodash.defaults = object.defaults;\nlodash.defaultsDeep = object.defaultsDeep;\nlodash.defer = func.defer;\nlodash.delay = func.delay;\nlodash.difference = array.difference;\nlodash.differenceBy = array.differenceBy;\nlodash.differenceWith = array.differenceWith;\nlodash.drop = array.drop;\nlodash.dropRight = array.dropRight;\nlodash.dropRightWhile = array.dropRightWhile;\nlodash.dropWhile = array.dropWhile;\nlodash.fill = array.fill;\nlodash.filter = collection.filter;\nlodash.flatMap = collection.flatMap;\nlodash.flatMapDeep = collection.flatMapDeep;\nlodash.flatMapDepth = collection.flatMapDepth;\nlodash.flatten = array.flatten;\nlodash.flattenDeep = array.flattenDeep;\nlodash.flattenDepth = array.flattenDepth;\nlodash.flip = func.flip;\nlodash.flow = util.flow;\nlodash.flowRight = util.flowRight;\nlodash.fromPairs = array.fromPairs;\nlodash.functions = object.functions;\nlodash.functionsIn = object.functionsIn;\nlodash.groupBy = collection.groupBy;\nlodash.initial = array.initial;\nlodash.intersection = array.intersection;\nlodash.intersectionBy = array.intersectionBy;\nlodash.intersectionWith = array.intersectionWith;\nlodash.invert = object.invert;\nlodash.invertBy = object.invertBy;\nlodash.invokeMap = collection.invokeMap;\nlodash.iteratee = util.iteratee;\nlodash.keyBy = collection.keyBy;\nlodash.keys = keys;\nlodash.keysIn = object.keysIn;\nlodash.map = collection.map;\nlodash.mapKeys = object.mapKeys;\nlodash.mapValues = object.mapValues;\nlodash.matches = util.matches;\nlodash.matchesProperty = util.matchesProperty;\nlodash.memoize = func.memoize;\nlodash.merge = object.merge;\nlodash.mergeWith = object.mergeWith;\nlodash.method = util.method;\nlodash.methodOf = util.methodOf;\nlodash.mixin = mixin;\nlodash.negate = negate;\nlodash.nthArg = util.nthArg;\nlodash.omit = object.omit;\nlodash.omitBy = object.omitBy;\nlodash.once = func.once;\nlodash.orderBy = collection.orderBy;\nlodash.over = util.over;\nlodash.overArgs = func.overArgs;\nlodash.overEvery = util.overEvery;\nlodash.overSome = util.overSome;\nlodash.partial = func.partial;\nlodash.partialRight = func.partialRight;\nlodash.partition = collection.partition;\nlodash.pick = object.pick;\nlodash.pickBy = object.pickBy;\nlodash.property = util.property;\nlodash.propertyOf = util.propertyOf;\nlodash.pull = array.pull;\nlodash.pullAll = array.pullAll;\nlodash.pullAllBy = array.pullAllBy;\nlodash.pullAllWith = array.pullAllWith;\nlodash.pullAt = array.pullAt;\nlodash.range = util.range;\nlodash.rangeRight = util.rangeRight;\nlodash.rearg = func.rearg;\nlodash.reject = collection.reject;\nlodash.remove = array.remove;\nlodash.rest = func.rest;\nlodash.reverse = array.reverse;\nlodash.sampleSize = collection.sampleSize;\nlodash.set = object.set;\nlodash.setWith = object.setWith;\nlodash.shuffle = collection.shuffle;\nlodash.slice = array.slice;\nlodash.sortBy = collection.sortBy;\nlodash.sortedUniq = array.sortedUniq;\nlodash.sortedUniqBy = array.sortedUniqBy;\nlodash.split = string.split;\nlodash.spread = func.spread;\nlodash.tail = array.tail;\nlodash.take = array.take;\nlodash.takeRight = array.takeRight;\nlodash.takeRightWhile = array.takeRightWhile;\nlodash.takeWhile = array.takeWhile;\nlodash.tap = seq.tap;\nlodash.throttle = func.throttle;\nlodash.thru = thru;\nlodash.toArray = lang.toArray;\nlodash.toPairs = object.toPairs;\nlodash.toPairsIn = object.toPairsIn;\nlodash.toPath = util.toPath;\nlodash.toPlainObject = lang.toPlainObject;\nlodash.transform = object.transform;\nlodash.unary = func.unary;\nlodash.union = array.union;\nlodash.unionBy = array.unionBy;\nlodash.unionWith = array.unionWith;\nlodash.uniq = array.uniq;\nlodash.uniqBy = array.uniqBy;\nlodash.uniqWith = array.uniqWith;\nlodash.unset = object.unset;\nlodash.unzip = array.unzip;\nlodash.unzipWith = array.unzipWith;\nlodash.update = object.update;\nlodash.updateWith = object.updateWith;\nlodash.values = object.values;\nlodash.valuesIn = object.valuesIn;\nlodash.without = array.without;\nlodash.words = string.words;\nlodash.wrap = func.wrap;\nlodash.xor = array.xor;\nlodash.xorBy = array.xorBy;\nlodash.xorWith = array.xorWith;\nlodash.zip = array.zip;\nlodash.zipObject = array.zipObject;\nlodash.zipObjectDeep = array.zipObjectDeep;\nlodash.zipWith = array.zipWith;\n\n// Add aliases.\nlodash.entries = object.toPairs;\nlodash.entriesIn = object.toPairsIn;\nlodash.extend = object.assignIn;\nlodash.extendWith = object.assignInWith;\n\n// Add methods to `lodash.prototype`.\nmixin(lodash, lodash);\n\n// Add methods that return unwrapped values in chain sequences.\nlodash.add = math.add;\nlodash.attempt = util.attempt;\nlodash.camelCase = string.camelCase;\nlodash.capitalize = string.capitalize;\nlodash.ceil = math.ceil;\nlodash.clamp = number.clamp;\nlodash.clone = lang.clone;\nlodash.cloneDeep = lang.cloneDeep;\nlodash.cloneDeepWith = lang.cloneDeepWith;\nlodash.cloneWith = lang.cloneWith;\nlodash.conformsTo = lang.conformsTo;\nlodash.deburr = string.deburr;\nlodash.defaultTo = util.defaultTo;\nlodash.divide = math.divide;\nlodash.endsWith = string.endsWith;\nlodash.eq = lang.eq;\nlodash.escape = string.escape;\nlodash.escapeRegExp = string.escapeRegExp;\nlodash.every = collection.every;\nlodash.find = collection.find;\nlodash.findIndex = array.findIndex;\nlodash.findKey = object.findKey;\nlodash.findLast = collection.findLast;\nlodash.findLastIndex = array.findLastIndex;\nlodash.findLastKey = object.findLastKey;\nlodash.floor = math.floor;\nlodash.forEach = collection.forEach;\nlodash.forEachRight = collection.forEachRight;\nlodash.forIn = object.forIn;\nlodash.forInRight = object.forInRight;\nlodash.forOwn = object.forOwn;\nlodash.forOwnRight = object.forOwnRight;\nlodash.get = object.get;\nlodash.gt = lang.gt;\nlodash.gte = lang.gte;\nlodash.has = object.has;\nlodash.hasIn = object.hasIn;\nlodash.head = array.head;\nlodash.identity = identity;\nlodash.includes = collection.includes;\nlodash.indexOf = array.indexOf;\nlodash.inRange = number.inRange;\nlodash.invoke = object.invoke;\nlodash.isArguments = lang.isArguments;\nlodash.isArray = isArray;\nlodash.isArrayBuffer = lang.isArrayBuffer;\nlodash.isArrayLike = lang.isArrayLike;\nlodash.isArrayLikeObject = lang.isArrayLikeObject;\nlodash.isBoolean = lang.isBoolean;\nlodash.isBuffer = lang.isBuffer;\nlodash.isDate = lang.isDate;\nlodash.isElement = lang.isElement;\nlodash.isEmpty = lang.isEmpty;\nlodash.isEqual = lang.isEqual;\nlodash.isEqualWith = lang.isEqualWith;\nlodash.isError = lang.isError;\nlodash.isFinite = lang.isFinite;\nlodash.isFunction = lang.isFunction;\nlodash.isInteger = lang.isInteger;\nlodash.isLength = lang.isLength;\nlodash.isMap = lang.isMap;\nlodash.isMatch = lang.isMatch;\nlodash.isMatchWith = lang.isMatchWith;\nlodash.isNaN = lang.isNaN;\nlodash.isNative = lang.isNative;\nlodash.isNil = lang.isNil;\nlodash.isNull = lang.isNull;\nlodash.isNumber = lang.isNumber;\nlodash.isObject = isObject;\nlodash.isObjectLike = lang.isObjectLike;\nlodash.isPlainObject = lang.isPlainObject;\nlodash.isRegExp = lang.isRegExp;\nlodash.isSafeInteger = lang.isSafeInteger;\nlodash.isSet = lang.isSet;\nlodash.isString = lang.isString;\nlodash.isSymbol = lang.isSymbol;\nlodash.isTypedArray = lang.isTypedArray;\nlodash.isUndefined = lang.isUndefined;\nlodash.isWeakMap = lang.isWeakMap;\nlodash.isWeakSet = lang.isWeakSet;\nlodash.join = array.join;\nlodash.kebabCase = string.kebabCase;\nlodash.last = last;\nlodash.lastIndexOf = array.lastIndexOf;\nlodash.lowerCase = string.lowerCase;\nlodash.lowerFirst = string.lowerFirst;\nlodash.lt = lang.lt;\nlodash.lte = lang.lte;\nlodash.max = math.max;\nlodash.maxBy = math.maxBy;\nlodash.mean = math.mean;\nlodash.meanBy = math.meanBy;\nlodash.min = math.min;\nlodash.minBy = math.minBy;\nlodash.stubArray = util.stubArray;\nlodash.stubFalse = util.stubFalse;\nlodash.stubObject = util.stubObject;\nlodash.stubString = util.stubString;\nlodash.stubTrue = util.stubTrue;\nlodash.multiply = math.multiply;\nlodash.nth = array.nth;\nlodash.noop = util.noop;\nlodash.now = date.now;\nlodash.pad = string.pad;\nlodash.padEnd = string.padEnd;\nlodash.padStart = string.padStart;\nlodash.parseInt = string.parseInt;\nlodash.random = number.random;\nlodash.reduce = collection.reduce;\nlodash.reduceRight = collection.reduceRight;\nlodash.repeat = string.repeat;\nlodash.replace = string.replace;\nlodash.result = object.result;\nlodash.round = math.round;\nlodash.sample = collection.sample;\nlodash.size = collection.size;\nlodash.snakeCase = string.snakeCase;\nlodash.some = collection.some;\nlodash.sortedIndex = array.sortedIndex;\nlodash.sortedIndexBy = array.sortedIndexBy;\nlodash.sortedIndexOf = array.sortedIndexOf;\nlodash.sortedLastIndex = array.sortedLastIndex;\nlodash.sortedLastIndexBy = array.sortedLastIndexBy;\nlodash.sortedLastIndexOf = array.sortedLastIndexOf;\nlodash.startCase = string.startCase;\nlodash.startsWith = string.startsWith;\nlodash.subtract = math.subtract;\nlodash.sum = math.sum;\nlodash.sumBy = math.sumBy;\nlodash.template = string.template;\nlodash.times = util.times;\nlodash.toFinite = lang.toFinite;\nlodash.toInteger = toInteger;\nlodash.toLength = lang.toLength;\nlodash.toLower = string.toLower;\nlodash.toNumber = lang.toNumber;\nlodash.toSafeInteger = lang.toSafeInteger;\nlodash.toString = lang.toString;\nlodash.toUpper = string.toUpper;\nlodash.trim = string.trim;\nlodash.trimEnd = string.trimEnd;\nlodash.trimStart = string.trimStart;\nlodash.truncate = string.truncate;\nlodash.unescape = string.unescape;\nlodash.uniqueId = util.uniqueId;\nlodash.upperCase = string.upperCase;\nlodash.upperFirst = string.upperFirst;\n\n// Add aliases.\nlodash.each = collection.forEach;\nlodash.eachRight = collection.forEachRight;\nlodash.first = array.head;\n\nmixin(lodash, (function() {\n  var source = {};\n  baseForOwn(lodash, function(func, methodName) {\n    if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n      source[methodName] = func;\n    }\n  });\n  return source;\n}()), { 'chain': false });\n\n/**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\nlodash.VERSION = VERSION;\n(lodash.templateSettings = string.templateSettings).imports._ = lodash;\n\n// Assign default placeholders.\narrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n  lodash[methodName].placeholder = lodash;\n});\n\n// Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\narrayEach(['drop', 'take'], function(methodName, index) {\n  LazyWrapper.prototype[methodName] = function(n) {\n    n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n    var result = (this.__filtered__ && !index)\n      ? new LazyWrapper(this)\n      : this.clone();\n\n    if (result.__filtered__) {\n      result.__takeCount__ = nativeMin(n, result.__takeCount__);\n    } else {\n      result.__views__.push({\n        'size': nativeMin(n, MAX_ARRAY_LENGTH),\n        'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n      });\n    }\n    return result;\n  };\n\n  LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n    return this.reverse()[methodName](n).reverse();\n  };\n});\n\n// Add `LazyWrapper` methods that accept an `iteratee` value.\narrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n  var type = index + 1,\n      isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n  LazyWrapper.prototype[methodName] = function(iteratee) {\n    var result = this.clone();\n    result.__iteratees__.push({\n      'iteratee': baseIteratee(iteratee, 3),\n      'type': type\n    });\n    result.__filtered__ = result.__filtered__ || isFilter;\n    return result;\n  };\n});\n\n// Add `LazyWrapper` methods for `_.head` and `_.last`.\narrayEach(['head', 'last'], function(methodName, index) {\n  var takeName = 'take' + (index ? 'Right' : '');\n\n  LazyWrapper.prototype[methodName] = function() {\n    return this[takeName](1).value()[0];\n  };\n});\n\n// Add `LazyWrapper` methods for `_.initial` and `_.tail`.\narrayEach(['initial', 'tail'], function(methodName, index) {\n  var dropName = 'drop' + (index ? '' : 'Right');\n\n  LazyWrapper.prototype[methodName] = function() {\n    return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n  };\n});\n\nLazyWrapper.prototype.compact = function() {\n  return this.filter(identity);\n};\n\nLazyWrapper.prototype.find = function(predicate) {\n  return this.filter(predicate).head();\n};\n\nLazyWrapper.prototype.findLast = function(predicate) {\n  return this.reverse().find(predicate);\n};\n\nLazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n  if (typeof path == 'function') {\n    return new LazyWrapper(this);\n  }\n  return this.map(function(value) {\n    return baseInvoke(value, path, args);\n  });\n});\n\nLazyWrapper.prototype.reject = function(predicate) {\n  return this.filter(negate(baseIteratee(predicate)));\n};\n\nLazyWrapper.prototype.slice = function(start, end) {\n  start = toInteger(start);\n\n  var result = this;\n  if (result.__filtered__ && (start > 0 || end < 0)) {\n    return new LazyWrapper(result);\n  }\n  if (start < 0) {\n    result = result.takeRight(-start);\n  } else if (start) {\n    result = result.drop(start);\n  }\n  if (end !== undefined) {\n    end = toInteger(end);\n    result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n  }\n  return result;\n};\n\nLazyWrapper.prototype.takeRightWhile = function(predicate) {\n  return this.reverse().takeWhile(predicate).reverse();\n};\n\nLazyWrapper.prototype.toArray = function() {\n  return this.take(MAX_ARRAY_LENGTH);\n};\n\n// Add `LazyWrapper` methods to `lodash.prototype`.\nbaseForOwn(LazyWrapper.prototype, function(func, methodName) {\n  var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n      isTaker = /^(?:head|last)$/.test(methodName),\n      lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n      retUnwrapped = isTaker || /^find/.test(methodName);\n\n  if (!lodashFunc) {\n    return;\n  }\n  lodash.prototype[methodName] = function() {\n    var value = this.__wrapped__,\n        args = isTaker ? [1] : arguments,\n        isLazy = value instanceof LazyWrapper,\n        iteratee = args[0],\n        useLazy = isLazy || isArray(value);\n\n    var interceptor = function(value) {\n      var result = lodashFunc.apply(lodash, arrayPush([value], args));\n      return (isTaker && chainAll) ? result[0] : result;\n    };\n\n    if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n      // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n      isLazy = useLazy = false;\n    }\n    var chainAll = this.__chain__,\n        isHybrid = !!this.__actions__.length,\n        isUnwrapped = retUnwrapped && !chainAll,\n        onlyLazy = isLazy && !isHybrid;\n\n    if (!retUnwrapped && useLazy) {\n      value = onlyLazy ? value : new LazyWrapper(this);\n      var result = func.apply(value, args);\n      result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n      return new LodashWrapper(result, chainAll);\n    }\n    if (isUnwrapped && onlyLazy) {\n      return func.apply(this, args);\n    }\n    result = this.thru(interceptor);\n    return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n  };\n});\n\n// Add `Array` methods to `lodash.prototype`.\narrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n  var func = arrayProto[methodName],\n      chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n      retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n  lodash.prototype[methodName] = function() {\n    var args = arguments;\n    if (retUnwrapped && !this.__chain__) {\n      var value = this.value();\n      return func.apply(isArray(value) ? value : [], args);\n    }\n    return this[chainName](function(value) {\n      return func.apply(isArray(value) ? value : [], args);\n    });\n  };\n});\n\n// Map minified method names to their real names.\nbaseForOwn(LazyWrapper.prototype, function(func, methodName) {\n  var lodashFunc = lodash[methodName];\n  if (lodashFunc) {\n    var key = lodashFunc.name + '';\n    if (!hasOwnProperty.call(realNames, key)) {\n      realNames[key] = [];\n    }\n    realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n  }\n});\n\nrealNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n  'name': 'wrapper',\n  'func': undefined\n}];\n\n// Add methods to `LazyWrapper`.\nLazyWrapper.prototype.clone = lazyClone;\nLazyWrapper.prototype.reverse = lazyReverse;\nLazyWrapper.prototype.value = lazyValue;\n\n// Add chain sequence methods to the `lodash` wrapper.\nlodash.prototype.at = seq.at;\nlodash.prototype.chain = seq.wrapperChain;\nlodash.prototype.commit = seq.commit;\nlodash.prototype.next = seq.next;\nlodash.prototype.plant = seq.plant;\nlodash.prototype.reverse = seq.reverse;\nlodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = seq.value;\n\n// Add lazy aliases.\nlodash.prototype.first = lodash.prototype.head;\n\nif (symIterator) {\n  lodash.prototype[symIterator] = seq.toIterator;\n}\n\nexport default lodash;\n","/**\n * @license\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"es\" -o ./`\n * Copyright OpenJS Foundation and other contributors <https://openjsf.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 */\nexport { default as add } from './add.js';\nexport { default as after } from './after.js';\nexport { default as ary } from './ary.js';\nexport { default as assign } from './assign.js';\nexport { default as assignIn } from './assignIn.js';\nexport { default as assignInWith } from './assignInWith.js';\nexport { default as assignWith } from './assignWith.js';\nexport { default as at } from './at.js';\nexport { default as attempt } from './attempt.js';\nexport { default as before } from './before.js';\nexport { default as bind } from './bind.js';\nexport { default as bindAll } from './bindAll.js';\nexport { default as bindKey } from './bindKey.js';\nexport { default as camelCase } from './camelCase.js';\nexport { default as capitalize } from './capitalize.js';\nexport { default as castArray } from './castArray.js';\nexport { default as ceil } from './ceil.js';\nexport { default as chain } from './chain.js';\nexport { default as chunk } from './chunk.js';\nexport { default as clamp } from './clamp.js';\nexport { default as clone } from './clone.js';\nexport { default as cloneDeep } from './cloneDeep.js';\nexport { default as cloneDeepWith } from './cloneDeepWith.js';\nexport { default as cloneWith } from './cloneWith.js';\nexport { default as commit } from './commit.js';\nexport { default as compact } from './compact.js';\nexport { default as concat } from './concat.js';\nexport { default as cond } from './cond.js';\nexport { default as conforms } from './conforms.js';\nexport { default as conformsTo } from './conformsTo.js';\nexport { default as constant } from './constant.js';\nexport { default as countBy } from './countBy.js';\nexport { default as create } from './create.js';\nexport { default as curry } from './curry.js';\nexport { default as curryRight } from './curryRight.js';\nexport { default as debounce } from './debounce.js';\nexport { default as deburr } from './deburr.js';\nexport { default as defaultTo } from './defaultTo.js';\nexport { default as defaults } from './defaults.js';\nexport { default as defaultsDeep } from './defaultsDeep.js';\nexport { default as defer } from './defer.js';\nexport { default as delay } from './delay.js';\nexport { default as difference } from './difference.js';\nexport { default as differenceBy } from './differenceBy.js';\nexport { default as differenceWith } from './differenceWith.js';\nexport { default as divide } from './divide.js';\nexport { default as drop } from './drop.js';\nexport { default as dropRight } from './dropRight.js';\nexport { default as dropRightWhile } from './dropRightWhile.js';\nexport { default as dropWhile } from './dropWhile.js';\nexport { default as each } from './each.js';\nexport { default as eachRight } from './eachRight.js';\nexport { default as endsWith } from './endsWith.js';\nexport { default as entries } from './entries.js';\nexport { default as entriesIn } from './entriesIn.js';\nexport { default as eq } from './eq.js';\nexport { default as escape } from './escape.js';\nexport { default as escapeRegExp } from './escapeRegExp.js';\nexport { default as every } from './every.js';\nexport { default as extend } from './extend.js';\nexport { default as extendWith } from './extendWith.js';\nexport { default as fill } from './fill.js';\nexport { default as filter } from './filter.js';\nexport { default as find } from './find.js';\nexport { default as findIndex } from './findIndex.js';\nexport { default as findKey } from './findKey.js';\nexport { default as findLast } from './findLast.js';\nexport { default as findLastIndex } from './findLastIndex.js';\nexport { default as findLastKey } from './findLastKey.js';\nexport { default as first } from './first.js';\nexport { default as flatMap } from './flatMap.js';\nexport { default as flatMapDeep } from './flatMapDeep.js';\nexport { default as flatMapDepth } from './flatMapDepth.js';\nexport { default as flatten } from './flatten.js';\nexport { default as flattenDeep } from './flattenDeep.js';\nexport { default as flattenDepth } from './flattenDepth.js';\nexport { default as flip } from './flip.js';\nexport { default as floor } from './floor.js';\nexport { default as flow } from './flow.js';\nexport { default as flowRight } from './flowRight.js';\nexport { default as forEach } from './forEach.js';\nexport { default as forEachRight } from './forEachRight.js';\nexport { default as forIn } from './forIn.js';\nexport { default as forInRight } from './forInRight.js';\nexport { default as forOwn } from './forOwn.js';\nexport { default as forOwnRight } from './forOwnRight.js';\nexport { default as fromPairs } from './fromPairs.js';\nexport { default as functions } from './functions.js';\nexport { default as functionsIn } from './functionsIn.js';\nexport { default as get } from './get.js';\nexport { default as groupBy } from './groupBy.js';\nexport { default as gt } from './gt.js';\nexport { default as gte } from './gte.js';\nexport { default as has } from './has.js';\nexport { default as hasIn } from './hasIn.js';\nexport { default as head } from './head.js';\nexport { default as identity } from './identity.js';\nexport { default as inRange } from './inRange.js';\nexport { default as includes } from './includes.js';\nexport { default as indexOf } from './indexOf.js';\nexport { default as initial } from './initial.js';\nexport { default as intersection } from './intersection.js';\nexport { default as intersectionBy } from './intersectionBy.js';\nexport { default as intersectionWith } from './intersectionWith.js';\nexport { default as invert } from './invert.js';\nexport { default as invertBy } from './invertBy.js';\nexport { default as invoke } from './invoke.js';\nexport { default as invokeMap } from './invokeMap.js';\nexport { default as isArguments } from './isArguments.js';\nexport { default as isArray } from './isArray.js';\nexport { default as isArrayBuffer } from './isArrayBuffer.js';\nexport { default as isArrayLike } from './isArrayLike.js';\nexport { default as isArrayLikeObject } from './isArrayLikeObject.js';\nexport { default as isBoolean } from './isBoolean.js';\nexport { default as isBuffer } from './isBuffer.js';\nexport { default as isDate } from './isDate.js';\nexport { default as isElement } from './isElement.js';\nexport { default as isEmpty } from './isEmpty.js';\nexport { default as isEqual } from './isEqual.js';\nexport { default as isEqualWith } from './isEqualWith.js';\nexport { default as isError } from './isError.js';\nexport { default as isFinite } from './isFinite.js';\nexport { default as isFunction } from './isFunction.js';\nexport { default as isInteger } from './isInteger.js';\nexport { default as isLength } from './isLength.js';\nexport { default as isMap } from './isMap.js';\nexport { default as isMatch } from './isMatch.js';\nexport { default as isMatchWith } from './isMatchWith.js';\nexport { default as isNaN } from './isNaN.js';\nexport { default as isNative } from './isNative.js';\nexport { default as isNil } from './isNil.js';\nexport { default as isNull } from './isNull.js';\nexport { default as isNumber } from './isNumber.js';\nexport { default as isObject } from './isObject.js';\nexport { default as isObjectLike } from './isObjectLike.js';\nexport { default as isPlainObject } from './isPlainObject.js';\nexport { default as isRegExp } from './isRegExp.js';\nexport { default as isSafeInteger } from './isSafeInteger.js';\nexport { default as isSet } from './isSet.js';\nexport { default as isString } from './isString.js';\nexport { default as isSymbol } from './isSymbol.js';\nexport { default as isTypedArray } from './isTypedArray.js';\nexport { default as isUndefined } from './isUndefined.js';\nexport { default as isWeakMap } from './isWeakMap.js';\nexport { default as isWeakSet } from './isWeakSet.js';\nexport { default as iteratee } from './iteratee.js';\nexport { default as join } from './join.js';\nexport { default as kebabCase } from './kebabCase.js';\nexport { default as keyBy } from './keyBy.js';\nexport { default as keys } from './keys.js';\nexport { default as keysIn } from './keysIn.js';\nexport { default as last } from './last.js';\nexport { default as lastIndexOf } from './lastIndexOf.js';\nexport { default as lodash } from './wrapperLodash.js';\nexport { default as lowerCase } from './lowerCase.js';\nexport { default as lowerFirst } from './lowerFirst.js';\nexport { default as lt } from './lt.js';\nexport { default as lte } from './lte.js';\nexport { default as map } from './map.js';\nexport { default as mapKeys } from './mapKeys.js';\nexport { default as mapValues } from './mapValues.js';\nexport { default as matches } from './matches.js';\nexport { default as matchesProperty } from './matchesProperty.js';\nexport { default as max } from './max.js';\nexport { default as maxBy } from './maxBy.js';\nexport { default as mean } from './mean.js';\nexport { default as meanBy } from './meanBy.js';\nexport { default as memoize } from './memoize.js';\nexport { default as merge } from './merge.js';\nexport { default as mergeWith } from './mergeWith.js';\nexport { default as method } from './method.js';\nexport { default as methodOf } from './methodOf.js';\nexport { default as min } from './min.js';\nexport { default as minBy } from './minBy.js';\nexport { default as mixin } from './mixin.js';\nexport { default as multiply } from './multiply.js';\nexport { default as negate } from './negate.js';\nexport { default as next } from './next.js';\nexport { default as noop } from './noop.js';\nexport { default as now } from './now.js';\nexport { default as nth } from './nth.js';\nexport { default as nthArg } from './nthArg.js';\nexport { default as omit } from './omit.js';\nexport { default as omitBy } from './omitBy.js';\nexport { default as once } from './once.js';\nexport { default as orderBy } from './orderBy.js';\nexport { default as over } from './over.js';\nexport { default as overArgs } from './overArgs.js';\nexport { default as overEvery } from './overEvery.js';\nexport { default as overSome } from './overSome.js';\nexport { default as pad } from './pad.js';\nexport { default as padEnd } from './padEnd.js';\nexport { default as padStart } from './padStart.js';\nexport { default as parseInt } from './parseInt.js';\nexport { default as partial } from './partial.js';\nexport { default as partialRight } from './partialRight.js';\nexport { default as partition } from './partition.js';\nexport { default as pick } from './pick.js';\nexport { default as pickBy } from './pickBy.js';\nexport { default as plant } from './plant.js';\nexport { default as property } from './property.js';\nexport { default as propertyOf } from './propertyOf.js';\nexport { default as pull } from './pull.js';\nexport { default as pullAll } from './pullAll.js';\nexport { default as pullAllBy } from './pullAllBy.js';\nexport { default as pullAllWith } from './pullAllWith.js';\nexport { default as pullAt } from './pullAt.js';\nexport { default as random } from './random.js';\nexport { default as range } from './range.js';\nexport { default as rangeRight } from './rangeRight.js';\nexport { default as rearg } from './rearg.js';\nexport { default as reduce } from './reduce.js';\nexport { default as reduceRight } from './reduceRight.js';\nexport { default as reject } from './reject.js';\nexport { default as remove } from './remove.js';\nexport { default as repeat } from './repeat.js';\nexport { default as replace } from './replace.js';\nexport { default as rest } from './rest.js';\nexport { default as result } from './result.js';\nexport { default as reverse } from './reverse.js';\nexport { default as round } from './round.js';\nexport { default as sample } from './sample.js';\nexport { default as sampleSize } from './sampleSize.js';\nexport { default as set } from './set.js';\nexport { default as setWith } from './setWith.js';\nexport { default as shuffle } from './shuffle.js';\nexport { default as size } from './size.js';\nexport { default as slice } from './slice.js';\nexport { default as snakeCase } from './snakeCase.js';\nexport { default as some } from './some.js';\nexport { default as sortBy } from './sortBy.js';\nexport { default as sortedIndex } from './sortedIndex.js';\nexport { default as sortedIndexBy } from './sortedIndexBy.js';\nexport { default as sortedIndexOf } from './sortedIndexOf.js';\nexport { default as sortedLastIndex } from './sortedLastIndex.js';\nexport { default as sortedLastIndexBy } from './sortedLastIndexBy.js';\nexport { default as sortedLastIndexOf } from './sortedLastIndexOf.js';\nexport { default as sortedUniq } from './sortedUniq.js';\nexport { default as sortedUniqBy } from './sortedUniqBy.js';\nexport { default as split } from './split.js';\nexport { default as spread } from './spread.js';\nexport { default as startCase } from './startCase.js';\nexport { default as startsWith } from './startsWith.js';\nexport { default as stubArray } from './stubArray.js';\nexport { default as stubFalse } from './stubFalse.js';\nexport { default as stubObject } from './stubObject.js';\nexport { default as stubString } from './stubString.js';\nexport { default as stubTrue } from './stubTrue.js';\nexport { default as subtract } from './subtract.js';\nexport { default as sum } from './sum.js';\nexport { default as sumBy } from './sumBy.js';\nexport { default as tail } from './tail.js';\nexport { default as take } from './take.js';\nexport { default as takeRight } from './takeRight.js';\nexport { default as takeRightWhile } from './takeRightWhile.js';\nexport { default as takeWhile } from './takeWhile.js';\nexport { default as tap } from './tap.js';\nexport { default as template } from './template.js';\nexport { default as templateSettings } from './templateSettings.js';\nexport { default as throttle } from './throttle.js';\nexport { default as thru } from './thru.js';\nexport { default as times } from './times.js';\nexport { default as toArray } from './toArray.js';\nexport { default as toFinite } from './toFinite.js';\nexport { default as toInteger } from './toInteger.js';\nexport { default as toIterator } from './toIterator.js';\nexport { default as toJSON } from './toJSON.js';\nexport { default as toLength } from './toLength.js';\nexport { default as toLower } from './toLower.js';\nexport { default as toNumber } from './toNumber.js';\nexport { default as toPairs } from './toPairs.js';\nexport { default as toPairsIn } from './toPairsIn.js';\nexport { default as toPath } from './toPath.js';\nexport { default as toPlainObject } from './toPlainObject.js';\nexport { default as toSafeInteger } from './toSafeInteger.js';\nexport { default as toString } from './toString.js';\nexport { default as toUpper } from './toUpper.js';\nexport { default as transform } from './transform.js';\nexport { default as trim } from './trim.js';\nexport { default as trimEnd } from './trimEnd.js';\nexport { default as trimStart } from './trimStart.js';\nexport { default as truncate } from './truncate.js';\nexport { default as unary } from './unary.js';\nexport { default as unescape } from './unescape.js';\nexport { default as union } from './union.js';\nexport { default as unionBy } from './unionBy.js';\nexport { default as unionWith } from './unionWith.js';\nexport { default as uniq } from './uniq.js';\nexport { default as uniqBy } from './uniqBy.js';\nexport { default as uniqWith } from './uniqWith.js';\nexport { default as uniqueId } from './uniqueId.js';\nexport { default as unset } from './unset.js';\nexport { default as unzip } from './unzip.js';\nexport { default as unzipWith } from './unzipWith.js';\nexport { default as update } from './update.js';\nexport { default as updateWith } from './updateWith.js';\nexport { default as upperCase } from './upperCase.js';\nexport { default as upperFirst } from './upperFirst.js';\nexport { default as value } from './value.js';\nexport { default as valueOf } from './valueOf.js';\nexport { default as values } from './values.js';\nexport { default as valuesIn } from './valuesIn.js';\nexport { default as without } from './without.js';\nexport { default as words } from './words.js';\nexport { default as wrap } from './wrap.js';\nexport { default as wrapperAt } from './wrapperAt.js';\nexport { default as wrapperChain } from './wrapperChain.js';\nexport { default as wrapperCommit } from './commit.js';\nexport { default as wrapperLodash } from './wrapperLodash.js';\nexport { default as wrapperNext } from './next.js';\nexport { default as wrapperPlant } from './plant.js';\nexport { default as wrapperReverse } from './wrapperReverse.js';\nexport { default as wrapperToIterator } from './toIterator.js';\nexport { default as wrapperValue } from './wrapperValue.js';\nexport { default as xor } from './xor.js';\nexport { default as xorBy } from './xorBy.js';\nexport { default as xorWith } from './xorWith.js';\nexport { default as zip } from './zip.js';\nexport { default as zipObject } from './zipObject.js';\nexport { default as zipObjectDeep } from './zipObjectDeep.js';\nexport { default as zipWith } from './zipWith.js';\nexport { default } from './lodash.default.js';\n","import createCompounder from './_createCompounder.js';\n\n/**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\nvar lowerCase = createCompounder(function(result, word, index) {\n  return result + (index ? ' ' : '') + word.toLowerCase();\n});\n\nexport default lowerCase;\n","import createCaseFirst from './_createCaseFirst.js';\n\n/**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\nvar lowerFirst = createCaseFirst('toLowerCase');\n\nexport default lowerFirst;\n","import baseLt from './_baseLt.js';\nimport createRelationalOperation from './_createRelationalOperation.js';\n\n/**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.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 `value` is less than `other`,\n *  else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\nvar lt = createRelationalOperation(baseLt);\n\nexport default lt;\n","import createRelationalOperation from './_createRelationalOperation.js';\n\n/**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.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 `value` is less than or equal to\n *  `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\nvar lte = createRelationalOperation(function(value, other) {\n  return value <= other;\n});\n\nexport default lte;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n *   return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n *   { 'user': 'barney' },\n *   { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n  var func = isArray(collection) ? arrayMap : baseMap;\n  return func(collection, baseIteratee(iteratee, 3));\n}\n\nexport default map;\n","import baseAssignValue from './_baseAssignValue.js';\nimport baseForOwn from './_baseForOwn.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n *   return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\nfunction mapKeys(object, iteratee) {\n  var result = {};\n  iteratee = baseIteratee(iteratee, 3);\n\n  baseForOwn(object, function(value, key, object) {\n    baseAssignValue(result, iteratee(value, key, object), value);\n  });\n  return result;\n}\n\nexport default mapKeys;\n","import baseAssignValue from './_baseAssignValue.js';\nimport baseForOwn from './_baseForOwn.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n *   'fred':    { 'user': 'fred',    'age': 40 },\n *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n  var result = {};\n  iteratee = baseIteratee(iteratee, 3);\n\n  baseForOwn(object, function(value, key, object) {\n    baseAssignValue(result, key, iteratee(value, key, object));\n  });\n  return result;\n}\n\nexport default mapValues;\n","import baseClone from './_baseClone.js';\nimport baseMatches from './_baseMatches.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1;\n\n/**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * **Note:** Multiple values can be checked by combining several matchers\n * using `_.overSome`\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n *   { 'a': 1, 'b': 2, 'c': 3 },\n *   { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n *\n * // Checking for several possible values\n * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n */\nfunction matches(source) {\n  return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n}\n\nexport default matches;\n","import baseClone from './_baseClone.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1;\n\n/**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * **Note:** Multiple values can be checked by combining several matchers\n * using `_.overSome`\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|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 * @example\n *\n * var objects = [\n *   { 'a': 1, 'b': 2, 'c': 3 },\n *   { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n *\n * // Checking for several possible values\n * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n */\nfunction matchesProperty(path, srcValue) {\n  return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n}\n\nexport default matchesProperty;\n","import add from './add.js';\nimport ceil from './ceil.js';\nimport divide from './divide.js';\nimport floor from './floor.js';\nimport max from './max.js';\nimport maxBy from './maxBy.js';\nimport mean from './mean.js';\nimport meanBy from './meanBy.js';\nimport min from './min.js';\nimport minBy from './minBy.js';\nimport multiply from './multiply.js';\nimport round from './round.js';\nimport subtract from './subtract.js';\nimport sum from './sum.js';\nimport sumBy from './sumBy.js';\n\nexport default {\n  add, ceil, divide, floor, max,\n  maxBy, mean, meanBy, min, minBy,\n  multiply, round, subtract, sum, sumBy\n};\n","export { default as add } from './add.js';\nexport { default as ceil } from './ceil.js';\nexport { default as divide } from './divide.js';\nexport { default as floor } from './floor.js';\nexport { default as max } from './max.js';\nexport { default as maxBy } from './maxBy.js';\nexport { default as mean } from './mean.js';\nexport { default as meanBy } from './meanBy.js';\nexport { default as min } from './min.js';\nexport { default as minBy } from './minBy.js';\nexport { default as multiply } from './multiply.js';\nexport { default as round } from './round.js';\nexport { default as subtract } from './subtract.js';\nexport { default as sum } from './sum.js';\nexport { default as sumBy } from './sumBy.js';\nexport { default } from './math.default.js';\n","import baseExtremum from './_baseExtremum.js';\nimport baseGt from './_baseGt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\nfunction max(array) {\n  return (array && array.length)\n    ? baseExtremum(array, identity, baseGt)\n    : undefined;\n}\n\nexport default max;\n","import baseExtremum from './_baseExtremum.js';\nimport baseGt from './_baseGt.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\nfunction maxBy(array, iteratee) {\n  return (array && array.length)\n    ? baseExtremum(array, baseIteratee(iteratee, 2), baseGt)\n    : undefined;\n}\n\nexport default maxBy;\n","import baseMean from './_baseMean.js';\nimport identity from './identity.js';\n\n/**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\nfunction mean(array) {\n  return baseMean(array, identity);\n}\n\nexport default mean;\n","import baseIteratee from './_baseIteratee.js';\nimport baseMean from './_baseMean.js';\n\n/**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\nfunction meanBy(array, iteratee) {\n  return baseMean(array, baseIteratee(iteratee, 2));\n}\n\nexport default meanBy;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\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 `clear`, `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 != null && 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) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n *   'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n *   'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n *   if (_.isArray(objValue)) {\n *     return objValue.concat(srcValue);\n *   }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\nvar mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n  baseMerge(object, source, srcIndex, customizer);\n});\n\nexport default mergeWith;\n","import baseInvoke from './_baseInvoke.js';\nimport baseRest from './_baseRest.js';\n\n/**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': _.constant(2) } },\n *   { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\nvar method = baseRest(function(path, args) {\n  return function(object) {\n    return baseInvoke(object, path, args);\n  };\n});\n\nexport default method;\n","import baseInvoke from './_baseInvoke.js';\nimport baseRest from './_baseRest.js';\n\n/**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n *     object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\nvar methodOf = baseRest(function(object, args) {\n  return function(path) {\n    return baseInvoke(object, path, args);\n  };\n});\n\nexport default methodOf;\n","import baseExtremum from './_baseExtremum.js';\nimport baseLt from './_baseLt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n  return (array && array.length)\n    ? baseExtremum(array, identity, baseLt)\n    : undefined;\n}\n\nexport default min;\n","import baseExtremum from './_baseExtremum.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseLt from './_baseLt.js';\n\n/**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nfunction minBy(array, iteratee) {\n  return (array && array.length)\n    ? baseExtremum(array, baseIteratee(iteratee, 2), baseLt)\n    : undefined;\n}\n\nexport default minBy;\n","import arrayEach from './_arrayEach.js';\nimport arrayPush from './_arrayPush.js';\nimport baseFunctions from './_baseFunctions.js';\nimport copyArray from './_copyArray.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport keys from './keys.js';\n\n/**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n *   return _.filter(string, function(v) {\n *     return /[aeiou]/i.test(v);\n *   });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\nfunction mixin(object, source, options) {\n  var props = keys(source),\n      methodNames = baseFunctions(source, props);\n\n  var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n      isFunc = isFunction(object);\n\n  arrayEach(methodNames, function(methodName) {\n    var func = source[methodName];\n    object[methodName] = func;\n    if (isFunc) {\n      object.prototype[methodName] = function() {\n        var chainAll = this.__chain__;\n        if (chain || chainAll) {\n          var result = object(this.__wrapped__),\n              actions = result.__actions__ = copyArray(this.__actions__);\n\n          actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n          result.__chain__ = chainAll;\n          return result;\n        }\n        return func.apply(object, arrayPush([this.value()], arguments));\n      };\n    }\n  });\n\n  return object;\n}\n\nexport default mixin;\n","import createMathOperation from './_createMathOperation.js';\n\n/**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\nvar multiply = createMathOperation(function(multiplier, multiplicand) {\n  return multiplier * multiplicand;\n}, 1);\n\nexport default multiply;\n","/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n *   return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\nfunction negate(predicate) {\n  if (typeof predicate != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  return function() {\n    var args = arguments;\n    switch (args.length) {\n      case 0: return !predicate.call(this);\n      case 1: return !predicate.call(this, args[0]);\n      case 2: return !predicate.call(this, args[0], args[1]);\n      case 3: return !predicate.call(this, args[0], args[1], args[2]);\n    }\n    return !predicate.apply(this, args);\n  };\n}\n\nexport default negate;\n","import toArray from './toArray.js';\n\n/**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\nfunction wrapperNext() {\n  if (this.__values__ === undefined) {\n    this.__values__ = toArray(this.value());\n  }\n  var done = this.__index__ >= this.__values__.length,\n      value = done ? undefined : this.__values__[this.__index__++];\n\n  return { 'done': done, 'value': value };\n}\n\nexport default wrapperNext;\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\nexport default noop;\n","import root from './_root.js';\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\nexport default now;\n","import baseNth from './_baseNth.js';\nimport toInteger from './toInteger.js';\n\n/**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\nfunction nth(array, n) {\n  return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n}\n\nexport default nth;\n","import baseNth from './_baseNth.js';\nimport baseRest from './_baseRest.js';\nimport toInteger from './toInteger.js';\n\n/**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\nfunction nthArg(n) {\n  n = toInteger(n);\n  return baseRest(function(args) {\n    return baseNth(args, n);\n  });\n}\n\nexport default nthArg;\n","import clamp from './clamp.js';\nimport inRange from './inRange.js';\nimport random from './random.js';\n\nexport default {\n  clamp, inRange, random\n};\n","export { default as clamp } from './clamp.js';\nexport { default as inRange } from './inRange.js';\nexport { default as random } from './random.js';\nexport { default } from './number.default.js';\n","import assign from './assign.js';\nimport assignIn from './assignIn.js';\nimport assignInWith from './assignInWith.js';\nimport assignWith from './assignWith.js';\nimport at from './at.js';\nimport create from './create.js';\nimport defaults from './defaults.js';\nimport defaultsDeep from './defaultsDeep.js';\nimport entries from './entries.js';\nimport entriesIn from './entriesIn.js';\nimport extend from './extend.js';\nimport extendWith from './extendWith.js';\nimport findKey from './findKey.js';\nimport findLastKey from './findLastKey.js';\nimport forIn from './forIn.js';\nimport forInRight from './forInRight.js';\nimport forOwn from './forOwn.js';\nimport forOwnRight from './forOwnRight.js';\nimport functions from './functions.js';\nimport functionsIn from './functionsIn.js';\nimport get from './get.js';\nimport has from './has.js';\nimport hasIn from './hasIn.js';\nimport invert from './invert.js';\nimport invertBy from './invertBy.js';\nimport invoke from './invoke.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\nimport mapKeys from './mapKeys.js';\nimport mapValues from './mapValues.js';\nimport merge from './merge.js';\nimport mergeWith from './mergeWith.js';\nimport omit from './omit.js';\nimport omitBy from './omitBy.js';\nimport pick from './pick.js';\nimport pickBy from './pickBy.js';\nimport result from './result.js';\nimport set from './set.js';\nimport setWith from './setWith.js';\nimport toPairs from './toPairs.js';\nimport toPairsIn from './toPairsIn.js';\nimport transform from './transform.js';\nimport unset from './unset.js';\nimport update from './update.js';\nimport updateWith from './updateWith.js';\nimport values from './values.js';\nimport valuesIn from './valuesIn.js';\n\nexport default {\n  assign, assignIn, assignInWith, assignWith, at,\n  create, defaults, defaultsDeep, entries, entriesIn,\n  extend, extendWith, findKey, findLastKey, forIn,\n  forInRight, forOwn, forOwnRight, functions, functionsIn,\n  get, has, hasIn, invert, invertBy,\n  invoke, keys, keysIn, mapKeys, mapValues,\n  merge, mergeWith, omit, omitBy, pick,\n  pickBy, result, set, setWith, toPairs,\n  toPairsIn, transform, unset, update, updateWith,\n  values, valuesIn\n};\n","export { default as assign } from './assign.js';\nexport { default as assignIn } from './assignIn.js';\nexport { default as assignInWith } from './assignInWith.js';\nexport { default as assignWith } from './assignWith.js';\nexport { default as at } from './at.js';\nexport { default as create } from './create.js';\nexport { default as defaults } from './defaults.js';\nexport { default as defaultsDeep } from './defaultsDeep.js';\nexport { default as entries } from './entries.js';\nexport { default as entriesIn } from './entriesIn.js';\nexport { default as extend } from './extend.js';\nexport { default as extendWith } from './extendWith.js';\nexport { default as findKey } from './findKey.js';\nexport { default as findLastKey } from './findLastKey.js';\nexport { default as forIn } from './forIn.js';\nexport { default as forInRight } from './forInRight.js';\nexport { default as forOwn } from './forOwn.js';\nexport { default as forOwnRight } from './forOwnRight.js';\nexport { default as functions } from './functions.js';\nexport { default as functionsIn } from './functionsIn.js';\nexport { default as get } from './get.js';\nexport { default as has } from './has.js';\nexport { default as hasIn } from './hasIn.js';\nexport { default as invert } from './invert.js';\nexport { default as invertBy } from './invertBy.js';\nexport { default as invoke } from './invoke.js';\nexport { default as keys } from './keys.js';\nexport { default as keysIn } from './keysIn.js';\nexport { default as mapKeys } from './mapKeys.js';\nexport { default as mapValues } from './mapValues.js';\nexport { default as merge } from './merge.js';\nexport { default as mergeWith } from './mergeWith.js';\nexport { default as omit } from './omit.js';\nexport { default as omitBy } from './omitBy.js';\nexport { default as pick } from './pick.js';\nexport { default as pickBy } from './pickBy.js';\nexport { default as result } from './result.js';\nexport { default as set } from './set.js';\nexport { default as setWith } from './setWith.js';\nexport { default as toPairs } from './toPairs.js';\nexport { default as toPairsIn } from './toPairsIn.js';\nexport { default as transform } from './transform.js';\nexport { default as unset } from './unset.js';\nexport { default as update } from './update.js';\nexport { default as updateWith } from './updateWith.js';\nexport { default as values } from './values.js';\nexport { default as valuesIn } from './valuesIn.js';\nexport { default } from './object.default.js';\n","import arrayMap from './_arrayMap.js';\nimport baseClone from './_baseClone.js';\nimport baseUnset from './_baseUnset.js';\nimport castPath from './_castPath.js';\nimport copyObject from './_copyObject.js';\nimport customOmitClone from './_customOmitClone.js';\nimport flatRest from './_flatRest.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n  var result = {};\n  if (object == null) {\n    return result;\n  }\n  var isDeep = false;\n  paths = arrayMap(paths, function(path) {\n    path = castPath(path, object);\n    isDeep || (isDeep = path.length > 1);\n    return path;\n  });\n  copyObject(object, getAllKeysIn(object), result);\n  if (isDeep) {\n    result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n  }\n  var length = paths.length;\n  while (length--) {\n    baseUnset(result, paths[length]);\n  }\n  return result;\n});\n\nexport default omit;\n","import baseIteratee from './_baseIteratee.js';\nimport negate from './negate.js';\nimport pickBy from './pickBy.js';\n\n/**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\nfunction omitBy(object, predicate) {\n  return pickBy(object, negate(baseIteratee(predicate)));\n}\n\nexport default omitBy;\n","import before from './before.js';\n\n/**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\nfunction once(func) {\n  return before(2, func);\n}\n\nexport default once;\n","import baseOrderBy from './_baseOrderBy.js';\nimport isArray from './isArray.js';\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\nexport default orderBy;\n","import arrayMap from './_arrayMap.js';\nimport createOver from './_createOver.js';\n\n/**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n *  The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\nvar over = createOver(arrayMap);\n\nexport default over;\n","import apply from './_apply.js';\nimport arrayMap from './_arrayMap.js';\nimport baseFlatten from './_baseFlatten.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseRest from './_baseRest.js';\nimport baseUnary from './_baseUnary.js';\nimport castRest from './_castRest.js';\nimport isArray from './isArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n *  The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n *   return n * 2;\n * }\n *\n * function square(n) {\n *   return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n *   return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\nvar overArgs = castRest(function(func, transforms) {\n  transforms = (transforms.length == 1 && isArray(transforms[0]))\n    ? arrayMap(transforms[0], baseUnary(baseIteratee))\n    : arrayMap(baseFlatten(transforms, 1), baseUnary(baseIteratee));\n\n  var funcsLength = transforms.length;\n  return baseRest(function(args) {\n    var index = -1,\n        length = nativeMin(args.length, funcsLength);\n\n    while (++index < length) {\n      args[index] = transforms[index].call(this, args[index]);\n    }\n    return apply(func, this, args);\n  });\n});\n\nexport default overArgs;\n","import arrayEvery from './_arrayEvery.js';\nimport createOver from './_createOver.js';\n\n/**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * Following shorthands are possible for providing predicates.\n * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n *  The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\nvar overEvery = createOver(arrayEvery);\n\nexport default overEvery;\n","import arraySome from './_arraySome.js';\nimport createOver from './_createOver.js';\n\n/**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * Following shorthands are possible for providing predicates.\n * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n *  The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n *\n * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n */\nvar overSome = createOver(arraySome);\n\nexport default overSome;\n","import createPadding from './_createPadding.js';\nimport stringSize from './_stringSize.js';\nimport toInteger from './toInteger.js';\nimport toString from './toString.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n    nativeFloor = Math.floor;\n\n/**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => '  abc   '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\nfunction pad(string, length, chars) {\n  string = toString(string);\n  length = toInteger(length);\n\n  var strLength = length ? stringSize(string) : 0;\n  if (!length || strLength >= length) {\n    return string;\n  }\n  var mid = (length - strLength) / 2;\n  return (\n    createPadding(nativeFloor(mid), chars) +\n    string +\n    createPadding(nativeCeil(mid), chars)\n  );\n}\n\nexport default pad;\n","import createPadding from './_createPadding.js';\nimport stringSize from './_stringSize.js';\nimport toInteger from './toInteger.js';\nimport toString from './toString.js';\n\n/**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc   '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\nfunction padEnd(string, length, chars) {\n  string = toString(string);\n  length = toInteger(length);\n\n  var strLength = length ? stringSize(string) : 0;\n  return (length && strLength < length)\n    ? (string + createPadding(length - strLength, chars))\n    : string;\n}\n\nexport default padEnd;\n","import createPadding from './_createPadding.js';\nimport stringSize from './_stringSize.js';\nimport toInteger from './toInteger.js';\nimport toString from './toString.js';\n\n/**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => '   abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\nfunction padStart(string, length, chars) {\n  string = toString(string);\n  length = toInteger(length);\n\n  var strLength = length ? stringSize(string) : 0;\n  return (length && strLength < length)\n    ? (createPadding(length - strLength, chars) + string)\n    : string;\n}\n\nexport default padStart;\n","import root from './_root.js';\nimport toString from './toString.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeParseInt = root.parseInt;\n\n/**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\nfunction parseInt(string, radix, guard) {\n  if (guard || radix == null) {\n    radix = 0;\n  } else if (radix) {\n    radix = +radix;\n  }\n  return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n}\n\nexport default parseInt;\n","import baseRest from './_baseRest.js';\nimport createWrap from './_createWrap.js';\nimport getHolder from './_getHolder.js';\nimport replaceHolders from './_replaceHolders.js';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_PARTIAL_FLAG = 32;\n\n/**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n *   return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\nvar partial = baseRest(function(func, partials) {\n  var holders = replaceHolders(partials, getHolder(partial));\n  return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n});\n\n// Assign default placeholders.\npartial.placeholder = {};\n\nexport default partial;\n","import baseRest from './_baseRest.js';\nimport createWrap from './_createWrap.js';\nimport getHolder from './_getHolder.js';\nimport replaceHolders from './_replaceHolders.js';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_PARTIAL_RIGHT_FLAG = 64;\n\n/**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n *   return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\nvar partialRight = baseRest(function(func, partials) {\n  var holders = replaceHolders(partials, getHolder(partialRight));\n  return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n});\n\n// Assign default placeholders.\npartialRight.placeholder = {};\n\nexport default partialRight;\n","import createAggregator from './_createAggregator.js';\n\n/**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'age': 36, 'active': false },\n *   { 'user': 'fred',    'age': 40, 'active': true },\n *   { 'user': 'pebbles', 'age': 1,  'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\nvar partition = createAggregator(function(result, value, key) {\n  result[key ? 0 : 1].push(value);\n}, function() { return [[], []]; });\n\nexport default partition;\n","import basePick from './_basePick.js';\nimport flatRest from './_flatRest.js';\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n  return object == null ? {} : basePick(object, paths);\n});\n\nexport default pick;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport basePickBy from './_basePickBy.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\nfunction pickBy(object, predicate) {\n  if (object == null) {\n    return {};\n  }\n  var props = arrayMap(getAllKeysIn(object), function(prop) {\n    return [prop];\n  });\n  predicate = baseIteratee(predicate);\n  return basePickBy(object, props, function(value, path) {\n    return predicate(value, path[0]);\n  });\n}\n\nexport default pickBy;\n","import baseLodash from './_baseLodash.js';\nimport wrapperClone from './_wrapperClone.js';\n\n/**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n *   return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\nfunction wrapperPlant(value) {\n  var result,\n      parent = this;\n\n  while (parent instanceof baseLodash) {\n    var clone = wrapperClone(parent);\n    clone.__index__ = 0;\n    clone.__values__ = undefined;\n    if (result) {\n      previous.__wrapped__ = clone;\n    } else {\n      result = clone;\n    }\n    var previous = clone;\n    parent = parent.__wrapped__;\n  }\n  previous.__wrapped__ = value;\n  return result;\n}\n\nexport default wrapperPlant;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\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\nexport default property;\n","import baseGet from './_baseGet.js';\n\n/**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n *     object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\nfunction propertyOf(object) {\n  return function(path) {\n    return object == null ? undefined : baseGet(object, path);\n  };\n}\n\nexport default propertyOf;\n","import baseRest from './_baseRest.js';\nimport pullAll from './pullAll.js';\n\n/**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\nvar pull = baseRest(pullAll);\n\nexport default pull;\n","import basePullAll from './_basePullAll.js';\n\n/**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\nfunction pullAll(array, values) {\n  return (array && array.length && values && values.length)\n    ? basePullAll(array, values)\n    : array;\n}\n\nexport default pullAll;\n","import baseIteratee from './_baseIteratee.js';\nimport basePullAll from './_basePullAll.js';\n\n/**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\nfunction pullAllBy(array, values, iteratee) {\n  return (array && array.length && values && values.length)\n    ? basePullAll(array, values, baseIteratee(iteratee, 2))\n    : array;\n}\n\nexport default pullAllBy;\n","import basePullAll from './_basePullAll.js';\n\n/**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\nfunction pullAllWith(array, values, comparator) {\n  return (array && array.length && values && values.length)\n    ? basePullAll(array, values, undefined, comparator)\n    : array;\n}\n\nexport default pullAllWith;\n","import arrayMap from './_arrayMap.js';\nimport baseAt from './_baseAt.js';\nimport basePullAt from './_basePullAt.js';\nimport compareAscending from './_compareAscending.js';\nimport flatRest from './_flatRest.js';\nimport isIndex from './_isIndex.js';\n\n/**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\nvar pullAt = flatRest(function(array, indexes) {\n  var length = array == null ? 0 : array.length,\n      result = baseAt(array, indexes);\n\n  basePullAt(array, arrayMap(indexes, function(index) {\n    return isIndex(index, length) ? +index : index;\n  }).sort(compareAscending));\n\n  return result;\n});\n\nexport default pullAt;\n","import baseRandom from './_baseRandom.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport toFinite from './toFinite.js';\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseFloat = parseFloat;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min,\n    nativeRandom = Math.random;\n\n/**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\nfunction random(lower, upper, floating) {\n  if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n    upper = floating = undefined;\n  }\n  if (floating === undefined) {\n    if (typeof upper == 'boolean') {\n      floating = upper;\n      upper = undefined;\n    }\n    else if (typeof lower == 'boolean') {\n      floating = lower;\n      lower = undefined;\n    }\n  }\n  if (lower === undefined && upper === undefined) {\n    lower = 0;\n    upper = 1;\n  }\n  else {\n    lower = toFinite(lower);\n    if (upper === undefined) {\n      upper = lower;\n      lower = 0;\n    } else {\n      upper = toFinite(upper);\n    }\n  }\n  if (lower > upper) {\n    var temp = lower;\n    lower = upper;\n    upper = temp;\n  }\n  if (floating || lower % 1 || upper % 1) {\n    var rand = nativeRandom();\n    return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n  }\n  return baseRandom(lower, upper);\n}\n\nexport default random;\n","import createRange from './_createRange.js';\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nexport default range;\n","import createRange from './_createRange.js';\n\n/**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\nvar rangeRight = createRange(true);\n\nexport default rangeRight;\n","import createWrap from './_createWrap.js';\nimport flatRest from './_flatRest.js';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_REARG_FLAG = 256;\n\n/**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n *   return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\nvar rearg = flatRest(function(func, indexes) {\n  return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n});\n\nexport default rearg;\n","import arrayReduce from './_arrayReduce.js';\nimport baseEach from './_baseEach.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseReduce from './_baseReduce.js';\nimport isArray from './isArray.js';\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n *   return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n *   (result[value] || (result[value] = [])).push(key);\n *   return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n  var func = isArray(collection) ? arrayReduce : baseReduce,\n      initAccum = arguments.length < 3;\n\n  return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nexport default reduce;\n","import arrayReduceRight from './_arrayReduceRight.js';\nimport baseEachRight from './_baseEachRight.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseReduce from './_baseReduce.js';\nimport isArray from './isArray.js';\n\n/**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n *   return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\nfunction reduceRight(collection, iteratee, accumulator) {\n  var func = isArray(collection) ? arrayReduceRight : baseReduce,\n      initAccum = arguments.length < 3;\n\n  return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n}\n\nexport default reduceRight;\n","import arrayFilter from './_arrayFilter.js';\nimport baseFilter from './_baseFilter.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\nimport negate from './negate.js';\n\n/**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n *   { 'user': 'barney', 'age': 36, 'active': false },\n *   { 'user': 'fred',   'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\nfunction reject(collection, predicate) {\n  var func = isArray(collection) ? arrayFilter : baseFilter;\n  return func(collection, negate(baseIteratee(predicate, 3)));\n}\n\nexport default reject;\n","import baseIteratee from './_baseIteratee.js';\nimport basePullAt from './_basePullAt.js';\n\n/**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n *   return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\nfunction remove(array, predicate) {\n  var result = [];\n  if (!(array && array.length)) {\n    return result;\n  }\n  var index = -1,\n      indexes = [],\n      length = array.length;\n\n  predicate = baseIteratee(predicate, 3);\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result.push(value);\n      indexes.push(index);\n    }\n  }\n  basePullAt(array, indexes);\n  return result;\n}\n\nexport default remove;\n","import baseRepeat from './_baseRepeat.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport toInteger from './toInteger.js';\nimport toString from './toString.js';\n\n/**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\nfunction repeat(string, n, guard) {\n  if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n    n = 1;\n  } else {\n    n = toInteger(n);\n  }\n  return baseRepeat(toString(string), n);\n}\n\nexport default repeat;\n","import toString from './toString.js';\n\n/**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\nfunction replace() {\n  var args = arguments,\n      string = toString(args[0]);\n\n  return args.length < 3 ? string : string.replace(args[1], args[2]);\n}\n\nexport default replace;\n","import baseRest from './_baseRest.js';\nimport toInteger from './toInteger.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\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 * @example\n *\n * var say = _.rest(function(what, names) {\n *   return what + ' ' + _.initial(names).join(', ') +\n *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\nfunction rest(func, start) {\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  start = start === undefined ? start : toInteger(start);\n  return baseRest(func, start);\n}\n\nexport default rest;\n","import castPath from './_castPath.js';\nimport isFunction from './isFunction.js';\nimport toKey from './_toKey.js';\n\n/**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\nfunction result(object, path, defaultValue) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length;\n\n  // Ensure the loop is entered when path is empty.\n  if (!length) {\n    length = 1;\n    object = undefined;\n  }\n  while (++index < length) {\n    var value = object == null ? undefined : object[toKey(path[index])];\n    if (value === undefined) {\n      index = length;\n      value = defaultValue;\n    }\n    object = isFunction(value) ? value.call(object) : value;\n  }\n  return object;\n}\n\nexport default result;\n","/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeReverse = arrayProto.reverse;\n\n/**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\nfunction reverse(array) {\n  return array == null ? array : nativeReverse.call(array);\n}\n\nexport default reverse;\n","import createRound from './_createRound.js';\n\n/**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\nvar round = createRound('round');\n\nexport default round;\n","import arraySample from './_arraySample.js';\nimport baseSample from './_baseSample.js';\nimport isArray from './isArray.js';\n\n/**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\nfunction sample(collection) {\n  var func = isArray(collection) ? arraySample : baseSample;\n  return func(collection);\n}\n\nexport default sample;\n","import arraySampleSize from './_arraySampleSize.js';\nimport baseSampleSize from './_baseSampleSize.js';\nimport isArray from './isArray.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport toInteger from './toInteger.js';\n\n/**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\nfunction sampleSize(collection, n, guard) {\n  if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n    n = 1;\n  } else {\n    n = toInteger(n);\n  }\n  var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n  return func(collection, n);\n}\n\nexport default sampleSize;\n","import at from './wrapperAt.js';\nimport chain from './chain.js';\nimport commit from './commit.js';\nimport lodash from './wrapperLodash.js';\nimport next from './next.js';\nimport plant from './plant.js';\nimport reverse from './wrapperReverse.js';\nimport tap from './tap.js';\nimport thru from './thru.js';\nimport toIterator from './toIterator.js';\nimport toJSON from './toJSON.js';\nimport value from './wrapperValue.js';\nimport valueOf from './valueOf.js';\nimport wrapperChain from './wrapperChain.js';\n\nexport default {\n  at, chain, commit, lodash, next,\n  plant, reverse, tap, thru, toIterator,\n  toJSON, value, valueOf, wrapperChain\n};\n","export { default as at } from './wrapperAt.js';\nexport { default as chain } from './chain.js';\nexport { default as commit } from './commit.js';\nexport { default as lodash } from './wrapperLodash.js';\nexport { default as next } from './next.js';\nexport { default as plant } from './plant.js';\nexport { default as reverse } from './wrapperReverse.js';\nexport { default as tap } from './tap.js';\nexport { default as thru } from './thru.js';\nexport { default as toIterator } from './toIterator.js';\nexport { default as toJSON } from './toJSON.js';\nexport { default as value } from './wrapperValue.js';\nexport { default as valueOf } from './valueOf.js';\nexport { default as wrapperChain } from './wrapperChain.js';\nexport { default } from './seq.default.js';\n","import baseSet from './_baseSet.js';\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n  return object == null ? object : baseSet(object, path, value);\n}\n\nexport default set;\n","import baseSet from './_baseSet.js';\n\n/**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\nfunction setWith(object, path, value, customizer) {\n  customizer = typeof customizer == 'function' ? customizer : undefined;\n  return object == null ? object : baseSet(object, path, value, customizer);\n}\n\nexport default setWith;\n","import arrayShuffle from './_arrayShuffle.js';\nimport baseShuffle from './_baseShuffle.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\nfunction shuffle(collection) {\n  var func = isArray(collection) ? arrayShuffle : baseShuffle;\n  return func(collection);\n}\n\nexport default shuffle;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArrayLike from './isArrayLike.js';\nimport isString from './isString.js';\nimport stringSize from './_stringSize.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\nfunction size(collection) {\n  if (collection == null) {\n    return 0;\n  }\n  if (isArrayLike(collection)) {\n    return isString(collection) ? stringSize(collection) : collection.length;\n  }\n  var tag = getTag(collection);\n  if (tag == mapTag || tag == setTag) {\n    return collection.size;\n  }\n  return baseKeys(collection).length;\n}\n\nexport default size;\n","import baseSlice from './_baseSlice.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport toInteger from './toInteger.js';\n\n/**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction slice(array, start, end) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return [];\n  }\n  if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n    start = 0;\n    end = length;\n  }\n  else {\n    start = start == null ? 0 : toInteger(start);\n    end = end === undefined ? length : toInteger(end);\n  }\n  return baseSlice(array, start, end);\n}\n\nexport default slice;\n","import createCompounder from './_createCompounder.js';\n\n/**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\nvar snakeCase = createCompounder(function(result, word, index) {\n  return result + (index ? '_' : '') + word.toLowerCase();\n});\n\nexport default snakeCase;\n","import arraySome from './_arraySome.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseSome from './_baseSome.js';\nimport isArray from './isArray.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n *   { 'user': 'barney', 'active': true },\n *   { 'user': 'fred',   'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\nfunction some(collection, predicate, guard) {\n  var func = isArray(collection) ? arraySome : baseSome;\n  if (guard && isIterateeCall(collection, predicate, guard)) {\n    predicate = undefined;\n  }\n  return func(collection, baseIteratee(predicate, 3));\n}\n\nexport default some;\n","import baseFlatten from './_baseFlatten.js';\nimport baseOrderBy from './_baseOrderBy.js';\nimport baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n *  The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n *   { 'user': 'fred',   'age': 48 },\n *   { 'user': 'barney', 'age': 36 },\n *   { 'user': 'fred',   'age': 30 },\n *   { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n  if (collection == null) {\n    return [];\n  }\n  var length = iteratees.length;\n  if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n    iteratees = [];\n  } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n    iteratees = [iteratees[0]];\n  }\n  return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nexport default sortBy;\n","import baseSortedIndex from './_baseSortedIndex.js';\n\n/**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n *  into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\nfunction sortedIndex(array, value) {\n  return baseSortedIndex(array, value);\n}\n\nexport default sortedIndex;\n","import baseIteratee from './_baseIteratee.js';\nimport baseSortedIndexBy from './_baseSortedIndexBy.js';\n\n/**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. 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 sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n *  into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\nfunction sortedIndexBy(array, value, iteratee) {\n  return baseSortedIndexBy(array, value, baseIteratee(iteratee, 2));\n}\n\nexport default sortedIndexBy;\n","import baseSortedIndex from './_baseSortedIndex.js';\nimport eq from './eq.js';\n\n/**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\nfunction sortedIndexOf(array, value) {\n  var length = array == null ? 0 : array.length;\n  if (length) {\n    var index = baseSortedIndex(array, value);\n    if (index < length && eq(array[index], value)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nexport default sortedIndexOf;\n","import baseSortedIndex from './_baseSortedIndex.js';\n\n/**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n *  into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\nfunction sortedLastIndex(array, value) {\n  return baseSortedIndex(array, value, true);\n}\n\nexport default sortedLastIndex;\n","import baseIteratee from './_baseIteratee.js';\nimport baseSortedIndexBy from './_baseSortedIndexBy.js';\n\n/**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. 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 sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n *  into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\nfunction sortedLastIndexBy(array, value, iteratee) {\n  return baseSortedIndexBy(array, value, baseIteratee(iteratee, 2), true);\n}\n\nexport default sortedLastIndexBy;\n","import baseSortedIndex from './_baseSortedIndex.js';\nimport eq from './eq.js';\n\n/**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\nfunction sortedLastIndexOf(array, value) {\n  var length = array == null ? 0 : array.length;\n  if (length) {\n    var index = baseSortedIndex(array, value, true) - 1;\n    if (eq(array[index], value)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nexport default sortedLastIndexOf;\n","import baseSortedUniq from './_baseSortedUniq.js';\n\n/**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\nfunction sortedUniq(array) {\n  return (array && array.length)\n    ? baseSortedUniq(array)\n    : [];\n}\n\nexport default sortedUniq;\n","import baseIteratee from './_baseIteratee.js';\nimport baseSortedUniq from './_baseSortedUniq.js';\n\n/**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\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] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\nfunction sortedUniqBy(array, iteratee) {\n  return (array && array.length)\n    ? baseSortedUniq(array, baseIteratee(iteratee, 2))\n    : [];\n}\n\nexport default sortedUniqBy;\n","import baseToString from './_baseToString.js';\nimport castSlice from './_castSlice.js';\nimport hasUnicode from './_hasUnicode.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport isRegExp from './isRegExp.js';\nimport stringToArray from './_stringToArray.js';\nimport toString from './toString.js';\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295;\n\n/**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\nfunction split(string, separator, limit) {\n  if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n    separator = limit = undefined;\n  }\n  limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n  if (!limit) {\n    return [];\n  }\n  string = toString(string);\n  if (string && (\n        typeof separator == 'string' ||\n        (separator != null && !isRegExp(separator))\n      )) {\n    separator = baseToString(separator);\n    if (!separator && hasUnicode(string)) {\n      return castSlice(stringToArray(string), 0, limit);\n    }\n  }\n  return string.split(separator, limit);\n}\n\nexport default split;\n","import apply from './_apply.js';\nimport arrayPush from './_arrayPush.js';\nimport baseRest from './_baseRest.js';\nimport castSlice from './_castSlice.js';\nimport toInteger from './toInteger.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n *   return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n *   Promise.resolve(40),\n *   Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n *   return x + y;\n * }));\n * // => a Promise of 76\n */\nfunction spread(func, start) {\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  start = start == null ? 0 : nativeMax(toInteger(start), 0);\n  return baseRest(function(args) {\n    var array = args[start],\n        otherArgs = castSlice(args, 0, start);\n\n    if (array) {\n      arrayPush(otherArgs, array);\n    }\n    return apply(func, this, otherArgs);\n  });\n}\n\nexport default spread;\n","import createCompounder from './_createCompounder.js';\nimport upperFirst from './upperFirst.js';\n\n/**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\nvar startCase = createCompounder(function(result, word, index) {\n  return result + (index ? ' ' : '') + upperFirst(word);\n});\n\nexport default startCase;\n","import baseClamp from './_baseClamp.js';\nimport baseToString from './_baseToString.js';\nimport toInteger from './toInteger.js';\nimport toString from './toString.js';\n\n/**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n *  else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\nfunction startsWith(string, target, position) {\n  string = toString(string);\n  position = position == null\n    ? 0\n    : baseClamp(toInteger(position), 0, string.length);\n\n  target = baseToString(target);\n  return string.slice(position, position + target.length) == target;\n}\n\nexport default startsWith;\n","import camelCase from './camelCase.js';\nimport capitalize from './capitalize.js';\nimport deburr from './deburr.js';\nimport endsWith from './endsWith.js';\nimport escape from './escape.js';\nimport escapeRegExp from './escapeRegExp.js';\nimport kebabCase from './kebabCase.js';\nimport lowerCase from './lowerCase.js';\nimport lowerFirst from './lowerFirst.js';\nimport pad from './pad.js';\nimport padEnd from './padEnd.js';\nimport padStart from './padStart.js';\nimport parseInt from './parseInt.js';\nimport repeat from './repeat.js';\nimport replace from './replace.js';\nimport snakeCase from './snakeCase.js';\nimport split from './split.js';\nimport startCase from './startCase.js';\nimport startsWith from './startsWith.js';\nimport template from './template.js';\nimport templateSettings from './templateSettings.js';\nimport toLower from './toLower.js';\nimport toUpper from './toUpper.js';\nimport trim from './trim.js';\nimport trimEnd from './trimEnd.js';\nimport trimStart from './trimStart.js';\nimport truncate from './truncate.js';\nimport unescape from './unescape.js';\nimport upperCase from './upperCase.js';\nimport upperFirst from './upperFirst.js';\nimport words from './words.js';\n\nexport default {\n  camelCase, capitalize, deburr, endsWith, escape,\n  escapeRegExp, kebabCase, lowerCase, lowerFirst, pad,\n  padEnd, padStart, parseInt, repeat, replace,\n  snakeCase, split, startCase, startsWith, template,\n  templateSettings, toLower, toUpper, trim, trimEnd,\n  trimStart, truncate, unescape, upperCase, upperFirst,\n  words\n};\n","export { default as camelCase } from './camelCase.js';\nexport { default as capitalize } from './capitalize.js';\nexport { default as deburr } from './deburr.js';\nexport { default as endsWith } from './endsWith.js';\nexport { default as escape } from './escape.js';\nexport { default as escapeRegExp } from './escapeRegExp.js';\nexport { default as kebabCase } from './kebabCase.js';\nexport { default as lowerCase } from './lowerCase.js';\nexport { default as lowerFirst } from './lowerFirst.js';\nexport { default as pad } from './pad.js';\nexport { default as padEnd } from './padEnd.js';\nexport { default as padStart } from './padStart.js';\nexport { default as parseInt } from './parseInt.js';\nexport { default as repeat } from './repeat.js';\nexport { default as replace } from './replace.js';\nexport { default as snakeCase } from './snakeCase.js';\nexport { default as split } from './split.js';\nexport { default as startCase } from './startCase.js';\nexport { default as startsWith } from './startsWith.js';\nexport { default as template } from './template.js';\nexport { default as templateSettings } from './templateSettings.js';\nexport { default as toLower } from './toLower.js';\nexport { default as toUpper } from './toUpper.js';\nexport { default as trim } from './trim.js';\nexport { default as trimEnd } from './trimEnd.js';\nexport { default as trimStart } from './trimStart.js';\nexport { default as truncate } from './truncate.js';\nexport { default as unescape } from './unescape.js';\nexport { default as upperCase } from './upperCase.js';\nexport { default as upperFirst } from './upperFirst.js';\nexport { default as words } from './words.js';\nexport { default } from './string.default.js';\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nexport default stubArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nexport default stubFalse;\n","/**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\nfunction stubObject() {\n  return {};\n}\n\nexport default stubObject;\n","/**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\nfunction stubString() {\n  return '';\n}\n\nexport default stubString;\n","/**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\nfunction stubTrue() {\n  return true;\n}\n\nexport default stubTrue;\n","import createMathOperation from './_createMathOperation.js';\n\n/**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\nvar subtract = createMathOperation(function(minuend, subtrahend) {\n  return minuend - subtrahend;\n}, 0);\n\nexport default subtract;\n","import baseSum from './_baseSum.js';\nimport identity from './identity.js';\n\n/**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\nfunction sum(array) {\n  return (array && array.length)\n    ? baseSum(array, identity)\n    : 0;\n}\n\nexport default sum;\n","import baseIteratee from './_baseIteratee.js';\nimport baseSum from './_baseSum.js';\n\n/**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\nfunction sumBy(array, iteratee) {\n  return (array && array.length)\n    ? baseSum(array, baseIteratee(iteratee, 2))\n    : 0;\n}\n\nexport default sumBy;\n","import baseSlice from './_baseSlice.js';\n\n/**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\nfunction tail(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseSlice(array, 1, length) : [];\n}\n\nexport default tail;\n","import baseSlice from './_baseSlice.js';\nimport toInteger from './toInteger.js';\n\n/**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\nfunction take(array, n, guard) {\n  if (!(array && array.length)) {\n    return [];\n  }\n  n = (guard || n === undefined) ? 1 : toInteger(n);\n  return baseSlice(array, 0, n < 0 ? 0 : n);\n}\n\nexport default take;\n","import baseSlice from './_baseSlice.js';\nimport toInteger from './toInteger.js';\n\n/**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\nfunction takeRight(array, n, guard) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return [];\n  }\n  n = (guard || n === undefined) ? 1 : toInteger(n);\n  n = length - n;\n  return baseSlice(array, n < 0 ? 0 : n, length);\n}\n\nexport default takeRight;\n","import baseIteratee from './_baseIteratee.js';\nimport baseWhile from './_baseWhile.js';\n\n/**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'active': true },\n *   { 'user': 'fred',    'active': false },\n *   { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\nfunction takeRightWhile(array, predicate) {\n  return (array && array.length)\n    ? baseWhile(array, baseIteratee(predicate, 3), false, true)\n    : [];\n}\n\nexport default takeRightWhile;\n","import baseIteratee from './_baseIteratee.js';\nimport baseWhile from './_baseWhile.js';\n\n/**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'active': false },\n *   { 'user': 'fred',    'active': false },\n *   { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\nfunction takeWhile(array, predicate) {\n  return (array && array.length)\n    ? baseWhile(array, baseIteratee(predicate, 3))\n    : [];\n}\n\nexport default takeWhile;\n","/**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n *  .tap(function(array) {\n *    // Mutate input array.\n *    array.pop();\n *  })\n *  .reverse()\n *  .value();\n * // => [2, 1]\n */\nfunction tap(value, interceptor) {\n  interceptor(value);\n  return value;\n}\n\nexport default tap;\n","import assignInWith from './assignInWith.js';\nimport attempt from './attempt.js';\nimport baseValues from './_baseValues.js';\nimport customDefaultsAssignIn from './_customDefaultsAssignIn.js';\nimport escapeStringChar from './_escapeStringChar.js';\nimport isError from './isError.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport keys from './keys.js';\nimport reInterpolate from './_reInterpolate.js';\nimport templateSettings from './templateSettings.js';\nimport toString from './toString.js';\n\n/** Error message constants. */\nvar INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n/** Used to match empty string literals in compiled template source. */\nvar reEmptyStringLeading = /\\b__p \\+= '';/g,\n    reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n    reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n/**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\nvar reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n/**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\nvar reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n/** Used to ensure capturing order of template delimiters. */\nvar reNoMatch = /($^)/;\n\n/** Used to match unescaped characters in compiled string literals. */\nvar reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\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 * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n *  The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n *  The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n *  An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n *  The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='templateSources[n]']\n *  The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n *  The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b>&lt;script&gt;</b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * //   var __t, __p = '';\n * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * //   return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n *   var JST = {\\\n *     \"main\": ' + _.template(mainText).source + '\\\n *   };\\\n * ');\n */\nfunction template(string, options, guard) {\n  // Based on John Resig's `tmpl` implementation\n  // (http://ejohn.org/blog/javascript-micro-templating/)\n  // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n  var settings = templateSettings.imports._.templateSettings || templateSettings;\n\n  if (guard && isIterateeCall(string, options, guard)) {\n    options = undefined;\n  }\n  string = toString(string);\n  options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n  var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n      importsKeys = keys(imports),\n      importsValues = baseValues(imports, importsKeys);\n\n  var isEscaping,\n      isEvaluating,\n      index = 0,\n      interpolate = options.interpolate || reNoMatch,\n      source = \"__p += '\";\n\n  // Compile the regexp to match each delimiter.\n  var reDelimiters = RegExp(\n    (options.escape || reNoMatch).source + '|' +\n    interpolate.source + '|' +\n    (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n    (options.evaluate || reNoMatch).source + '|$'\n  , 'g');\n\n  // Use a sourceURL for easier debugging.\n  // The sourceURL gets injected into the source that's eval-ed, so be careful\n  // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n  // and escape the comment, thus injecting code that gets evaled.\n  var sourceURL = hasOwnProperty.call(options, 'sourceURL')\n    ? ('//# sourceURL=' +\n       (options.sourceURL + '').replace(/\\s/g, ' ') +\n       '\\n')\n    : '';\n\n  string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n    interpolateValue || (interpolateValue = esTemplateValue);\n\n    // Escape characters that can't be included in string literals.\n    source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n    // Replace delimiters with snippets.\n    if (escapeValue) {\n      isEscaping = true;\n      source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n    }\n    if (evaluateValue) {\n      isEvaluating = true;\n      source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n    }\n    if (interpolateValue) {\n      source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n    }\n    index = offset + match.length;\n\n    // The JS engine embedded in Adobe products needs `match` returned in\n    // order to produce the correct `offset` value.\n    return match;\n  });\n\n  source += \"';\\n\";\n\n  // If `variable` is not specified wrap a with-statement around the generated\n  // code to add the data object to the top of the scope chain.\n  var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n  if (!variable) {\n    source = 'with (obj) {\\n' + source + '\\n}\\n';\n  }\n  // Throw an error if a forbidden character was found in `variable`, to prevent\n  // potential command injection attacks.\n  else if (reForbiddenIdentifierChars.test(variable)) {\n    throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n  }\n\n  // Cleanup code by stripping empty strings.\n  source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n    .replace(reEmptyStringMiddle, '$1')\n    .replace(reEmptyStringTrailing, '$1;');\n\n  // Frame code as the function body.\n  source = 'function(' + (variable || 'obj') + ') {\\n' +\n    (variable\n      ? ''\n      : 'obj || (obj = {});\\n'\n    ) +\n    \"var __t, __p = ''\" +\n    (isEscaping\n       ? ', __e = _.escape'\n       : ''\n    ) +\n    (isEvaluating\n      ? ', __j = Array.prototype.join;\\n' +\n        \"function print() { __p += __j.call(arguments, '') }\\n\"\n      : ';\\n'\n    ) +\n    source +\n    'return __p\\n}';\n\n  var result = attempt(function() {\n    return Function(importsKeys, sourceURL + 'return ' + source)\n      .apply(undefined, importsValues);\n  });\n\n  // Provide the compiled function's source by its `toString` method or\n  // the `source` property as a convenience for inlining compiled templates.\n  result.source = source;\n  if (isError(result)) {\n    throw result;\n  }\n  return result;\n}\n\nexport default template;\n","import escape from './escape.js';\nimport reEscape from './_reEscape.js';\nimport reEvaluate from './_reEvaluate.js';\nimport reInterpolate from './_reInterpolate.js';\n\n/**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\nvar templateSettings = {\n\n  /**\n   * Used to detect `data` property values to be HTML-escaped.\n   *\n   * @memberOf _.templateSettings\n   * @type {RegExp}\n   */\n  'escape': reEscape,\n\n  /**\n   * Used to detect code to be evaluated.\n   *\n   * @memberOf _.templateSettings\n   * @type {RegExp}\n   */\n  'evaluate': reEvaluate,\n\n  /**\n   * Used to detect `data` property values to inject.\n   *\n   * @memberOf _.templateSettings\n   * @type {RegExp}\n   */\n  'interpolate': reInterpolate,\n\n  /**\n   * Used to reference the data object in the template text.\n   *\n   * @memberOf _.templateSettings\n   * @type {string}\n   */\n  'variable': '',\n\n  /**\n   * Used to import variables into the compiled template.\n   *\n   * @memberOf _.templateSettings\n   * @type {Object}\n   */\n  'imports': {\n\n    /**\n     * A reference to the `lodash` function.\n     *\n     * @memberOf _.templateSettings.imports\n     * @type {Function}\n     */\n    '_': { 'escape': escape }\n  }\n};\n\nexport default templateSettings;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` 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 throttled 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 `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n *  Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n  var leading = true,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  if (isObject(options)) {\n    leading = 'leading' in options ? !!options.leading : leading;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n  return debounce(func, wait, {\n    'leading': leading,\n    'maxWait': wait,\n    'trailing': trailing\n  });\n}\n\nexport default throttle;\n","/**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _('  abc  ')\n *  .chain()\n *  .trim()\n *  .thru(function(value) {\n *    return [value];\n *  })\n *  .value();\n * // => ['abc']\n */\nfunction thru(value, interceptor) {\n  return interceptor(value);\n}\n\nexport default thru;\n","import baseTimes from './_baseTimes.js';\nimport castFunction from './_castFunction.js';\nimport toInteger from './toInteger.js';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n *  _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\nfunction times(n, iteratee) {\n  n = toInteger(n);\n  if (n < 1 || n > MAX_SAFE_INTEGER) {\n    return [];\n  }\n  var index = MAX_ARRAY_LENGTH,\n      length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n  iteratee = castFunction(iteratee);\n  n -= MAX_ARRAY_LENGTH;\n\n  var result = baseTimes(length, iteratee);\n  while (++index < n) {\n    iteratee(index);\n  }\n  return result;\n}\n\nexport default times;\n","import Symbol from './_Symbol.js';\nimport copyArray from './_copyArray.js';\nimport getTag from './_getTag.js';\nimport isArrayLike from './isArrayLike.js';\nimport isString from './isString.js';\nimport iteratorToArray from './_iteratorToArray.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\nimport stringToArray from './_stringToArray.js';\nimport values from './values.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/** Built-in value references. */\nvar symIterator = Symbol ? Symbol.iterator : undefined;\n\n/**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\nfunction toArray(value) {\n  if (!value) {\n    return [];\n  }\n  if (isArrayLike(value)) {\n    return isString(value) ? stringToArray(value) : copyArray(value);\n  }\n  if (symIterator && value[symIterator]) {\n    return iteratorToArray(value[symIterator]());\n  }\n  var tag = getTag(value),\n      func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n  return func(value);\n}\n\nexport default toArray;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308;\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\nexport default toFinite;\n","import toFinite from './toFinite.js';\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\nexport default toInteger;\n","/**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\nfunction wrapperToIterator() {\n  return this;\n}\n\nexport default wrapperToIterator;\n","export { default } from './wrapperValue.js'\n","import baseClamp from './_baseClamp.js';\nimport toInteger from './toInteger.js';\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295;\n\n/**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is 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 convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\nfunction toLength(value) {\n  return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n}\n\nexport default toLength;\n","import toString from './toString.js';\n\n/**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\nfunction toLower(value) {\n  return toString(value).toLowerCase();\n}\n\nexport default toLower;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\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/**\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 = baseTrim(value);\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\nexport default toNumber;\n","import createToPairs from './_createToPairs.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\nvar toPairs = createToPairs(keys);\n\nexport default toPairs;\n","import createToPairs from './_createToPairs.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\nvar toPairsIn = createToPairs(keysIn);\n\nexport default toPairsIn;\n","import arrayMap from './_arrayMap.js';\nimport copyArray from './_copyArray.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\nimport stringToPath from './_stringToPath.js';\nimport toKey from './_toKey.js';\nimport toString from './toString.js';\n\n/**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\nfunction toPath(value) {\n  if (isArray(value)) {\n    return arrayMap(value, toKey);\n  }\n  return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n}\n\nexport default toPath;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import baseClamp from './_baseClamp.js';\nimport toInteger from './toInteger.js';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\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 * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\nfunction toSafeInteger(value) {\n  return value\n    ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n    : (value === 0 ? value : 0);\n}\n\nexport default toSafeInteger;\n","import baseToString from './_baseToString.js';\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 convert.\n * @returns {string} Returns the converted 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\nexport default toString;\n","import toString from './toString.js';\n\n/**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\nfunction toUpper(value) {\n  return toString(value).toUpperCase();\n}\n\nexport default toUpper;\n","import arrayEach from './_arrayEach.js';\nimport baseCreate from './_baseCreate.js';\nimport baseForOwn from './_baseForOwn.js';\nimport baseIteratee from './_baseIteratee.js';\nimport getPrototype from './_getPrototype.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isTypedArray from './isTypedArray.js';\n\n/**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n *   result.push(n *= n);\n *   return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n *   (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\nfunction transform(object, iteratee, accumulator) {\n  var isArr = isArray(object),\n      isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n  iteratee = baseIteratee(iteratee, 4);\n  if (accumulator == null) {\n    var Ctor = object && object.constructor;\n    if (isArrLike) {\n      accumulator = isArr ? new Ctor : [];\n    }\n    else if (isObject(object)) {\n      accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n    }\n    else {\n      accumulator = {};\n    }\n  }\n  (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n    return iteratee(accumulator, value, index, object);\n  });\n  return accumulator;\n}\n\nexport default transform;\n","import baseToString from './_baseToString.js';\nimport baseTrim from './_baseTrim.js';\nimport castSlice from './_castSlice.js';\nimport charsEndIndex from './_charsEndIndex.js';\nimport charsStartIndex from './_charsStartIndex.js';\nimport stringToArray from './_stringToArray.js';\nimport toString from './toString.js';\n\n/**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim('  abc  ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map(['  foo  ', '  bar  '], _.trim);\n * // => ['foo', 'bar']\n */\nfunction trim(string, chars, guard) {\n  string = toString(string);\n  if (string && (guard || chars === undefined)) {\n    return baseTrim(string);\n  }\n  if (!string || !(chars = baseToString(chars))) {\n    return string;\n  }\n  var strSymbols = stringToArray(string),\n      chrSymbols = stringToArray(chars),\n      start = charsStartIndex(strSymbols, chrSymbols),\n      end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n  return castSlice(strSymbols, start, end).join('');\n}\n\nexport default trim;\n","import baseToString from './_baseToString.js';\nimport castSlice from './_castSlice.js';\nimport charsEndIndex from './_charsEndIndex.js';\nimport stringToArray from './_stringToArray.js';\nimport toString from './toString.js';\nimport trimmedEndIndex from './_trimmedEndIndex.js';\n\n/**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd('  abc  ');\n * // => '  abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\nfunction trimEnd(string, chars, guard) {\n  string = toString(string);\n  if (string && (guard || chars === undefined)) {\n    return string.slice(0, trimmedEndIndex(string) + 1);\n  }\n  if (!string || !(chars = baseToString(chars))) {\n    return string;\n  }\n  var strSymbols = stringToArray(string),\n      end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n  return castSlice(strSymbols, 0, end).join('');\n}\n\nexport default trimEnd;\n","import baseToString from './_baseToString.js';\nimport castSlice from './_castSlice.js';\nimport charsStartIndex from './_charsStartIndex.js';\nimport stringToArray from './_stringToArray.js';\nimport toString from './toString.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart('  abc  ');\n * // => 'abc  '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\nfunction trimStart(string, chars, guard) {\n  string = toString(string);\n  if (string && (guard || chars === undefined)) {\n    return string.replace(reTrimStart, '');\n  }\n  if (!string || !(chars = baseToString(chars))) {\n    return string;\n  }\n  var strSymbols = stringToArray(string),\n      start = charsStartIndex(strSymbols, stringToArray(chars));\n\n  return castSlice(strSymbols, start).join('');\n}\n\nexport default trimStart;\n","import baseToString from './_baseToString.js';\nimport castSlice from './_castSlice.js';\nimport hasUnicode from './_hasUnicode.js';\nimport isObject from './isObject.js';\nimport isRegExp from './isRegExp.js';\nimport stringSize from './_stringSize.js';\nimport stringToArray from './_stringToArray.js';\nimport toInteger from './toInteger.js';\nimport toString from './toString.js';\n\n/** Used as default options for `_.truncate`. */\nvar DEFAULT_TRUNC_LENGTH = 30,\n    DEFAULT_TRUNC_OMISSION = '...';\n\n/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n *   'length': 24,\n *   'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n *   'length': 24,\n *   'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n *   'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\nfunction truncate(string, options) {\n  var length = DEFAULT_TRUNC_LENGTH,\n      omission = DEFAULT_TRUNC_OMISSION;\n\n  if (isObject(options)) {\n    var separator = 'separator' in options ? options.separator : separator;\n    length = 'length' in options ? toInteger(options.length) : length;\n    omission = 'omission' in options ? baseToString(options.omission) : omission;\n  }\n  string = toString(string);\n\n  var strLength = string.length;\n  if (hasUnicode(string)) {\n    var strSymbols = stringToArray(string);\n    strLength = strSymbols.length;\n  }\n  if (length >= strLength) {\n    return string;\n  }\n  var end = length - stringSize(omission);\n  if (end < 1) {\n    return omission;\n  }\n  var result = strSymbols\n    ? castSlice(strSymbols, 0, end).join('')\n    : string.slice(0, end);\n\n  if (separator === undefined) {\n    return result + omission;\n  }\n  if (strSymbols) {\n    end += (result.length - end);\n  }\n  if (isRegExp(separator)) {\n    if (string.slice(end).search(separator)) {\n      var match,\n          substring = result;\n\n      if (!separator.global) {\n        separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n      }\n      separator.lastIndex = 0;\n      while ((match = separator.exec(substring))) {\n        var newEnd = match.index;\n      }\n      result = result.slice(0, newEnd === undefined ? end : newEnd);\n    }\n  } else if (string.indexOf(baseToString(separator), end) != end) {\n    var index = result.lastIndexOf(separator);\n    if (index > -1) {\n      result = result.slice(0, index);\n    }\n  }\n  return result + omission;\n}\n\nexport default truncate;\n","import ary from './ary.js';\n\n/**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\nfunction unary(func) {\n  return ary(func, 1);\n}\n\nexport default unary;\n","import toString from './toString.js';\nimport unescapeHtmlChar from './_unescapeHtmlChar.js';\n\n/** Used to match HTML entities and HTML characters. */\nvar reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n    reHasEscapedHtml = RegExp(reEscapedHtml.source);\n\n/**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, &amp; pebbles');\n * // => 'fred, barney, & pebbles'\n */\nfunction unescape(string) {\n  string = toString(string);\n  return (string && reHasEscapedHtml.test(string))\n    ? string.replace(reEscapedHtml, unescapeHtmlChar)\n    : string;\n}\n\nexport default unescape;\n","import baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport baseUniq from './_baseUniq.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n  return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nexport default union;\n","import baseFlatten from './_baseFlatten.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseRest from './_baseRest.js';\nimport baseUniq from './_baseUniq.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport last from './last.js';\n\n/**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nvar unionBy = baseRest(function(arrays) {\n  var iteratee = last(arrays);\n  if (isArrayLikeObject(iteratee)) {\n    iteratee = undefined;\n  }\n  return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2));\n});\n\nexport default unionBy;\n","import baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport baseUniq from './_baseUniq.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport last from './last.js';\n\n/**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\nvar unionWith = baseRest(function(arrays) {\n  var comparator = last(arrays);\n  comparator = typeof comparator == 'function' ? comparator : undefined;\n  return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n});\n\nexport default unionWith;\n","import baseUniq from './_baseUniq.js';\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n  return (array && array.length) ? baseUniq(array) : [];\n}\n\nexport default uniq;\n","import baseIteratee from './_baseIteratee.js';\nimport baseUniq from './_baseUniq.js';\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 order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (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] 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) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n}\n\nexport default uniqBy;\n","import baseUniq from './_baseUniq.js';\n\n/**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\nfunction uniqWith(array, comparator) {\n  comparator = typeof comparator == 'function' ? comparator : undefined;\n  return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n}\n\nexport default uniqWith;\n","import toString from './toString.js';\n\n/** Used to generate unique IDs. */\nvar idCounter = 0;\n\n/**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\nfunction uniqueId(prefix) {\n  var id = ++idCounter;\n  return toString(prefix) + id;\n}\n\nexport default uniqueId;\n","import baseUnset from './_baseUnset.js';\n\n/**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\nfunction unset(object, path) {\n  return object == null ? true : baseUnset(object, path);\n}\n\nexport default unset;\n","import arrayFilter from './_arrayFilter.js';\nimport arrayMap from './_arrayMap.js';\nimport baseProperty from './_baseProperty.js';\nimport baseTimes from './_baseTimes.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\nfunction unzip(array) {\n  if (!(array && array.length)) {\n    return [];\n  }\n  var length = 0;\n  array = arrayFilter(array, function(group) {\n    if (isArrayLikeObject(group)) {\n      length = nativeMax(group.length, length);\n      return true;\n    }\n  });\n  return baseTimes(length, function(index) {\n    return arrayMap(array, baseProperty(index));\n  });\n}\n\nexport default unzip;\n","import apply from './_apply.js';\nimport arrayMap from './_arrayMap.js';\nimport unzip from './unzip.js';\n\n/**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n *  regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\nfunction unzipWith(array, iteratee) {\n  if (!(array && array.length)) {\n    return [];\n  }\n  var result = unzip(array);\n  if (iteratee == null) {\n    return result;\n  }\n  return arrayMap(result, function(group) {\n    return apply(iteratee, undefined, group);\n  });\n}\n\nexport default unzipWith;\n","import baseUpdate from './_baseUpdate.js';\nimport castFunction from './_castFunction.js';\n\n/**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\nfunction update(object, path, updater) {\n  return object == null ? object : baseUpdate(object, path, castFunction(updater));\n}\n\nexport default update;\n","import baseUpdate from './_baseUpdate.js';\nimport castFunction from './_castFunction.js';\n\n/**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\nfunction updateWith(object, path, updater, customizer) {\n  customizer = typeof customizer == 'function' ? customizer : undefined;\n  return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n}\n\nexport default updateWith;\n","import createCompounder from './_createCompounder.js';\n\n/**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\nvar upperCase = createCompounder(function(result, word, index) {\n  return result + (index ? ' ' : '') + word.toUpperCase();\n});\n\nexport default upperCase;\n","import createCaseFirst from './_createCaseFirst.js';\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nexport default upperFirst;\n","import attempt from './attempt.js';\nimport bindAll from './bindAll.js';\nimport cond from './cond.js';\nimport conforms from './conforms.js';\nimport constant from './constant.js';\nimport defaultTo from './defaultTo.js';\nimport flow from './flow.js';\nimport flowRight from './flowRight.js';\nimport identity from './identity.js';\nimport iteratee from './iteratee.js';\nimport matches from './matches.js';\nimport matchesProperty from './matchesProperty.js';\nimport method from './method.js';\nimport methodOf from './methodOf.js';\nimport mixin from './mixin.js';\nimport noop from './noop.js';\nimport nthArg from './nthArg.js';\nimport over from './over.js';\nimport overEvery from './overEvery.js';\nimport overSome from './overSome.js';\nimport property from './property.js';\nimport propertyOf from './propertyOf.js';\nimport range from './range.js';\nimport rangeRight from './rangeRight.js';\nimport stubArray from './stubArray.js';\nimport stubFalse from './stubFalse.js';\nimport stubObject from './stubObject.js';\nimport stubString from './stubString.js';\nimport stubTrue from './stubTrue.js';\nimport times from './times.js';\nimport toPath from './toPath.js';\nimport uniqueId from './uniqueId.js';\n\nexport default {\n  attempt, bindAll, cond, conforms, constant,\n  defaultTo, flow, flowRight, identity, iteratee,\n  matches, matchesProperty, method, methodOf, mixin,\n  noop, nthArg, over, overEvery, overSome,\n  property, propertyOf, range, rangeRight, stubArray,\n  stubFalse, stubObject, stubString, stubTrue, times,\n  toPath, uniqueId\n};\n","export { default as attempt } from './attempt.js';\nexport { default as bindAll } from './bindAll.js';\nexport { default as cond } from './cond.js';\nexport { default as conforms } from './conforms.js';\nexport { default as constant } from './constant.js';\nexport { default as defaultTo } from './defaultTo.js';\nexport { default as flow } from './flow.js';\nexport { default as flowRight } from './flowRight.js';\nexport { default as identity } from './identity.js';\nexport { default as iteratee } from './iteratee.js';\nexport { default as matches } from './matches.js';\nexport { default as matchesProperty } from './matchesProperty.js';\nexport { default as method } from './method.js';\nexport { default as methodOf } from './methodOf.js';\nexport { default as mixin } from './mixin.js';\nexport { default as noop } from './noop.js';\nexport { default as nthArg } from './nthArg.js';\nexport { default as over } from './over.js';\nexport { default as overEvery } from './overEvery.js';\nexport { default as overSome } from './overSome.js';\nexport { default as property } from './property.js';\nexport { default as propertyOf } from './propertyOf.js';\nexport { default as range } from './range.js';\nexport { default as rangeRight } from './rangeRight.js';\nexport { default as stubArray } from './stubArray.js';\nexport { default as stubFalse } from './stubFalse.js';\nexport { default as stubObject } from './stubObject.js';\nexport { default as stubString } from './stubString.js';\nexport { default as stubTrue } from './stubTrue.js';\nexport { default as times } from './times.js';\nexport { default as toPath } from './toPath.js';\nexport { default as uniqueId } from './uniqueId.js';\nexport { default } from './util.default.js';\n","export { default } from './wrapperValue.js'\n","export { default } from './wrapperValue.js'\n","import baseValues from './_baseValues.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\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 values.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n  return object == null ? [] : baseValues(object, keys(object));\n}\n\nexport default values;\n","import baseValues from './_baseValues.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\nfunction valuesIn(object) {\n  return object == null ? [] : baseValues(object, keysIn(object));\n}\n\nexport default valuesIn;\n","import baseDifference from './_baseDifference.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\nvar without = baseRest(function(array, values) {\n  return isArrayLikeObject(array)\n    ? baseDifference(array, values)\n    : [];\n});\n\nexport default without;\n","import asciiWords from './_asciiWords.js';\nimport hasUnicodeWord from './_hasUnicodeWord.js';\nimport toString from './toString.js';\nimport unicodeWords from './_unicodeWords.js';\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n  string = toString(string);\n  pattern = guard ? undefined : pattern;\n\n  if (pattern === undefined) {\n    return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n  }\n  return string.match(pattern) || [];\n}\n\nexport default words;\n","import castFunction from './_castFunction.js';\nimport partial from './partial.js';\n\n/**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n *   return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, &amp; pebbles</p>'\n */\nfunction wrap(value, wrapper) {\n  return partial(castFunction(wrapper), value);\n}\n\nexport default wrap;\n","import LazyWrapper from './_LazyWrapper.js';\nimport LodashWrapper from './_LodashWrapper.js';\nimport baseAt from './_baseAt.js';\nimport flatRest from './_flatRest.js';\nimport isIndex from './_isIndex.js';\nimport thru from './thru.js';\n\n/**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\nvar wrapperAt = flatRest(function(paths) {\n  var length = paths.length,\n      start = length ? paths[0] : 0,\n      value = this.__wrapped__,\n      interceptor = function(object) { return baseAt(object, paths); };\n\n  if (length > 1 || this.__actions__.length ||\n      !(value instanceof LazyWrapper) || !isIndex(start)) {\n    return this.thru(interceptor);\n  }\n  value = value.slice(start, +start + (length ? 1 : 0));\n  value.__actions__.push({\n    'func': thru,\n    'args': [interceptor],\n    'thisArg': undefined\n  });\n  return new LodashWrapper(value, this.__chain__).thru(function(array) {\n    if (length && !array.length) {\n      array.push(undefined);\n    }\n    return array;\n  });\n});\n\nexport default wrapperAt;\n","import chain from './chain.js';\n\n/**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n *   { 'user': 'barney', 'age': 36 },\n *   { 'user': 'fred',   'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n *   .chain()\n *   .head()\n *   .pick('user')\n *   .value();\n * // => { 'user': 'barney' }\n */\nfunction wrapperChain() {\n  return chain(this);\n}\n\nexport default wrapperChain;\n","import LazyWrapper from './_LazyWrapper.js';\nimport LodashWrapper from './_LodashWrapper.js';\nimport baseLodash from './_baseLodash.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\nimport wrapperClone from './_wrapperClone.js';\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 * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n *   return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\nfunction lodash(value) {\n  if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n    if (value instanceof LodashWrapper) {\n      return value;\n    }\n    if (hasOwnProperty.call(value, '__wrapped__')) {\n      return wrapperClone(value);\n    }\n  }\n  return new LodashWrapper(value);\n}\n\n// Ensure wrappers are instances of `baseLodash`.\nlodash.prototype = baseLodash.prototype;\nlodash.prototype.constructor = lodash;\n\nexport default lodash;\n","import LazyWrapper from './_LazyWrapper.js';\nimport LodashWrapper from './_LodashWrapper.js';\nimport reverse from './reverse.js';\nimport thru from './thru.js';\n\n/**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\nfunction wrapperReverse() {\n  var value = this.__wrapped__;\n  if (value instanceof LazyWrapper) {\n    var wrapped = value;\n    if (this.__actions__.length) {\n      wrapped = new LazyWrapper(this);\n    }\n    wrapped = wrapped.reverse();\n    wrapped.__actions__.push({\n      'func': thru,\n      'args': [reverse],\n      'thisArg': undefined\n    });\n    return new LodashWrapper(wrapped, this.__chain__);\n  }\n  return this.thru(reverse);\n}\n\nexport default wrapperReverse;\n","import baseWrapperValue from './_baseWrapperValue.js';\n\n/**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\nfunction wrapperValue() {\n  return baseWrapperValue(this.__wrapped__, this.__actions__);\n}\n\nexport default wrapperValue;\n","import arrayFilter from './_arrayFilter.js';\nimport baseRest from './_baseRest.js';\nimport baseXor from './_baseXor.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\nvar xor = baseRest(function(arrays) {\n  return baseXor(arrayFilter(arrays, isArrayLikeObject));\n});\n\nexport default xor;\n","import arrayFilter from './_arrayFilter.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseRest from './_baseRest.js';\nimport baseXor from './_baseXor.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport last from './last.js';\n\n/**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\nvar xorBy = baseRest(function(arrays) {\n  var iteratee = last(arrays);\n  if (isArrayLikeObject(iteratee)) {\n    iteratee = undefined;\n  }\n  return baseXor(arrayFilter(arrays, isArrayLikeObject), baseIteratee(iteratee, 2));\n});\n\nexport default xorBy;\n","import arrayFilter from './_arrayFilter.js';\nimport baseRest from './_baseRest.js';\nimport baseXor from './_baseXor.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport last from './last.js';\n\n/**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\nvar xorWith = baseRest(function(arrays) {\n  var comparator = last(arrays);\n  comparator = typeof comparator == 'function' ? comparator : undefined;\n  return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n});\n\nexport default xorWith;\n","import baseRest from './_baseRest.js';\nimport unzip from './unzip.js';\n\n/**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\nvar zip = baseRest(unzip);\n\nexport default zip;\n","import assignValue from './_assignValue.js';\nimport baseZipObject from './_baseZipObject.js';\n\n/**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction zipObject(props, values) {\n  return baseZipObject(props || [], values || [], assignValue);\n}\n\nexport default zipObject;\n","import baseSet from './_baseSet.js';\nimport baseZipObject from './_baseZipObject.js';\n\n/**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\nfunction zipObjectDeep(props, values) {\n  return baseZipObject(props || [], values || [], baseSet);\n}\n\nexport default zipObjectDeep;\n","import baseRest from './_baseRest.js';\nimport unzipWith from './unzipWith.js';\n\n/**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n *  grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n *   return a + b + c;\n * });\n * // => [111, 222]\n */\nvar zipWith = baseRest(function(arrays) {\n  var length = arrays.length,\n      iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n  iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n  return unzipWith(arrays, iteratee);\n});\n\nexport default zipWith;\n","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TextEditor.vue?vue&type=style&index=0&id=998e05d6&lang=scss\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"eec2beda\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TextEditor.vue?vue&type=style&index=0&id=998e05d6&lang=scss\", function() {\n     var newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TextEditor.vue?vue&type=style&index=0&id=998e05d6&lang=scss\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","import { render, staticRenderFns } from \"./TextEditor.vue?vue&type=template&id=998e05d6\"\nimport script from \"./TextEditor.vue?vue&type=script&lang=js\"\nexport * from \"./TextEditor.vue?vue&type=script&lang=js\"\nimport style0 from \"./TextEditor.vue?vue&type=style&index=0&id=998e05d6&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (module.hot) {\n  var api = require(\"/github/workspace/node_modules/vue-hot-reload-api/dist/index.js\")\n  api.install(require('vue'))\n  if (api.compatible) {\n    module.hot.accept()\n    if (!api.isRecorded('998e05d6')) {\n      api.createRecord('998e05d6', component.options)\n    } else {\n      api.reload('998e05d6', component.options)\n    }\n    module.hot.accept(\"./TextEditor.vue?vue&type=template&id=998e05d6\", function () {\n      api.rerender('998e05d6', {\n        render: render,\n        staticRenderFns: staticRenderFns\n      })\n    })\n  }\n}\ncomponent.options.__file = \"src/components/UI/TextEditor.vue\"\nexport default component.exports","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TextEditor.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TextEditor.vue?vue&type=script&lang=js\"","export * from \"-!../../../node_modules/vue-style-loader/index.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TextEditor.vue?vue&type=style&index=0&id=998e05d6&lang=scss\"","export * from \"-!../../../node_modules/cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"d2a26fb4-vue-loader-template\\\"}!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TextEditor.vue?vue&type=template&id=998e05d6\""],"sourceRoot":""}