{"version":3,"file":"ngx-blockly.mjs","sources":["../../../projects/ngx-blockly/src/lib/ngx-blockly/ngx-blockly.config.ts","../../../projects/ngx-blockly/src/lib/ngx-blockly/ngx-blockly.component.ts","../../../projects/ngx-blockly/src/lib/ngx-blockly/ngx-blockly.component.html","../../../projects/ngx-blockly/src/lib/ngx-blockly/ngx-blockly-generator.config.ts","../../../projects/ngx-blockly/src/lib/ngx-blockly/models/block.ts","../../../projects/ngx-blockly/src/lib/ngx-blockly/models/custom-block.ts","../../../projects/ngx-blockly/src/lib/ngx-blockly/models/xml-block.ts","../../../projects/ngx-blockly/src/lib/ngx-blockly/models/category.ts","../../../projects/ngx-blockly/src/lib/ngx-blockly/models/button.ts","../../../projects/ngx-blockly/src/lib/ngx-blockly/models/label.ts","../../../projects/ngx-blockly/src/lib/ngx-blockly/models/separator.ts","../../../projects/ngx-blockly/src/lib/ngx-blockly/models/theme.ts","../../../projects/ngx-blockly/src/lib/ngx-blockly/models/block-mutator.ts","../../../projects/ngx-blockly/src/lib/ngx-blockly/plugins/ngx-blockly.toolbox.ts","../../../projects/ngx-blockly/src/lib/ngx-blockly.module.ts","../../../projects/ngx-blockly/src/public_api.ts","../../../projects/ngx-blockly/src/ngx-blockly.ts"],"sourcesContent":["import * as Blockly from 'blockly/core';\n\nexport enum NgxBlocklyGenerator {\n    DART = 'Dart',\n    JAVASCRIPT = 'JavaScript',\n    LUA = 'Lua',\n    PHP = 'PHP',\n    PYTHON = 'Python',\n    XML = 'Xml'\n}\n\nexport interface NgxBlocklyConfig extends Blockly.BlocklyOptions {\n    defaultBlocks?: boolean;\n    generators?: NgxBlocklyGenerator[];\n    plugins?: { [name: string]: any };\n}\n","import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChange,\n  ViewChild\n} from '@angular/core';\nimport { NgxBlocklyConfig, NgxBlocklyGenerator } from './ngx-blockly.config';\nimport { CustomBlock } from './models/custom-block';\nimport * as Blockly from 'blockly/core';\nimport { NgxBlocklyToolbox } from './plugins/ngx-blockly.toolbox';\nimport { dartGenerator } from 'blockly/dart';\nimport { luaGenerator } from 'blockly/lua';\nimport { javascriptGenerator } from 'blockly/javascript';\nimport { phpGenerator } from 'blockly/php';\nimport { pythonGenerator } from 'blockly/python';\n\n@Component({\n  selector: 'ngx-blockly',\n  templateUrl: './ngx-blockly.component.html',\n  styleUrls: ['./ngx-blockly.component.css']\n})\nexport class NgxBlocklyComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n\n  @Input() public config: NgxBlocklyConfig = {};\n  @Input() public customBlocks: CustomBlock[] = [];\n  @Input() public readOnly = false;\n  @Output() public workspaceCreate: EventEmitter<Blockly.WorkspaceSvg> = new EventEmitter<Blockly.WorkspaceSvg>();\n  @Output() public workspaceChange: EventEmitter<Blockly.Events.AbstractEventJson> = new EventEmitter<Blockly.Events.AbstractEventJson>();\n  @Output() public toolboxChange: EventEmitter<any> = new EventEmitter<any>();\n  @Output() public dartCode: EventEmitter<string> = new EventEmitter<string>();\n  @Output() public javascriptCode: EventEmitter<string> = new EventEmitter<string>();\n  @Output() public luaCode: EventEmitter<string> = new EventEmitter<string>();\n  @Output() public phpCode: EventEmitter<string> = new EventEmitter<string>();\n  @Output() public pythonCode: EventEmitter<string> = new EventEmitter<string>();\n  @Output() public xmlCode: EventEmitter<string> = new EventEmitter<string>();\n\n  @ViewChild('primaryContainer') primaryContainer: ElementRef;\n  @ViewChild('secondaryContainer') secondaryContainer: ElementRef;\n  public workspace: Blockly.WorkspaceSvg;\n  private _secondaryWorkspace: Blockly.WorkspaceSvg;\n  private _resizeTimeout;\n  private _finishedLoading = false;\n\n  public static initCustomBlocks(blocks: CustomBlock[]) {\n    if (blocks) {\n      for (const customBlock of blocks) {\n        Blockly.Blocks[customBlock.type] = {\n          init: function () {\n            const block = new customBlock.class(customBlock.type, customBlock.blockMutator, ...customBlock.args);\n            block.init(this);\n            this.mixin({\n                blockInstance: block\n              }\n            );\n          }\n        };\n        pythonGenerator[customBlock.type] = function (b) {\n          return b.blockInstance.toPythonCode(b);\n        };\n        dartGenerator[customBlock.type] = function (b) {\n          return b.blockInstance.toDartCode(b);\n        };\n        javascriptGenerator[customBlock.type] = function (b) {\n          return b.blockInstance.toJavaScriptCode(b);\n        };\n        luaGenerator[customBlock.type] = function (b) {\n          return b.blockInstance.toLuaCode(b);\n        };\n        phpGenerator[customBlock.type] = function (b) {\n          return b.blockInstance.toPHPCode(b);\n        };\n        if (customBlock.blockMutator) {\n          const mutator_mixin: any = {\n            mutationToDom: function () {\n              return customBlock.blockMutator.mutationToDom.call(customBlock.blockMutator, this);\n            },\n            domToMutation: function (xmlElement: any) {\n              customBlock.blockMutator.domToMutation.call(customBlock.blockMutator, this, xmlElement);\n            },\n            saveExtraState: function () {\n              return customBlock.blockMutator.saveExtraState.call(customBlock.blockMutator);\n            },\n            loadExtraState: function (state: any) {\n              customBlock.blockMutator.loadExtraState.call(customBlock.blockMutator, state);\n            }\n          };\n          if (customBlock.blockMutator.blockList && customBlock.blockMutator.blockList.length > 0) {\n            mutator_mixin.decompose = function (workspace: any) {\n              return customBlock.blockMutator.decompose.call(customBlock.blockMutator, this, workspace);\n            };\n            mutator_mixin.compose = function (topBlock: any) {\n              customBlock.blockMutator.compose.call(customBlock.blockMutator, this, topBlock);\n            };\n            mutator_mixin.saveConnections = function (containerBlock: any) {\n              customBlock.blockMutator.saveConnections.call(customBlock.blockMutator, this, containerBlock);\n            };\n          }\n          Blockly.Extensions.unregister(customBlock.blockMutator.name);\n          Blockly.Extensions.registerMutator(\n            customBlock.blockMutator.name,\n            mutator_mixin,\n            function () {\n              customBlock.blockMutator.afterBlockInit.call(customBlock.blockMutator, this);\n            },\n            customBlock.blockMutator.blockList\n          );\n        }\n      }\n    }\n  }\n\n  ngOnInit() {\n    NgxBlocklyComponent.initCustomBlocks(this.customBlocks);\n  }\n\n  ngAfterViewInit() {\n    const readOnly = this.config.readOnly || this.readOnly;\n    this.config.readOnly = false;\n    this.workspace = Blockly.inject(this.primaryContainer.nativeElement, this.config);\n    this.workspace.addChangeListener(this._onWorkspaceChange.bind(this));\n    this.workspace.fireChangeListener(new Blockly.Events.FinishedLoading());\n    this.workspaceCreate.emit(this.workspace);\n    this.resize();\n    if (readOnly) {\n      this.setReadonly(true);\n      this.config.readOnly = true;\n    }\n  }\n\n  ngOnChanges(changes: { [propKey: string]: SimpleChange }) {\n    // skip this if the change comes before we are initialized\n    if (changes.readOnly && this._secondaryWorkspace) {\n      this.setReadonly(changes.readOnly.currentValue);\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.workspace) {\n      this.workspace.dispose();\n    }\n    if (this._secondaryWorkspace) {\n      this._secondaryWorkspace.dispose();\n    }\n  }\n\n  @HostListener('window:resize', ['$event'])\n  onResize(event) {\n    clearTimeout(this._resizeTimeout);\n    this._resizeTimeout = setTimeout(() => this.resize(), 200);\n  }\n\n  /**\n   * Generate code for all blocks in the workspace to the specified output.\n   * @param workspaceId Workspace to generate code from.\n   */\n  public workspaceToCode(workspaceId: string) {\n    for (const generator of this.config.generators) {\n      switch (generator) {\n        case NgxBlocklyGenerator.DART:\n          this.dartCode.emit(dartGenerator.workspaceToCode(Blockly.Workspace.getById(workspaceId)));\n          break;\n        case NgxBlocklyGenerator.LUA:\n          this.luaCode.emit(luaGenerator.workspaceToCode(Blockly.Workspace.getById(workspaceId)));\n          break;\n        case NgxBlocklyGenerator.JAVASCRIPT:\n          this.javascriptCode.emit(javascriptGenerator.workspaceToCode(Blockly.Workspace.getById(workspaceId)));\n          break;\n        case NgxBlocklyGenerator.PHP:\n          this.phpCode.emit(phpGenerator.workspaceToCode(Blockly.Workspace.getById(workspaceId)));\n          break;\n        case NgxBlocklyGenerator.PYTHON:\n          this.pythonCode.emit(pythonGenerator.workspaceToCode(Blockly.Workspace.getById(workspaceId)));\n          break;\n        case NgxBlocklyGenerator.XML:\n          this.xmlCode.emit(Blockly.Xml.domToPrettyText(Blockly.Xml.workspaceToDom(Blockly.Workspace.getById(workspaceId))));\n          break;\n      }\n    }\n  }\n\n  /**\n   * Converts a DOM structure into properly indented text.\n   * @return Text representation.\n   */\n  public toXml(): string {\n    return Blockly.Xml.domToPrettyText(Blockly.Xml.workspaceToDom(this.workspace));\n  }\n\n  /**\n   * Clear the given workspace then decode an XML DOM and\n   * create blocks on the workspace.\n   * @param xml XML DOM..\n   */\n  public fromXml(xml: string) {\n    this._finishedLoading = false;\n    Blockly.Xml.clearWorkspaceAndLoadFromXml(Blockly.Xml.textToDom(xml), this.workspace);\n    if (this._secondaryWorkspace) {\n      Blockly.Xml.clearWorkspaceAndLoadFromXml(Blockly.Xml.textToDom(xml), this._secondaryWorkspace);\n    }\n  }\n\n  /**\n   * Decode an XML DOM and create blocks on the workspace. Position the new\n   * blocks immediately below prior blocks, aligned by their starting edge.\n   * @param xml The XML DOM.\n   */\n  public appendFromXml(xml: string) {\n    Blockly.Xml.appendDomToWorkspace(Blockly.Xml.textToDom(xml), this.workspace);\n    if (this._secondaryWorkspace) {\n      Blockly.Xml.appendDomToWorkspace(Blockly.Xml.textToDom(xml), this._secondaryWorkspace);\n    }\n  }\n\n  /**\n   * Dispose of all blocks in workspace, with an optimization to prevent resizes.\n   */\n  public clear() {\n    if (this.workspace) {\n      this.workspace.clear();\n    }\n  }\n\n  /**\n   * Clear the undo/redo stacks.\n   */\n  public clearUndo() {\n    if (this.workspace) {\n      this.workspace.clearUndo();\n    }\n  }\n\n  /**\n   * Clear the reference to the current gesture.\n   */\n  public clearGesture() {\n    if (this.workspace) {\n      this.workspace.clearGesture();\n    }\n  }\n\n  /**\n   * Clear search input and result set.\n   */\n  public clearSearch() {\n    if (this.workspace) {\n      const toolbox = this.workspace.getToolbox() as NgxBlocklyToolbox;\n      if (toolbox && typeof toolbox.clearSearch === 'function') {\n        toolbox.clearSearch();\n      }\n    }\n  }\n\n  /**\n   * Size the workspace when the contents change. This also updates\n   * scrollbars accordingly.\n   */\n  public resize() {\n    if (this.workspace) {\n      Blockly.svgResize(this.workspace);\n    }\n    if (this._secondaryWorkspace) {\n      Blockly.svgResize(this._secondaryWorkspace);\n    }\n  }\n\n  public setReadonly(readOnly: boolean) {\n    this.readOnly = readOnly;\n    if (readOnly) {\n      this.secondaryContainer.nativeElement.classList.remove('hidden');\n      if (!this._secondaryWorkspace) {\n        const config = { ...this.config };\n        config.readOnly = true;\n        this._secondaryWorkspace = Blockly.inject(this.secondaryContainer.nativeElement, config);\n      }\n      Blockly.Xml.clearWorkspaceAndLoadFromXml(Blockly.Xml.textToDom(this.toXml()), this._secondaryWorkspace);\n      Blockly.svgResize(this._secondaryWorkspace);\n    } else {\n      if (this._secondaryWorkspace) {\n        this.secondaryContainer.nativeElement.classList.add('hidden');\n      }\n    }\n  }\n\n  public highlightBlock(blockId: string) {\n    if (this.workspace) {\n      this.workspace.highlightBlock(blockId);\n    }\n    if (this._secondaryWorkspace) {\n      this._secondaryWorkspace.highlightBlock(blockId);\n    }\n  }\n\n  private _onWorkspaceChange(event: any) {\n    this.workspaceChange.emit(event);\n    if (event.type === Blockly.Events.FINISHED_LOADING) {\n      this._finishedLoading = true;\n    }\n    if (this._finishedLoading) {\n      if (event instanceof Blockly.Events.BlockBase ||\n        event instanceof Blockly.Events.VarBase ||\n        event instanceof Blockly.Events.CommentBase) {\n        this.workspaceToCode(event.workspaceId);\n      }\n      if (event.type === Blockly.Events.TOOLBOX_ITEM_SELECT) {\n        this.toolboxChange.emit(event);\n      }\n    }\n  }\n}\n","<div id=\"blockly-wrapper\" class=\"blockly-wrapper\">\n    <div #primaryContainer class=\"blockly\"></div>\n    <div #secondaryContainer class=\"blockly hidden\"></div>\n</div>\n","export class NgxBlocklyGeneratorConfig {\n    dart?: boolean;\n    javascript?: boolean;\n    lua?: boolean;\n    php?: boolean;\n    python?: boolean;\n    xml?: boolean;\n}\n","import { BlockMutator } from './block-mutator';\nimport { CustomBlock } from './custom-block';\nimport { Node } from './node';\n\n\nexport type Constructor = new (type: string, blockMutator?: BlockMutator, ...args: any[]) => CustomBlock;\n\nexport abstract class Block implements Node {\n\n    public kind = 'BLOCK';\n    private _type: string;\n    private _class: Constructor;\n    private _disabled = false;\n\n    protected constructor(type: string) {\n        this._type = type;\n    }\n\n    get type(): string {\n        return this._type;\n    }\n\n    set type(value: string) {\n        this._type = value;\n    }\n\n    get disabled(): boolean {\n        return this._disabled;\n    }\n\n    set disabled(value: boolean) {\n        this._disabled = value;\n    }\n\n    get class(): Constructor  {\n        return this._class;\n    }\n\n    set class(value: Constructor ) {\n        this._class = value;\n    }\n\n    public abstract toXML();\n}\n","import { BlockMutator } from './block-mutator';\nimport { Block } from './block';\nimport * as Blockly from 'blockly/core';\n\nexport abstract class CustomBlock extends Block {\n\n    private _block: Blockly.Block;\n    private _blockMutator: BlockMutator;\n    private _args: any[];\n\n\n    protected constructor(type: string, blockMutator?: BlockMutator, ...args: any[]) {\n        super(type);\n        this._blockMutator = blockMutator ? blockMutator : null;\n        this._args = args;\n    }\n\n    public init(block: Blockly.Block) {\n        this._block = block;\n        this.defineBlock();\n        this.block.setOnChange(function (event) {\n            this.blockInstance.onChange(event);\n        });\n    }\n\n    public abstract defineBlock();\n\n    public onChange(changeEvent: Blockly.Events.AbstractEventJson) {\n        // nothing to do\n    }\n\n    public toXML(): string {\n        return `<block type=\"${this.type}\" disabled=\"${this.disabled}\"></block>`;\n    }\n\n    public toDartCode(block: Blockly.Block): string | any[] {\n        return 'Not implemented';\n    }\n\n    public toJavaScriptCode(block: Blockly.Block): string | any[] {\n        return 'Not implemented';\n    }\n\n    public toLuaCode(block: Blockly.Block): string | any[] {\n        return 'Not implemented';\n    }\n\n    public toPHPCode(block: Blockly.Block): string | any[] {\n        return 'Not implemented';\n    }\n\n    public toPythonCode(block: Blockly.Block): string | any[] {\n        return 'Not implemented';\n    }\n\n    get block():  Blockly.Block {\n        return this._block;\n    }\n\n    set block(block:  Blockly.Block) {\n        this._block = block;\n    }\n\n    get blockMutator(): BlockMutator {\n        return this._blockMutator;\n    }\n\n    set blockMutator(mutator: BlockMutator) {\n        this._blockMutator = mutator;\n    }\n\n    get args(): any[] {\n        return this._args;\n    }\n\n    set args(args: any[]) {\n        this._args = args;\n    }\n}\n","import { Block } from './block';\n\nexport class XmlBlock extends Block {\n\n    private _values: Value[] = [];\n    private _field: Field;\n    private _mutation: Mutation;\n    private _shadow: boolean;\n\n    constructor(type: string, shadow = false) {\n        super(type);\n        this._shadow = shadow;\n    }\n\n    get values(): Value[] {\n        return this._values;\n    }\n\n    set values(value: Value[]) {\n        this._values = value;\n    }\n\n    get field(): Field {\n        return this._field;\n    }\n\n    set field(value: Field) {\n        this._field = value;\n    }\n\n    get mutation(): Mutation {\n        return this._mutation;\n    }\n\n    set mutation(mutation: Mutation) {\n        this._mutation = mutation;\n    }\n\n    public toXML(): string {\n        const tagName = this._shadow ? 'shadow' : 'block';\n        let xml = `<${tagName} type=\"${this.type}\" disabled=\"${this.disabled}\">`;\n        for (const value of this.values) {\n            xml += value.toXML();\n        }\n        xml += this.field ? this.field.toXML() : '';\n        if (this._mutation) {\n            xml += this._mutation.toXML();\n        }\n        xml += `</${tagName}>`;\n        return xml;\n    }\n}\n\nexport class Value {\n    private _name: string;\n    private _block: XmlBlock;\n\n    constructor(name: string, block: XmlBlock) {\n        this._name = name;\n        this._block = block;\n    }\n\n    get name(): string {\n        return this._name;\n    }\n\n    set name(value: string) {\n        this._name = value;\n    }\n\n    get block(): XmlBlock {\n        return this._block;\n    }\n\n    set block(value: XmlBlock) {\n        this._block = value;\n    }\n\n    public toXML(): string {\n        return `<value name=\"${this.name}\">` + this.block.toXML() + '</value>';\n    }\n}\n\nexport class Field {\n    private _name: string;\n    private _value: string;\n\n    constructor(name: string, value: string) {\n        this._name = name;\n        this._value = value;\n    }\n\n    get name(): string {\n        return this._name;\n    }\n\n    set name(value: string) {\n        this._name = value;\n    }\n\n    get value(): string {\n        return this._value;\n    }\n\n    set value(value: string) {\n        this._value = value;\n    }\n\n    public toXML(): string {\n        return `<field name=\"${this.name}\">` + this.value + '</field>';\n    }\n}\n\nexport class Mutation {\n\n    private _name: string;\n    private _value: string;\n\n    constructor(name: string, value: string) {\n        this._name = name;\n        this._value = value;\n    }\n\n    get name(): string {\n        return this._name;\n    }\n\n    set name(value: string) {\n        this._name = value;\n    }\n\n    get value(): string {\n        return this._value;\n    }\n\n    set value(value: string) {\n        this._value = value;\n    }\n\n    public toXML(): string {\n        return '<mutation ' + this.name + ' = \"' + this.value + '\"></mutation>';\n    }\n}\n","import { UUID } from 'angular2-uuid';\nimport { Node } from './node';\nimport { XmlBlock } from './xml-block';\n\nexport class Category implements Node {\n\n    private _nodes: Node [];\n    private _colour: string;\n    private _name: string;\n    private _custom: string;\n    private _style: string;\n    private _cssClass: string;\n    private _toolboxItemId: string;\n    private _hidden: boolean;\n\n    constructor(name: string,\n                colour: string,\n                nodes?: Node [],\n                custom?: string,\n                style?: string,\n                cssClass?: string,\n                toolboxItemId?: string,\n                hidden?: boolean) {\n        this._name = name;\n        this._nodes = nodes ? nodes : [];\n        this._colour = colour;\n        this._custom = custom;\n        this._style = style;\n        this._cssClass = cssClass;\n        this._toolboxItemId = toolboxItemId ? toolboxItemId : UUID.UUID();\n        this._hidden = hidden;\n    }\n\n    get nodes(): Node[] {\n        return this._nodes;\n    }\n\n    set nodes(nodes: Node[]) {\n        this._nodes = nodes;\n    }\n\n    get colour(): string {\n        return this._colour;\n    }\n\n    set colour(value: string) {\n        this._colour = value;\n    }\n\n    get name(): string {\n        return this._name;\n    }\n\n    set name(value: string) {\n        this._name = value;\n    }\n\n    get custom(): string {\n        return this._custom;\n    }\n\n    set custom(value: string) {\n        this._custom = value;\n    }\n\n    get style(): string {\n        return this._style;\n    }\n\n    set style(value: string) {\n        this._style = value;\n    }\n\n    get cssClass(): string {\n        return this._cssClass;\n    }\n\n    set cssClass(value: string) {\n        this._cssClass = value;\n    }\n\n    get toolboxItemId(): string {\n        return this._toolboxItemId;\n    }\n\n    set toolboxItemId(value: string) {\n        this._toolboxItemId = value;\n    }\n\n    get hidden(): boolean {\n        return this._hidden;\n    }\n\n    set hidden(value: boolean) {\n        this._hidden = value;\n    }\n\n    public toXML(): string {\n        let xml = `<category expanded=\"false\" name=\"${this.name}\"`;\n\n        if (this.toolboxItemId) {\n            xml += ` toolboxitemid=\"${this.toolboxItemId}\"`;\n        }\n\n        if (!this.style) {\n            xml += ` colour=\"${this.colour}\"`;\n        } else {\n            xml += ` categorystyle=\"${this.style}\"`;\n        }\n\n        if (this.hidden) {\n            xml += ' hidden=\"true\"';\n        }\n\n        xml += this.cssClass ? ` categoryclass=\"${this.cssClass}\"` : '';\n        xml += this.custom ? ` custom=\"${this.custom}\">` : '>';\n\n        for (const element of this.nodes) {\n            xml += element.toXML();\n        }\n\n        xml += '</category>';\n\n        return xml;\n    }\n}\n\nexport const LOGIC_CATEGORY: Category = new Category('Logic', '%{BKY_LOGIC_HUE}', [\n    new XmlBlock('controls_if'),\n    new XmlBlock('logic_compare'),\n    new XmlBlock('logic_operation'),\n    new XmlBlock('logic_negate'),\n    new XmlBlock('logic_boolean'),\n    new XmlBlock('logic_null'),\n    new XmlBlock('logic_ternary'),\n]);\n\nexport const LOOP_CATEGORY: Category = new Category('Loops', '%{BKY_LOOPS_HUE}', [\n    new XmlBlock('controls_repeat_ext'),\n    new XmlBlock('controls_whileUntil'),\n    new XmlBlock('controls_for'),\n    new XmlBlock('controls_forEach'),\n    new XmlBlock('controls_flow_statements')\n]);\n\nexport const MATH_CATEGORY: Category = new Category('Math', '%{BKY_MATH_HUE}', [\n    new XmlBlock('math_number'),\n    new XmlBlock('math_arithmetic'),\n    new XmlBlock('math_single'),\n    new XmlBlock('math_trig'),\n    new XmlBlock('math_constant'),\n    new XmlBlock('math_number_property'),\n    new XmlBlock('math_round'),\n    new XmlBlock('math_on_list'),\n    new XmlBlock('math_modulo'),\n    new XmlBlock('math_constrain'),\n    new XmlBlock('math_random_int'),\n    new XmlBlock('math_random_float'),\n    new XmlBlock('math_atan2')\n]);\n\nexport const TEXT_CATEGORY: Category = new Category('Text', '%{BKY_TEXTS_HUE}', [\n    new XmlBlock('text'),\n    new XmlBlock('text_join'),\n    new XmlBlock('text_append'),\n    new XmlBlock('text_length'),\n    new XmlBlock('text_count'),\n    new XmlBlock('text_isEmpty'),\n    new XmlBlock('text_indexOf'),\n    new XmlBlock('text_charAt'),\n    new XmlBlock('text_getSubstring'),\n    new XmlBlock('text_changeCase'),\n    new XmlBlock('text_multiline'),\n    new XmlBlock('text_replace'),\n    new XmlBlock('text_reverse'),\n    new XmlBlock('text_trim'),\n    new XmlBlock('text_print'),\n    new XmlBlock('text_prompt'),\n    new XmlBlock('text_prompt_ext')\n]);\n\nexport const LISTS_CATEGORY: Category = new Category('Lists', '%{BKY_LISTS_HUE}', [\n    new XmlBlock('lists_create_with'),\n    new XmlBlock('lists_create_empty'),\n    new XmlBlock('lists_repeat'),\n    new XmlBlock('lists_reverse'),\n    new XmlBlock('lists_length'),\n    new XmlBlock('lists_isEmpty'),\n    new XmlBlock('lists_indexOf'),\n    new XmlBlock('lists_getIndex'),\n    new XmlBlock('lists_setIndex'),\n    new XmlBlock('lists_getSublist'),\n    new XmlBlock('lists_split'),\n    new XmlBlock('lists_sort'),\n]);\n\nexport const COLOUR_CATEGORY: Category = new Category('Colours', '%{BKY_COLOUR_HUE}', [\n    new XmlBlock('colour_picker'),\n    new XmlBlock('colour_random'),\n    new XmlBlock('colour_rgb'),\n    new XmlBlock('colour_blend')\n]);\n\nexport const VARIABLES_CATEGORY: Category = new Category('Variables', '%{BKY_VARIABLES_HUE}', [], 'VARIABLE');\n\nexport const FUNCTIONS_CATEGORY: Category = new Category('Functions', '%{BKY_PROCEDURES_HUE}', [], 'PROCEDURE');\n","import { Node } from './node';\n\nexport class Button implements Node {\n\n    public kind = 'BUTTON';\n    private _text: string;\n    private _callbackKey: string;\n\n    constructor(text: string, callbackKey: string) {\n        this._text = text;\n        this._callbackKey = callbackKey;\n    }\n\n    get text(): string {\n        return this._text;\n    }\n\n    set text(value: string) {\n        this._text = value;\n    }\n\n    get callbackKey(): string {\n        return this._callbackKey;\n    }\n\n    set callbackKey(value: string) {\n        this._callbackKey = value;\n    }\n\n    public toXML(): string {\n        return `<button text=\"${this.text}\" callbackKey=\"${this.callbackKey}\"></button>`;\n    }\n}\n","import { Node } from './node';\n\nexport class Label implements Node {\n\n    public kind = 'LABEL';\n    private _text: string;\n    private _webClass: string;\n\n    constructor(text: string, _webClass: string) {\n        this._text = text;\n        this._webClass = _webClass;\n    }\n\n    get text(): string {\n        return this._text;\n    }\n\n    set text(value: string) {\n        this._text = value;\n    }\n\n    get webClass(): string {\n        return this._webClass;\n    }\n\n    set webClass(value: string) {\n        this._webClass = value;\n    }\n\n    public toXML(): string {\n        return `<label text=\"${this.text}\" web-class=\"${this.webClass}\"></label>`;\n    }\n}\n","import { Node } from './node';\n\nexport class Separator implements Node {\n\n    public kind = 'SEP';\n\n    public toXML(): string {\n        return '<sep></sep>';\n    }\n}\n","import * as Blockly from 'blockly/core';\n\nexport class Theme {\n    constructor(private name: string,\n                private blockStyles: BlockStyles,\n                private categoryStyles: CategoryStyles,\n                private componentStyle: Blockly.Theme.ComponentStyle) {\n    }\n\n    createBlocklyTheme(): any {\n        return new Blockly.Theme(this.name, this.blockStyles, this.categoryStyles, this.componentStyle);\n    }\n}\n\nexport interface BlockStyles {\n    [blockStyleName: string]: Blockly.Theme.BlockStyle;\n}\n\nexport interface CategoryStyles {\n    [categoryStyleName: string]: Blockly.Theme.CategoryStyle;\n}\n\n\nexport class BlockStyle {\n    colourPrimary: string;\n    colourSecondary: string;\n    colourTertiary: string;\n    hat: string;\n}\n","export abstract class BlockMutator {\n\n    private _name: string;\n    private _blockList: string[];\n\n    constructor(name: string, blockList: string[] = null) {\n        this._name = name;\n        this._blockList = blockList;\n    }\n\n    public abstract decompose(block: any, workspace: any);\n\n    public abstract compose(block: any, topBlock: any);\n\n    public abstract saveConnections(block: any, containerBlock: any);\n\n    public abstract afterBlockInit(block: any);\n\n    public abstract saveExtraState();\n\n    public abstract loadExtraState(state);\n\n    /**\n     * @deprecated Use saveExtraState instead\n     * https://developers.google.com/blockly/guides/create-custom-blocks/extensions#saveextrastate_and_loadextra\n     */\n    public mutationToDom(block: any) {\n    }\n\n    /**\n     * @deprecated Use loadExtraState instead\n     * https://developers.google.com/blockly/guides/create-custom-blocks/extensions#saveextrastate_and_loadextrastate\n     */\n    public domToMutation(block: any, xmlElement: any) {\n    }\n\n    get name(): string {\n        return this._name;\n    }\n\n    set name(value: string) {\n        this._name = value;\n    }\n\n    get blockList(): string[] {\n        return this._blockList;\n    }\n\n    set blockList(value: string[]) {\n        this._blockList = value;\n    }\n}\n","import { UUID } from 'angular2-uuid';\nimport * as Blockly from 'blockly/core';\nimport { ICollapsibleToolboxItem, ToolboxCategory } from 'blockly/blockly';\nimport { Node } from '../models/node';\n\nexport class NgxBlocklyToolbox extends Blockly.Toolbox {\n\n    public readonly SEARCH_CATEGORY = 'SEARCH_CATEGORY';\n    public readonly SEARCH_PLACEHOLDER = 'SEARCH_PLACEHOLDER';\n    private readonly _SEARCHBAR_CLASS = 'searchbar';\n    private readonly _TOOLBAR_CLASS = 'toolbar';\n\n    protected _timeout: any;\n    protected _input: HTMLInputElement;\n    protected _categoryId = UUID.UUID();\n    protected _categoryExpandedCache: Map<String, boolean> = new Map<String, boolean>();\n    private _nodes: Node[];\n\n    constructor(workspace: Blockly.WorkspaceSvg) {\n        super(workspace);\n        workspace.addChangeListener(this._onWorkspaceChange.bind(this));\n    }\n\n    public init() {\n        super.init();\n        this._initSearchbar();\n    }\n\n    public render(parsedToolboxDef) {\n        if (parsedToolboxDef.contents.length === 0 || parsedToolboxDef.contents[0].toolboxitemid !== this._categoryId) {\n            const name = Blockly.Msg[this.SEARCH_CATEGORY] ? Blockly.Msg[this.SEARCH_CATEGORY] : 'Search';\n            const xmlDef =\n                '<xml>' +\n                '<category colour=\"#ccc\" expanded=\"false\" name=\"' + name + '\" hidden=\"true\" toolboxitemid=\"' + this._categoryId + '\"></category>' +\n                '</xml>';\n            const jsonDef = Blockly.utils.toolbox.convertToolboxDefToJson(xmlDef);\n            parsedToolboxDef.contents = [jsonDef.contents[0]].concat(parsedToolboxDef.contents);\n        }\n        super.render(parsedToolboxDef);\n        this._restoreExpandedState();\n    }\n\n    public clearSearch() {\n        this._clearSearchResult();\n        if (this._input) {\n            this._input.value = '';\n        }\n    }\n\n    public toXML(): string {\n        let xml = '<xml id=\"toolbox\" style=\"display: none\">';\n        if (this._nodes) {\n            for (const node of this._nodes) {\n                xml += node.toXML();\n            }\n        }\n        xml += '</xml>';\n        return xml;\n    }\n\n    get nodes(): Node[] {\n        return this._nodes;\n    }\n\n    set nodes(nodes: Node[]) {\n        this._nodes = nodes;\n    }\n\n    private _initSearchbar() {\n        this._input = document.createElement('input');\n        this._input.placeholder = Blockly.Msg[this.SEARCH_PLACEHOLDER] ? Blockly.Msg[this.SEARCH_PLACEHOLDER] : 'search';\n        this._input.className = this._SEARCHBAR_CLASS;\n        this._input.size = 1;\n        this._input.addEventListener('keyup', this._search.bind(this));\n        const element = this.HtmlDiv.firstChild as HTMLElement;\n        element.classList.add(this._TOOLBAR_CLASS);\n        this.HtmlDiv.insertBefore(this._input, element);\n    }\n\n    private _search(event) {\n\n        clearTimeout(this._timeout);\n        this._timeout = setTimeout(() => {\n\n            const searchKey = event.target.value.trim();\n            if (searchKey.length > 0) {\n\n                const result = this._recursiveSearch(searchKey, this.toolboxDef_);\n                if (result.length > 0) {\n                    const category = this.getToolboxItemById(this._categoryId) as ToolboxCategory;\n                    category.updateFlyoutContents(result);\n                    category.show();\n                    this.setSelectedItem(category);\n                } else {\n                    this._clearSearchResult();\n                }\n            } else {\n                this._clearSearchResult();\n            }\n        }, 100);\n    }\n\n    private _recursiveSearch(searchKey, child): any[] {\n        let blockDefs = [];\n        if (child.contents && Array.isArray(child.contents)) {\n            if (child.toolboxitemid && child.toolboxitemid === this._categoryId) {\n                return blockDefs;\n            }\n            for (let i = 0; i < child.contents.length; i++) {\n                if (typeof (child.contents[i]) === 'object' && child.contents[i].kind) {\n                    if (child.contents[i].kind === 'BLOCK' && child.contents[i].type) {\n                        const type = child.contents[i].type;\n                        if (this._compare(searchKey, type)) {\n                            blockDefs.push(child.contents[i]);\n                        } else {\n                            const workspace = new Blockly.Workspace();\n                            const searchBlock = workspace.newBlock(type);\n                            if (this._compare(searchKey, searchBlock.tooltip.toString())) {\n                                blockDefs.push(child.contents[i]);\n                            }\n                            workspace.dispose();\n                        }\n                    } else if (child.contents[i].kind === 'CATEGORY') {\n                        const result = this._recursiveSearch(searchKey, child.contents[i]);\n                        blockDefs = [...blockDefs, ...result];\n                    }\n                }\n            }\n        }\n        return blockDefs;\n    }\n\n    private _clearSearchResult() {\n        const flyout = this.workspace_.getFlyout();\n        if (flyout) {\n            flyout.hide();\n        }\n        const category: ToolboxCategory = this.getToolboxItemById(this._categoryId) as ToolboxCategory;\n        if (category) {\n            category.hide();\n        }\n    }\n\n    private _storeExpandedState() {\n        this.getToolboxItems().forEach(item => {\n            if (item.getId() !== this._categoryId) {\n                const collapsibleItem = item as ICollapsibleToolboxItem;\n                if (typeof collapsibleItem.isExpanded === 'function') {\n                    this._categoryExpandedCache.set(collapsibleItem.getId(), collapsibleItem.isExpanded());\n                }\n            }\n        });\n    }\n\n    private _restoreExpandedState() {\n        this._categoryExpandedCache.forEach((expanded: boolean, id: string) => {\n            const collapsibleItem = this.getToolboxItemById(id) as ICollapsibleToolboxItem;\n            if (collapsibleItem && typeof collapsibleItem.isExpanded === 'function') {\n                this._categoryExpandedCache.set(collapsibleItem.getId(), collapsibleItem.isExpanded());\n            }\n        });\n    }\n\n    private _onWorkspaceChange(event: any) {\n        if (event.type === Blockly.Events.TOOLBOX_ITEM_SELECT) {\n            this._storeExpandedState();\n        }\n    }\n\n    private _compare(str1: string, str2: string): boolean {\n        if (typeof str1 === 'string' && typeof str2 === 'string') {\n            str1 = this._prepareString(str1);\n            str2 = this._prepareString(str2);\n            if (str1.length > 0 && str2.length > 0) {\n                const array1: string[] = str1.split('_');\n                const array2: string[] = str2.split('_');\n                for (let i1 = 0; i1 < array1.length; i1++) {\n                    for (let i2 = 0; i2 < array2.length; i2++) {\n                        if (array2[i2].startsWith(array1[i1])) {\n                            return true;\n                        }\n                    }\n                }\n            }\n        }\n        return false;\n    }\n\n    private _prepareString(str): string {\n        str = this._breakUpCamelCase(str);\n        str = str.toLowerCase().trim();\n        return this._replaceWhitespaceWithUnderscore(str);\n    }\n\n    private _breakUpCamelCase(str): string {\n        return str.replace(/([A-Z])/g, ' $1');\n    }\n\n    private _replaceWhitespaceWithUnderscore(str): string {\n        return str.replace(/\\s+/g, '_');\n    }\n}\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { NgxBlocklyComponent } from './ngx-blockly/ngx-blockly.component';\nimport * as Blockly from 'blockly/core';\n\n@NgModule({\n    declarations: [NgxBlocklyComponent],\n    imports: [],\n    exports: [NgxBlocklyComponent],\n    providers: [],\n    schemas: [NO_ERRORS_SCHEMA]\n})\nexport class NgxBlocklyModule {\n}\n\n// Still needed?\n// Blockly.ToolboxCategory.prototype.parseContents_ = function (categoryDef) {\n//     const contents = categoryDef['contents'];\n//     if (categoryDef['custom']) {\n//         this.flyoutItems_ = categoryDef['custom'];\n//     } else if (contents) {\n//         for (let i = 0, itemDef; (itemDef = contents[i]); i++) {\n//             const flyoutItem = (itemDef);\n//             this.flyoutItems_.push(flyoutItem);\n//         }\n//     }\n//     if (categoryDef['categoryclass']) {\n//         this.cssConfig_.row += ' ' + categoryDef['categoryclass'];\n//     }\n// };\n\nBlockly.CollapsibleToolboxCategory.prototype.parseContents_ = function (categoryDef) {\n    const contents = categoryDef['contents'];\n    let prevIsFlyoutItem = true;\n    if (categoryDef['custom']) {\n        this.flyoutItems_ = categoryDef['custom'];\n    } else if (contents) {\n        for (let i = 0, itemDef; (itemDef = contents[i]); i++) {\n            // Separators can exist as either a flyout item or a toolbox item so\n            // decide where it goes based on the type of the previous item.\n            if (!Blockly.registry.hasItem(Blockly.registry.Type.TOOLBOX_ITEM, itemDef['kind']) ||\n                (itemDef['kind'].toLowerCase() === Blockly.ToolboxSeparator.registrationName &&\n                    prevIsFlyoutItem)) {\n                const flyoutItem = (itemDef);\n                this.flyoutItems_.push(flyoutItem);\n                prevIsFlyoutItem = true;\n            } else {\n                this.createToolboxItem_(itemDef);\n                prevIsFlyoutItem = false;\n            }\n        }\n    }\n    if (categoryDef['categoryclass']) {\n        this.cssConfig_.row += ' ' + categoryDef['categoryclass'];\n    }\n};\n\n","/*\n * Public API Surface of ngx-blockly\n */\nimport * as Blockly from 'blockly/core';\n\nexport { Blockly };\n\n// Locales\nimport * as EN from 'blockly/msg/en';\n\nBlockly.setLocale(EN);\n\nexport * from './lib/ngx-blockly/ngx-blockly.component';\nexport * from './lib/ngx-blockly/ngx-blockly.config';\nexport * from './lib/ngx-blockly/ngx-blockly-generator.config';\nexport * from './lib/ngx-blockly/models/block';\nexport * from './lib/ngx-blockly/models/custom-block';\nexport * from './lib/ngx-blockly/models/xml-block';\nexport * from './lib/ngx-blockly/models/category';\nexport * from './lib/ngx-blockly/models/button';\nexport * from './lib/ngx-blockly/models/label';\nexport * from './lib/ngx-blockly/models/separator';\nexport * from './lib/ngx-blockly/models/theme';\nexport * from './lib/ngx-blockly/models/node';\nexport * from './lib/ngx-blockly/models/block-mutator';\nexport * from './lib/ngx-blockly/plugins/ngx-blockly.toolbox';\nexport * from './lib/ngx-blockly.module';\n\n\n\n\n\n\n\n\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;AAEY,IAAA,oBAOX;AAPD,CAAA,UAAY,mBAAmB,EAAA;AAC3B,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,mBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,mBAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,mBAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,mBAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACf,CAAC,EAPW,mBAAmB,KAAnB,mBAAmB,GAO9B,EAAA,CAAA,CAAA;;MCoBY,mBAAmB,CAAA;AALhC,IAAA,WAAA,GAAA;AAOkB,QAAA,IAAM,CAAA,MAAA,GAAqB,EAAE,CAAC;AAC9B,QAAA,IAAY,CAAA,YAAA,GAAkB,EAAE,CAAC;AACjC,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAChB,QAAA,IAAA,CAAA,eAAe,GAAuC,IAAI,YAAY,EAAwB,CAAC;AAC/F,QAAA,IAAA,CAAA,eAAe,GAAmD,IAAI,YAAY,EAAoC,CAAC;AACvH,QAAA,IAAA,CAAA,aAAa,GAAsB,IAAI,YAAY,EAAO,CAAC;AAC3D,QAAA,IAAA,CAAA,QAAQ,GAAyB,IAAI,YAAY,EAAU,CAAC;AAC5D,QAAA,IAAA,CAAA,cAAc,GAAyB,IAAI,YAAY,EAAU,CAAC;AAClE,QAAA,IAAA,CAAA,OAAO,GAAyB,IAAI,YAAY,EAAU,CAAC;AAC3D,QAAA,IAAA,CAAA,OAAO,GAAyB,IAAI,YAAY,EAAU,CAAC;AAC3D,QAAA,IAAA,CAAA,UAAU,GAAyB,IAAI,YAAY,EAAU,CAAC;AAC9D,QAAA,IAAA,CAAA,OAAO,GAAyB,IAAI,YAAY,EAAU,CAAC;AAOpE,QAAA,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;KA2QlC;IAzQQ,OAAO,gBAAgB,CAAC,MAAqB,EAAA;AAClD,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,KAAK,MAAM,WAAW,IAAI,MAAM,EAAE;AAChC,gBAAA,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG;AACjC,oBAAA,IAAI,EAAE,YAAA;wBACJ,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,YAAY,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AACrG,wBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACjB,IAAI,CAAC,KAAK,CAAC;AACP,4BAAA,aAAa,EAAE,KAAK;AACrB,yBAAA,CACF,CAAC;qBACH;iBACF,CAAC;AACF,gBAAA,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,EAAA;oBAC7C,OAAO,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACzC,iBAAC,CAAC;AACF,gBAAA,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,EAAA;oBAC3C,OAAO,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvC,iBAAC,CAAC;AACF,gBAAA,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,EAAA;oBACjD,OAAO,CAAC,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC7C,iBAAC,CAAC;AACF,gBAAA,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,EAAA;oBAC1C,OAAO,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACtC,iBAAC,CAAC;AACF,gBAAA,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,EAAA;oBAC1C,OAAO,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACtC,iBAAC,CAAC;gBACF,IAAI,WAAW,CAAC,YAAY,EAAE;AAC5B,oBAAA,MAAM,aAAa,GAAQ;AACzB,wBAAA,aAAa,EAAE,YAAA;AACb,4BAAA,OAAO,WAAW,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;yBACpF;wBACD,aAAa,EAAE,UAAU,UAAe,EAAA;AACtC,4BAAA,WAAW,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;yBACzF;AACD,wBAAA,cAAc,EAAE,YAAA;AACd,4BAAA,OAAO,WAAW,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;yBAC/E;wBACD,cAAc,EAAE,UAAU,KAAU,EAAA;AAClC,4BAAA,WAAW,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;yBAC/E;qBACF,CAAC;AACF,oBAAA,IAAI,WAAW,CAAC,YAAY,CAAC,SAAS,IAAI,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACvF,wBAAA,aAAa,CAAC,SAAS,GAAG,UAAU,SAAc,EAAA;AAChD,4BAAA,OAAO,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC5F,yBAAC,CAAC;AACF,wBAAA,aAAa,CAAC,OAAO,GAAG,UAAU,QAAa,EAAA;AAC7C,4BAAA,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAClF,yBAAC,CAAC;AACF,wBAAA,aAAa,CAAC,eAAe,GAAG,UAAU,cAAmB,EAAA;AAC3D,4BAAA,WAAW,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAChG,yBAAC,CAAC;AACH,qBAAA;oBACD,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC7D,oBAAA,OAAO,CAAC,UAAU,CAAC,eAAe,CAChC,WAAW,CAAC,YAAY,CAAC,IAAI,EAC7B,aAAa,EACb,YAAA;AACE,wBAAA,WAAW,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC/E,qBAAC,EACD,WAAW,CAAC,YAAY,CAAC,SAAS,CACnC,CAAC;AACH,iBAAA;AACF,aAAA;AACF,SAAA;KACF;IAED,QAAQ,GAAA;AACN,QAAA,mBAAmB,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACzD;IAED,eAAe,GAAA;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;AACvD,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAClF,QAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC7B,SAAA;KACF;AAED,IAAA,WAAW,CAAC,OAA4C,EAAA;;AAEtD,QAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAChD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACjD,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAC1B,SAAA;QACD,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;AACpC,SAAA;KACF;AAGD,IAAA,QAAQ,CAAC,KAAK,EAAA;AACZ,QAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;KAC5D;AAED;;;AAGG;AACI,IAAA,eAAe,CAAC,WAAmB,EAAA;QACxC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAC9C,YAAA,QAAQ,SAAS;gBACf,KAAK,mBAAmB,CAAC,IAAI;AAC3B,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBAC1F,MAAM;gBACR,KAAK,mBAAmB,CAAC,GAAG;AAC1B,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBACxF,MAAM;gBACR,KAAK,mBAAmB,CAAC,UAAU;AACjC,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBACtG,MAAM;gBACR,KAAK,mBAAmB,CAAC,GAAG;AAC1B,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBACxF,MAAM;gBACR,KAAK,mBAAmB,CAAC,MAAM;AAC7B,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBAC9F,MAAM;gBACR,KAAK,mBAAmB,CAAC,GAAG;AAC1B,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnH,MAAM;AACT,aAAA;AACF,SAAA;KACF;AAED;;;AAGG;IACI,KAAK,GAAA;AACV,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;KAChF;AAED;;;;AAIG;AACI,IAAA,OAAO,CAAC,GAAW,EAAA;AACxB,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC9B,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACrF,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAChG,SAAA;KACF;AAED;;;;AAIG;AACI,IAAA,aAAa,CAAC,GAAW,EAAA;AAC9B,QAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7E,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACxF,SAAA;KACF;AAED;;AAEG;IACI,KAAK,GAAA;QACV,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACxB,SAAA;KACF;AAED;;AAEG;IACI,SAAS,GAAA;QACd,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;AAC5B,SAAA;KACF;AAED;;AAEG;IACI,YAAY,GAAA;QACjB,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;AAC/B,SAAA;KACF;AAED;;AAEG;IACI,WAAW,GAAA;QAChB,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAuB,CAAC;YACjE,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,UAAU,EAAE;gBACxD,OAAO,CAAC,WAAW,EAAE,CAAC;AACvB,aAAA;AACF,SAAA;KACF;AAED;;;AAGG;IACI,MAAM,GAAA;QACX,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnC,SAAA;QACD,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC7C,SAAA;KACF;AAEM,IAAA,WAAW,CAAC,QAAiB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjE,YAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAC7B,gBAAA,MAAM,MAAM,GAAQ,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,MAAM,CAAE,CAAC;AAClC,gBAAA,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,gBAAA,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAC1F,aAAA;YACD,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACxG,YAAA,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC7C,SAAA;AAAM,aAAA;YACL,IAAI,IAAI,CAAC,mBAAmB,EAAE;gBAC5B,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/D,aAAA;AACF,SAAA;KACF;AAEM,IAAA,cAAc,CAAC,OAAe,EAAA;QACnC,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACxC,SAAA;QACD,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAClD,SAAA;KACF;AAEO,IAAA,kBAAkB,CAAC,KAAU,EAAA;AACnC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE;AAClD,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC9B,SAAA;QACD,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,KAAK,YAAY,OAAO,CAAC,MAAM,CAAC,SAAS;AAC3C,gBAAA,KAAK,YAAY,OAAO,CAAC,MAAM,CAAC,OAAO;AACvC,gBAAA,KAAK,YAAY,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE;AAC7C,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACzC,aAAA;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE;AACrD,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,aAAA;AACF,SAAA;KACF;;iHA9RU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,4rBC7BhC,qLAIA,EAAA,MAAA,EAAA,CAAA,qrCAAA,CAAA,EAAA,CAAA,CAAA;4FDyBa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,aAAa,EAAA,QAAA,EAAA,qLAAA,EAAA,MAAA,EAAA,CAAA,qrCAAA,CAAA,EAAA,CAAA;8BAMP,MAAM,EAAA,CAAA;sBAArB,KAAK;gBACU,YAAY,EAAA,CAAA;sBAA3B,KAAK;gBACU,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBACW,eAAe,EAAA,CAAA;sBAA/B,MAAM;gBACU,eAAe,EAAA,CAAA;sBAA/B,MAAM;gBACU,aAAa,EAAA,CAAA;sBAA7B,MAAM;gBACU,QAAQ,EAAA,CAAA;sBAAxB,MAAM;gBACU,cAAc,EAAA,CAAA;sBAA9B,MAAM;gBACU,OAAO,EAAA,CAAA;sBAAvB,MAAM;gBACU,OAAO,EAAA,CAAA;sBAAvB,MAAM;gBACU,UAAU,EAAA,CAAA;sBAA1B,MAAM;gBACU,OAAO,EAAA,CAAA;sBAAvB,MAAM;gBAEwB,gBAAgB,EAAA,CAAA;sBAA9C,SAAS;uBAAC,kBAAkB,CAAA;gBACI,kBAAkB,EAAA,CAAA;sBAAlD,SAAS;uBAAC,oBAAoB,CAAA;gBA6G/B,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MEzJ9B,yBAAyB,CAAA;AAOrC;;MCAqB,KAAK,CAAA;AAOvB,IAAA,WAAA,CAAsB,IAAY,EAAA;AAL3B,QAAA,IAAI,CAAA,IAAA,GAAG,OAAO,CAAC;AAGd,QAAA,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAGtB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;KACrB;AAED,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IAED,IAAI,IAAI,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACtB;AAED,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IAED,IAAI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KAC1B;AAED,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IAED,IAAI,KAAK,CAAC,KAAkB,EAAA;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACvB;AAGJ;;ACvCK,MAAgB,WAAY,SAAQ,KAAK,CAAA;AAO3C,IAAA,WAAA,CAAsB,IAAY,EAAE,YAA2B,EAAE,GAAG,IAAW,EAAA;QAC3E,KAAK,CAAC,IAAI,CAAC,CAAC;AACZ,QAAA,IAAI,CAAC,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,IAAI,CAAC;AACxD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;KACrB;AAEM,IAAA,IAAI,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,KAAK,EAAA;AAClC,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvC,SAAC,CAAC,CAAC;KACN;AAIM,IAAA,QAAQ,CAAC,WAA6C,EAAA;;KAE5D;IAEM,KAAK,GAAA;QACR,OAAO,CAAA,aAAA,EAAgB,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC,QAAQ,CAAA,UAAA,CAAY,CAAC;KAC5E;AAEM,IAAA,UAAU,CAAC,KAAoB,EAAA;AAClC,QAAA,OAAO,iBAAiB,CAAC;KAC5B;AAEM,IAAA,gBAAgB,CAAC,KAAoB,EAAA;AACxC,QAAA,OAAO,iBAAiB,CAAC;KAC5B;AAEM,IAAA,SAAS,CAAC,KAAoB,EAAA;AACjC,QAAA,OAAO,iBAAiB,CAAC;KAC5B;AAEM,IAAA,SAAS,CAAC,KAAoB,EAAA;AACjC,QAAA,OAAO,iBAAiB,CAAC;KAC5B;AAEM,IAAA,YAAY,CAAC,KAAoB,EAAA;AACpC,QAAA,OAAO,iBAAiB,CAAC;KAC5B;AAED,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IAED,IAAI,KAAK,CAAC,KAAqB,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACvB;AAED,IAAA,IAAI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IAED,IAAI,YAAY,CAAC,OAAqB,EAAA;AAClC,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;KAChC;AAED,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IAED,IAAI,IAAI,CAAC,IAAW,EAAA;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;KACrB;AACJ;;AC5EK,MAAO,QAAS,SAAQ,KAAK,CAAA;AAO/B,IAAA,WAAA,CAAY,IAAY,EAAE,MAAM,GAAG,KAAK,EAAA;QACpC,KAAK,CAAC,IAAI,CAAC,CAAC;AANR,QAAA,IAAO,CAAA,OAAA,GAAY,EAAE,CAAC;AAO1B,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;KACzB;AAED,IAAA,IAAI,MAAM,GAAA;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;IAED,IAAI,MAAM,CAAC,KAAc,EAAA;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACxB;AAED,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IAED,IAAI,KAAK,CAAC,KAAY,EAAA;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACvB;AAED,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IAED,IAAI,QAAQ,CAAC,QAAkB,EAAA;AAC3B,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;KAC7B;IAEM,KAAK,GAAA;AACR,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAClD,QAAA,IAAI,GAAG,GAAG,CAAI,CAAA,EAAA,OAAO,CAAU,OAAA,EAAA,IAAI,CAAC,IAAI,CAAe,YAAA,EAAA,IAAI,CAAC,QAAQ,IAAI,CAAC;AACzE,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AAC7B,YAAA,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;AACxB,SAAA;AACD,QAAA,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACjC,SAAA;AACD,QAAA,GAAG,IAAI,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,CAAG,CAAC;AACvB,QAAA,OAAO,GAAG,CAAC;KACd;AACJ,CAAA;MAEY,KAAK,CAAA;IAId,WAAY,CAAA,IAAY,EAAE,KAAe,EAAA;AACrC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACvB;AAED,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IAED,IAAI,IAAI,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACtB;AAED,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IAED,IAAI,KAAK,CAAC,KAAe,EAAA;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACvB;IAEM,KAAK,GAAA;AACR,QAAA,OAAO,CAAgB,aAAA,EAAA,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,UAAU,CAAC;KAC1E;AACJ,CAAA;MAEY,KAAK,CAAA;IAId,WAAY,CAAA,IAAY,EAAE,KAAa,EAAA;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACvB;AAED,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IAED,IAAI,IAAI,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACtB;AAED,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IAED,IAAI,KAAK,CAAC,KAAa,EAAA;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACvB;IAEM,KAAK,GAAA;QACR,OAAO,CAAA,aAAA,EAAgB,IAAI,CAAC,IAAI,CAAA,EAAA,CAAI,GAAG,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;KAClE;AACJ,CAAA;MAEY,QAAQ,CAAA;IAKjB,WAAY,CAAA,IAAY,EAAE,KAAa,EAAA;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACvB;AAED,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IAED,IAAI,IAAI,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACtB;AAED,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IAED,IAAI,KAAK,CAAC,KAAa,EAAA;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACvB;IAEM,KAAK,GAAA;AACR,QAAA,OAAO,YAAY,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC;KAC3E;AACJ;;MC1IY,QAAQ,CAAA;AAWjB,IAAA,WAAA,CAAY,IAAY,EACZ,MAAc,EACd,KAAe,EACf,MAAe,EACf,KAAc,EACd,QAAiB,EACjB,aAAsB,EACtB,MAAgB,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,aAAa,GAAG,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAClE,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;KACzB;AAED,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IAED,IAAI,KAAK,CAAC,KAAa,EAAA;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACvB;AAED,IAAA,IAAI,MAAM,GAAA;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;IAED,IAAI,MAAM,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACxB;AAED,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IAED,IAAI,IAAI,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACtB;AAED,IAAA,IAAI,MAAM,GAAA;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;IAED,IAAI,MAAM,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACxB;AAED,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IAED,IAAI,KAAK,CAAC,KAAa,EAAA;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACvB;AAED,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IAED,IAAI,QAAQ,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KAC1B;AAED,IAAA,IAAI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,cAAc,CAAC;KAC9B;IAED,IAAI,aAAa,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;KAC/B;AAED,IAAA,IAAI,MAAM,GAAA;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;IAED,IAAI,MAAM,CAAC,KAAc,EAAA;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACxB;IAEM,KAAK,GAAA;AACR,QAAA,IAAI,GAAG,GAAG,CAAA,iCAAA,EAAoC,IAAI,CAAC,IAAI,GAAG,CAAC;QAE3D,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,GAAG,IAAI,CAAmB,gBAAA,EAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACnD,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,YAAA,GAAG,IAAI,CAAY,SAAA,EAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACrC,SAAA;AAAM,aAAA;AACH,YAAA,GAAG,IAAI,CAAmB,gBAAA,EAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AAC3C,SAAA;QAED,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,GAAG,IAAI,gBAAgB,CAAC;AAC3B,SAAA;AAED,QAAA,GAAG,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAA,gBAAA,EAAmB,IAAI,CAAC,QAAQ,CAAG,CAAA,CAAA,GAAG,EAAE,CAAC;AAChE,QAAA,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAA,SAAA,EAAY,IAAI,CAAC,MAAM,CAAI,EAAA,CAAA,GAAG,GAAG,CAAC;AAEvD,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE;AAC9B,YAAA,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;AAC1B,SAAA;QAED,GAAG,IAAI,aAAa,CAAC;AAErB,QAAA,OAAO,GAAG,CAAC;KACd;AACJ,CAAA;AAEY,MAAA,cAAc,GAAa,IAAI,QAAQ,CAAC,OAAO,EAAE,kBAAkB,EAAE;IAC9E,IAAI,QAAQ,CAAC,aAAa,CAAC;IAC3B,IAAI,QAAQ,CAAC,eAAe,CAAC;IAC7B,IAAI,QAAQ,CAAC,iBAAiB,CAAC;IAC/B,IAAI,QAAQ,CAAC,cAAc,CAAC;IAC5B,IAAI,QAAQ,CAAC,eAAe,CAAC;IAC7B,IAAI,QAAQ,CAAC,YAAY,CAAC;IAC1B,IAAI,QAAQ,CAAC,eAAe,CAAC;AAChC,CAAA,EAAE;AAEU,MAAA,aAAa,GAAa,IAAI,QAAQ,CAAC,OAAO,EAAE,kBAAkB,EAAE;IAC7E,IAAI,QAAQ,CAAC,qBAAqB,CAAC;IACnC,IAAI,QAAQ,CAAC,qBAAqB,CAAC;IACnC,IAAI,QAAQ,CAAC,cAAc,CAAC;IAC5B,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAChC,IAAI,QAAQ,CAAC,0BAA0B,CAAC;AAC3C,CAAA,EAAE;AAEU,MAAA,aAAa,GAAa,IAAI,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE;IAC3E,IAAI,QAAQ,CAAC,aAAa,CAAC;IAC3B,IAAI,QAAQ,CAAC,iBAAiB,CAAC;IAC/B,IAAI,QAAQ,CAAC,aAAa,CAAC;IAC3B,IAAI,QAAQ,CAAC,WAAW,CAAC;IACzB,IAAI,QAAQ,CAAC,eAAe,CAAC;IAC7B,IAAI,QAAQ,CAAC,sBAAsB,CAAC;IACpC,IAAI,QAAQ,CAAC,YAAY,CAAC;IAC1B,IAAI,QAAQ,CAAC,cAAc,CAAC;IAC5B,IAAI,QAAQ,CAAC,aAAa,CAAC;IAC3B,IAAI,QAAQ,CAAC,gBAAgB,CAAC;IAC9B,IAAI,QAAQ,CAAC,iBAAiB,CAAC;IAC/B,IAAI,QAAQ,CAAC,mBAAmB,CAAC;IACjC,IAAI,QAAQ,CAAC,YAAY,CAAC;AAC7B,CAAA,EAAE;AAEU,MAAA,aAAa,GAAa,IAAI,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE;IAC5E,IAAI,QAAQ,CAAC,MAAM,CAAC;IACpB,IAAI,QAAQ,CAAC,WAAW,CAAC;IACzB,IAAI,QAAQ,CAAC,aAAa,CAAC;IAC3B,IAAI,QAAQ,CAAC,aAAa,CAAC;IAC3B,IAAI,QAAQ,CAAC,YAAY,CAAC;IAC1B,IAAI,QAAQ,CAAC,cAAc,CAAC;IAC5B,IAAI,QAAQ,CAAC,cAAc,CAAC;IAC5B,IAAI,QAAQ,CAAC,aAAa,CAAC;IAC3B,IAAI,QAAQ,CAAC,mBAAmB,CAAC;IACjC,IAAI,QAAQ,CAAC,iBAAiB,CAAC;IAC/B,IAAI,QAAQ,CAAC,gBAAgB,CAAC;IAC9B,IAAI,QAAQ,CAAC,cAAc,CAAC;IAC5B,IAAI,QAAQ,CAAC,cAAc,CAAC;IAC5B,IAAI,QAAQ,CAAC,WAAW,CAAC;IACzB,IAAI,QAAQ,CAAC,YAAY,CAAC;IAC1B,IAAI,QAAQ,CAAC,aAAa,CAAC;IAC3B,IAAI,QAAQ,CAAC,iBAAiB,CAAC;AAClC,CAAA,EAAE;AAEU,MAAA,cAAc,GAAa,IAAI,QAAQ,CAAC,OAAO,EAAE,kBAAkB,EAAE;IAC9E,IAAI,QAAQ,CAAC,mBAAmB,CAAC;IACjC,IAAI,QAAQ,CAAC,oBAAoB,CAAC;IAClC,IAAI,QAAQ,CAAC,cAAc,CAAC;IAC5B,IAAI,QAAQ,CAAC,eAAe,CAAC;IAC7B,IAAI,QAAQ,CAAC,cAAc,CAAC;IAC5B,IAAI,QAAQ,CAAC,eAAe,CAAC;IAC7B,IAAI,QAAQ,CAAC,eAAe,CAAC;IAC7B,IAAI,QAAQ,CAAC,gBAAgB,CAAC;IAC9B,IAAI,QAAQ,CAAC,gBAAgB,CAAC;IAC9B,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAChC,IAAI,QAAQ,CAAC,aAAa,CAAC;IAC3B,IAAI,QAAQ,CAAC,YAAY,CAAC;AAC7B,CAAA,EAAE;AAEU,MAAA,eAAe,GAAa,IAAI,QAAQ,CAAC,SAAS,EAAE,mBAAmB,EAAE;IAClF,IAAI,QAAQ,CAAC,eAAe,CAAC;IAC7B,IAAI,QAAQ,CAAC,eAAe,CAAC;IAC7B,IAAI,QAAQ,CAAC,YAAY,CAAC;IAC1B,IAAI,QAAQ,CAAC,cAAc,CAAC;AAC/B,CAAA,EAAE;AAEI,MAAM,kBAAkB,GAAa,IAAI,QAAQ,CAAC,WAAW,EAAE,sBAAsB,EAAE,EAAE,EAAE,UAAU,EAAE;AAEvG,MAAM,kBAAkB,GAAa,IAAI,QAAQ,CAAC,WAAW,EAAE,uBAAuB,EAAE,EAAE,EAAE,WAAW;;MC3MjG,MAAM,CAAA;IAMf,WAAY,CAAA,IAAY,EAAE,WAAmB,EAAA;AAJtC,QAAA,IAAI,CAAA,IAAA,GAAG,QAAQ,CAAC;AAKnB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;KACnC;AAED,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IAED,IAAI,IAAI,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACtB;AAED,IAAA,IAAI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;KAC5B;IAED,IAAI,WAAW,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;KAC7B;IAEM,KAAK,GAAA;QACR,OAAO,CAAA,cAAA,EAAiB,IAAI,CAAC,IAAI,kBAAkB,IAAI,CAAC,WAAW,CAAA,WAAA,CAAa,CAAC;KACpF;AACJ;;MC9BY,KAAK,CAAA;IAMd,WAAY,CAAA,IAAY,EAAE,SAAiB,EAAA;AAJpC,QAAA,IAAI,CAAA,IAAA,GAAG,OAAO,CAAC;AAKlB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC9B;AAED,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IAED,IAAI,IAAI,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACtB;AAED,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IAED,IAAI,QAAQ,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KAC1B;IAEM,KAAK,GAAA;QACR,OAAO,CAAA,aAAA,EAAgB,IAAI,CAAC,IAAI,gBAAgB,IAAI,CAAC,QAAQ,CAAA,UAAA,CAAY,CAAC;KAC7E;AACJ;;MC9BY,SAAS,CAAA;AAAtB,IAAA,WAAA,GAAA;AAEW,QAAA,IAAI,CAAA,IAAA,GAAG,KAAK,CAAC;KAKvB;IAHU,KAAK,GAAA;AACR,QAAA,OAAO,aAAa,CAAC;KACxB;AACJ;;MCPY,KAAK,CAAA;AACd,IAAA,WAAA,CAAoB,IAAY,EACZ,WAAwB,EACxB,cAA8B,EAC9B,cAA4C,EAAA;AAH5C,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;AACZ,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AACxB,QAAA,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;AAC9B,QAAA,IAAc,CAAA,cAAA,GAAd,cAAc,CAA8B;KAC/D;IAED,kBAAkB,GAAA;QACd,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;KACnG;AACJ,CAAA;MAWY,UAAU,CAAA;AAKtB;;MC5BqB,YAAY,CAAA;AAK9B,IAAA,WAAA,CAAY,IAAY,EAAE,SAAA,GAAsB,IAAI,EAAA;AAChD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;KAC/B;AAcD;;;AAGG;AACI,IAAA,aAAa,CAAC,KAAU,EAAA;KAC9B;AAED;;;AAGG;IACI,aAAa,CAAC,KAAU,EAAE,UAAe,EAAA;KAC/C;AAED,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IAED,IAAI,IAAI,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACtB;AAED,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IAED,IAAI,SAAS,CAAC,KAAe,EAAA;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KAC3B;AACJ;;AC9CY,MAAA,iBAA0B,SAAA,OAAO,CAAC,OAAO,CAAA;AAalD,IAAA,WAAA,CAAY,SAA+B,EAAA;QACvC,KAAK,CAAC,SAAS,CAAC,CAAC;AAZL,QAAA,IAAe,CAAA,eAAA,GAAG,iBAAiB,CAAC;AACpC,QAAA,IAAkB,CAAA,kBAAA,GAAG,oBAAoB,CAAC;AACzC,QAAA,IAAgB,CAAA,gBAAA,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAc,CAAA,cAAA,GAAG,SAAS,CAAC;AAIlC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC1B,QAAA,IAAA,CAAA,sBAAsB,GAAyB,IAAI,GAAG,EAAmB,CAAC;AAKhF,QAAA,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KACnE;IAEM,IAAI,GAAA;QACP,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,IAAI,CAAC,cAAc,EAAE,CAAC;KACzB;AAEM,IAAA,MAAM,CAAC,gBAAgB,EAAA;QAC1B,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,IAAI,CAAC,WAAW,EAAE;YAC3G,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,QAAQ,CAAC;YAC9F,MAAM,MAAM,GACR,OAAO;gBACP,iDAAiD,GAAG,IAAI,GAAG,iCAAiC,GAAG,IAAI,CAAC,WAAW,GAAG,eAAe;AACjI,gBAAA,QAAQ,CAAC;AACb,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;AACtE,YAAA,gBAAgB,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACvF,SAAA;AACD,QAAA,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAChC;IAEM,WAAW,GAAA;QACd,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;AAC1B,SAAA;KACJ;IAEM,KAAK,GAAA;QACR,IAAI,GAAG,GAAG,0CAA0C,CAAC;QACrD,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AAC5B,gBAAA,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;AACvB,aAAA;AACJ,SAAA;QACD,GAAG,IAAI,QAAQ,CAAC;AAChB,QAAA,OAAO,GAAG,CAAC;KACd;AAED,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IAED,IAAI,KAAK,CAAC,KAAa,EAAA;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACvB;IAEO,cAAc,GAAA;QAClB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,QAAQ,CAAC;QACjH,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC9C,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAyB,CAAC;QACvD,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnD;AAEO,IAAA,OAAO,CAAC,KAAK,EAAA;AAEjB,QAAA,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,MAAK;YAE5B,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC5C,YAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAEtB,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AAClE,gBAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAoB,CAAC;AAC9E,oBAAA,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;oBACtC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAChB,oBAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAClC,iBAAA;AAAM,qBAAA;oBACH,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC7B,iBAAA;AACJ,aAAA;AAAM,iBAAA;gBACH,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC7B,aAAA;SACJ,EAAE,GAAG,CAAC,CAAC;KACX;IAEO,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAA;QACrC,IAAI,SAAS,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACjD,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC,WAAW,EAAE;AACjE,gBAAA,OAAO,SAAS,CAAC;AACpB,aAAA;AACD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAI,QAAQ,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACnE,oBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;wBAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE;4BAChC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,yBAAA;AAAM,6BAAA;AACH,4BAAA,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;4BAC1C,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7C,4BAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE;gCAC1D,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,6BAAA;4BACD,SAAS,CAAC,OAAO,EAAE,CAAC;AACvB,yBAAA;AACJ,qBAAA;yBAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE;AAC9C,wBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;wBACnE,SAAS,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,MAAM,CAAC,CAAC;AACzC,qBAAA;AACJ,iBAAA;AACJ,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KACpB;IAEO,kBAAkB,GAAA;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;AAC3C,QAAA,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,IAAI,EAAE,CAAC;AACjB,SAAA;QACD,MAAM,QAAQ,GAAoB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAoB,CAAC;AAC/F,QAAA,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,IAAI,EAAE,CAAC;AACnB,SAAA;KACJ;IAEO,mBAAmB,GAAA;QACvB,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,IAAI,IAAG;YAClC,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE;gBACnC,MAAM,eAAe,GAAG,IAA+B,CAAC;AACxD,gBAAA,IAAI,OAAO,eAAe,CAAC,UAAU,KAAK,UAAU,EAAE;AAClD,oBAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAC1F,iBAAA;AACJ,aAAA;AACL,SAAC,CAAC,CAAC;KACN;IAEO,qBAAqB,GAAA;QACzB,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,QAAiB,EAAE,EAAU,KAAI;YAClE,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAA4B,CAAC;YAC/E,IAAI,eAAe,IAAI,OAAO,eAAe,CAAC,UAAU,KAAK,UAAU,EAAE;AACrE,gBAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAC1F,aAAA;AACL,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,kBAAkB,CAAC,KAAU,EAAA;QACjC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE;YACnD,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC9B,SAAA;KACJ;IAEO,QAAQ,CAAC,IAAY,EAAE,IAAY,EAAA;QACvC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACtD,YAAA,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACjC,YAAA,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpC,MAAM,MAAM,GAAa,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzC,MAAM,MAAM,GAAa,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzC,gBAAA,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;AACvC,oBAAA,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;AACvC,wBAAA,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE;AACnC,4BAAA,OAAO,IAAI,CAAC;AACf,yBAAA;AACJ,qBAAA;AACJ,iBAAA;AACJ,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAEO,IAAA,cAAc,CAAC,GAAG,EAAA;AACtB,QAAA,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAClC,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;AAC/B,QAAA,OAAO,IAAI,CAAC,gCAAgC,CAAC,GAAG,CAAC,CAAC;KACrD;AAEO,IAAA,iBAAiB,CAAC,GAAG,EAAA;QACzB,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KACzC;AAEO,IAAA,gCAAgC,CAAC,GAAG,EAAA;QACxC,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACnC;AACJ;;MC9LY,gBAAgB,CAAA;;8GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAhB,gBAAgB,EAAA,YAAA,EAAA,CANV,mBAAmB,CAAA,EAAA,OAAA,EAAA,CAExB,mBAAmB,CAAA,EAAA,CAAA,CAAA;+GAIpB,gBAAgB,EAAA,CAAA,CAAA;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,YAAY,EAAE,CAAC,mBAAmB,CAAC;AACnC,oBAAA,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE,CAAC,mBAAmB,CAAC;AAC9B,oBAAA,SAAS,EAAE,EAAE;oBACb,OAAO,EAAE,CAAC,gBAAgB,CAAC;iBAC9B,CAAA;;AAID;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,OAAO,CAAC,0BAA0B,CAAC,SAAS,CAAC,cAAc,GAAG,UAAU,WAAW,EAAA;AAC/E,IAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,gBAAgB,GAAG,IAAI,CAAC;AAC5B,IAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC7C,KAAA;AAAM,SAAA,IAAI,QAAQ,EAAE;AACjB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;;;AAGnD,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC9E,iBAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,gBAAgB,CAAC,gBAAgB;AACxE,oBAAA,gBAAgB,CAAC,EAAE;AACvB,gBAAA,MAAM,UAAU,IAAI,OAAO,CAAC,CAAC;AAC7B,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACnC,gBAAgB,GAAG,IAAI,CAAC;AAC3B,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBACjC,gBAAgB,GAAG,KAAK,CAAC;AAC5B,aAAA;AACJ,SAAA;AACJ,KAAA;AACD,IAAA,IAAI,WAAW,CAAC,eAAe,CAAC,EAAE;QAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;AAC7D,KAAA;AACL,CAAC;;ACtDD;;AAEG;AAQH,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;;ACVrB;;AAEG;;;;"}