UNPKG

36.9 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.js","sources":["../node_modules/bpmnlint/lib/traverse.js","../node_modules/bpmnlint/lib/test-rule.js","../node_modules/bpmnlint/lib/linter.js","../lib/Linting.js","../lib/index.js"],"sourcesContent":["/**\n * Traverse a moddle tree, depth first from top to bottom\n * and call the passed visitor fn.\n *\n * @param {ModdleElement} element\n * @param {Function} fn\n */\nmodule.exports = function traverse(element, fn) {\n fn(element);\n\n var descriptor = element.$descriptor;\n\n if (descriptor.isGeneric) {\n return;\n }\n\n var containedProperties = descriptor.properties.filter(p => {\n return !p.isAttr && !p.isReference && p.type !== 'String';\n });\n\n containedProperties.forEach(p => {\n if (p.name in element) {\n const propertyValue = element[p.name];\n\n if (p.isMany) {\n propertyValue.forEach(child => {\n traverse(child, fn);\n });\n } else {\n traverse(propertyValue, fn);\n }\n }\n });\n};\n","const traverse = require('./traverse');\n\nclass Reporter {\n constructor({ moddleRoot, rule }) {\n this.rule = rule;\n this.moddleRoot = moddleRoot;\n this.messages = [];\n this.report = this.report.bind(this);\n }\n\n report(id, message) {\n this.messages.push({ id, message });\n }\n}\n\nmodule.exports = function testRule({ moddleRoot, rule }) {\n const reporter = new Reporter({ rule, moddleRoot });\n traverse(moddleRoot, node => rule.check(node, reporter));\n return reporter.messages;\n};\n","const testRule = require('./test-rule');\n\nconst categoryMap = {\n 0: 'off',\n 1: 'warn',\n 2: 'error'\n};\n\n\nfunction Linter(options = {}) {\n\n const {\n config,\n resolver\n } = options;\n\n if (typeof resolver === 'undefined') {\n throw new Error('must provide <options.resolver>');\n }\n\n this.config = config;\n this.resolver = resolver;\n\n this.cachedRules = {};\n this.cachedConfigs = {};\n}\n\n\nmodule.exports = Linter;\n\n/**\n * Applies a rule on the moddleRoot and adds reports to the finalReport\n *\n * @param {ModdleElement} moddleRoot\n *\n * @param {Object} ruleDefinition.name\n * @param {Object} ruleDefinition.config\n * @param {Object} ruleDefinition.category\n * @param {Rule} ruleDefinition.rule\n *\n * @return {Array<ValidationErrors>} rule reports\n */\nLinter.prototype.applyRule = function applyRule(moddleRoot, ruleDefinition) {\n\n const {\n config,\n rule,\n category,\n name\n } = ruleDefinition;\n\n try {\n\n const reports = testRule({\n moddleRoot,\n rule,\n config\n });\n\n return reports.map(function(report) {\n return {\n ...report,\n category\n };\n });\n } catch (e) {\n console.error('rule <' + name + '> failed with error: ', e);\n\n return [\n {\n message: 'Rule error: ' + e.message,\n category: 'error'\n }\n ];\n }\n\n};\n\n\nLinter.prototype.resolveRule = function(name) {\n\n const {\n pkg,\n ruleName\n } = this.parseRuleName(name);\n\n const id = `${pkg}-${ruleName}`;\n\n const rule = this.cachedRules[id];\n\n if (rule) {\n return Promise.resolve(rule);\n }\n\n return Promise.resolve(this.resolver.resolveRule(pkg, ruleName)).then((ruleFactory) => {\n\n if (!ruleFactory) {\n throw new Error(`unknown rule <${name}>`);\n }\n\n const rule = this.cachedRules[id] = ruleFactory();\n\n return rule;\n });\n};\n\nLinter.prototype.resolveConfig = function(name) {\n\n const {\n pkg,\n configName\n } = this.parseConfigName(name);\n\n const id = `${pkg}-${configName}`;\n\n const config = this.cachedConfigs[id];\n\n if (config) {\n return Promise.resolve(config);\n }\n\n return Promise.resolve(this.resolver.resolveConfig(pkg, configName)).then((config) => {\n\n if (!config) {\n throw new Error(`unknown config <${name}>`);\n }\n\n const actualConfig = this.cachedConfigs[id] = normalizeConfig(config, pkg);\n\n return actualConfig;\n });\n};\n\n/**\n * Take a linter config and return list of resolved rules.\n *\n * @param {Object} config\n *\n * @return {Array<RuleDefinition>}\n */\nLinter.prototype.resolveRules = function(config) {\n\n return this.resolveConfiguredRules(config).then((rulesConfig) => {\n\n // parse rule values\n const parsedRules = Object.entries(rulesConfig).map(([ name, value ]) => {\n const {\n category,\n config\n } = this.parseRuleValue(value);\n\n return {\n name,\n category,\n config\n };\n });\n\n // filter only for enabled rules\n const enabledRules = parsedRules.filter(definition => definition.category !== 'off');\n\n // load enabled rules\n const loaders = enabledRules.map((definition) => {\n\n const {\n name\n } = definition;\n\n return this.resolveRule(name).then(function(rule) {\n return {\n ...definition,\n rule\n };\n });\n });\n\n return Promise.all(loaders);\n });\n};\n\n\nLinter.prototype.resolveConfiguredRules = function(config) {\n\n let parents = config.extends;\n\n if (typeof parents === 'string') {\n parents = [ parents ];\n }\n\n if (typeof parents === 'undefined') {\n parents = [];\n }\n\n return Promise.all(\n parents.map((configName) => {\n return this.resolveConfig(configName).then((config) => {\n return this.resolveConfiguredRules(config);\n });\n })\n ).then((inheritedRules) => {\n\n const overrideRules = normalizeConfig(config, 'bpmnlint').rules;\n\n const rules = [ ...inheritedRules, overrideRules ].reduce((rules, currentRules) => {\n return {\n ...rules,\n ...currentRules\n };\n }, {});\n\n return rules;\n });\n};\n\n\n/**\n * Lint the given model root, using the specified linter config.\n *\n * @param {ModdleElement} moddleRoot\n * @param {Object} [config] the bpmnlint configuration to use\n *\n * @return {Object} lint results, keyed by category names\n */\nLinter.prototype.lint = function(moddleRoot, config) {\n\n config = config || this.config;\n\n // load rules\n return this.resolveRules(config).then((ruleDefinitions) => {\n\n const allReports = {};\n\n ruleDefinitions.forEach((ruleDefinition) => {\n\n const {\n name\n } = ruleDefinition;\n\n const reports = this.applyRule(moddleRoot, ruleDefinition);\n\n if (reports.length) {\n allReports[name] = reports;\n }\n });\n\n return allReports;\n });\n};\n\n\nLinter.prototype.parseRuleValue = function(value) {\n\n let category;\n let config;\n\n if (Array.isArray(value)) {\n category = value[0];\n config = value[1];\n } else {\n category = value;\n config = {};\n }\n\n // normalize rule flag to <error> and <warn> which\n // may be upper case or a number at this point\n if (typeof category === 'string') {\n category = category.toLowerCase();\n }\n\n category = categoryMap[category] || category;\n\n return {\n config,\n category\n };\n};\n\nLinter.prototype.parseRuleName = function(name) {\n\n const slashIdx = name.indexOf('/');\n\n // resolve rule as built-in, if unprefixed\n if (slashIdx === -1) {\n return {\n pkg: 'bpmnlint',\n ruleName: name\n };\n }\n\n const pkg = name.substring(0, slashIdx);\n const ruleName = name.substring(slashIdx + 1);\n\n if (pkg === 'bpmnlint') {\n return {\n pkg: 'bpmnlint',\n ruleName\n };\n } else {\n return {\n pkg: 'bpmnlint-plugin-' + pkg,\n ruleName\n };\n }\n};\n\n\nLinter.prototype.parseConfigName = function(name) {\n\n const localMatch = /^bpmnlint:(.*)$/.exec(name);\n\n if (localMatch) {\n return {\n pkg: 'bpmnlint',\n configName: localMatch[1]\n };\n }\n\n const pluginMatch = /^plugin:([^/]+)\\/(.+)$/.exec(name);\n\n if (!pluginMatch) {\n throw new Error(`invalid config name <${ name }>`);\n }\n\n return {\n pkg: 'bpmnlint-plugin-' + pluginMatch[1],\n configName: pluginMatch[2]\n };\n};\n\n\n// helpers ///////////////////////////\n\n/**\n * Validate and return validated config.\n *\n * @param {Object} config\n * @param {String} pkg\n *\n * @return {Object} validated config\n */\nfunction normalizeConfig(config, pkg) {\n\n const rules = config.rules || {};\n\n const validatedRules = Object.keys(rules).reduce((normalizedRules, name) => {\n\n const value = rules[name];\n\n // prefix local rule definition\n if (name.indexOf('bpmnlint/') === 0) {\n name = name.substring('bpmnlint/'.length);\n }\n\n normalizedRules[name] = value;\n\n return normalizedRules;\n }, {});\n\n return {\n ...config,\n rules: validatedRules\n };\n}","import Linter from 'bpmnlint/lib/linter';\r\n\r\nimport {\r\n assign,\r\n groupBy,\r\n reduce\r\n} from 'min-dash';\r\n\r\nimport {\r\n domify,\r\n query as domQuery,\r\n remove as domRemove\r\n} from 'min-dom';\r\n\r\nimport OnSvg from '../assets/svg/on.svg';\r\nimport LintSvg from '../assets/svg/lint.svg';\r\nimport ErrorSvg from '../assets/svg/error.svg';\r\nimport WarningSvg from '../assets/svg/warning.svg';\r\nimport SuccessSvg from '../assets/svg/success.svg';\r\n\r\nvar OFFSET_TOP = -5,\r\n OFFSET_RIGHT = -5;\r\n\r\nvar LOW_PRIORITY = 500;\r\n\r\nvar emptyConfig = {\r\n resolver: {\r\n resolveRule: function() {\r\n return null;\r\n }\r\n },\r\n config: {}\r\n};\r\n\r\n\r\nexport default function Linting(\r\n config, bpmnjs, canvas,\r\n elementRegistry, eventBus, overlays\r\n) {\r\n\r\n if ('bpmnlint' in config) {\r\n this._linterConfig = config.bpmnlint;\r\n }\r\n\r\n if (!this._linterConfig || !this._linterConfig.config || !this._linterConfig.resolver) {\r\n\r\n console.warn(\r\n '[bpmn-js-bpmnlint] You did not configure any lint rules to use. ' +\r\n 'Ensure you bundle and include your rules via the `linting.bpmnlint` option. ' +\r\n 'See https://github.com/bpmn-io/bpmn-js-bpmnlint#configure-lint-rules'\r\n );\r\n\r\n this._linterConfig = emptyConfig;\r\n }\r\n\r\n this._bpmnjs = bpmnjs;\r\n this._canvas = canvas;\r\n this._elementRegistry = elementRegistry;\r\n this._eventBus = eventBus;\r\n this._overlays = overlays;\r\n\r\n this._issues = null;\r\n this._lintingActive = false;\r\n\r\n this._overlayIds = {};\r\n\r\n var self = this;\r\n\r\n eventBus.on('elements.changed', LOW_PRIORITY, function(e) {\r\n if (self.lintingActive()) {\r\n self.update();\r\n }\r\n });\r\n\r\n eventBus.on('diagram.clear', function() {\r\n self.clearIssues();\r\n });\r\n\r\n this._init();\r\n};\r\n\r\nLinting.prototype._init = function() {\r\n var self = this;\r\n\r\n var button = this._button = domify(\r\n '<button class=\"bpmn-js-bpmnlint-button inactive\"></button>'\r\n );\r\n\r\n this.updateButton();\r\n\r\n button.addEventListener('click', function() {\r\n self.toggleLinting();\r\n });\r\n\r\n this._canvas.getContainer().appendChild(button);\r\n};\r\n\r\nLinting.prototype.lintingActive = function() {\r\n return this._lintingActive;\r\n};\r\n\r\nLinting.prototype.formatIssues = function(issues) {\r\n\r\n const reports = reduce(issues, function(reports, ruleReports, rule) {\r\n\r\n return reports.concat(ruleReports.map(function(report) {\r\n report.rule = rule;\r\n\r\n return report;\r\n }));\r\n\r\n }, []);\r\n\r\n return groupBy(reports, function(report) {\r\n return report.id;\r\n });\r\n};\r\n\r\nLinting.prototype.toggleLinting = function() {\r\n if (this.lintingActive()) {\r\n this.deactivateLinting();\r\n } else {\r\n this.activateLinting();\r\n }\r\n};\r\n\r\nLinting.prototype.activateLinting = function() {\r\n var self = this;\r\n\r\n this.setActive(true);\r\n\r\n this.lint()\r\n .then(function(issues) {\r\n self._issues = self.formatIssues(issues);\r\n\r\n self.createIssues(self._issues);\r\n\r\n self.updateButton();\r\n });\r\n};\r\n\r\nLinting.prototype.deactivateLinting = function() {\r\n this.setActive(false);\r\n\r\n this.clearIssues();\r\n\r\n this.updateButton();\r\n};\r\n\r\nLinting.prototype.setActive = function(active) {\r\n this._lintingActive = active;\r\n\r\n this._eventBus.fire('linting.toggle', { active: active });\r\n};\r\n\r\n/**\r\n * Update overlays. Always lint and check wether overlays need update or not.\r\n */\r\nLinting.prototype.update = function() {\r\n var self = this;\r\n\r\n this.lint()\r\n .then(function(newIssues) {\r\n newIssues = self.formatIssues(newIssues);\r\n\r\n var remove = {},\r\n update = {},\r\n add = {};\r\n\r\n for (var id in self._issues) {\r\n if (!newIssues[id]) {\r\n remove[id] = self._issues[id];\r\n }\r\n }\r\n\r\n for (var id in newIssues) {\r\n if (!self._issues[id]) {\r\n add[id] = newIssues[id];\r\n } else {\r\n if (newIssues[id] !== self._issues[id]) {\r\n update[id] = newIssues[id];\r\n }\r\n }\r\n }\r\n\r\n remove = assign(remove, update);\r\n add = assign(add, update);\r\n\r\n self.removeProcessIssues();\r\n\r\n self.removeIssues(remove);\r\n self.createIssues(add);\r\n\r\n self._issues = newIssues;\r\n\r\n self.updateButton();\r\n });\r\n};\r\n\r\nLinting.prototype.createIssues = function(issues) {\r\n for (var id in issues) {\r\n this.createElementIssues(id, issues[id]);\r\n }\r\n};\r\n\r\n/**\r\n * Create overlays for an elements issues.\r\n *\r\n * @param {String} elementId - Elements ID.\r\n * @param {Array} elementIssues - All element issues including warnings and errors.\r\n */\r\nLinting.prototype.createElementIssues = function(elementId, elementIssues) {\r\n\r\n console.log(elementId, elementIssues);\r\n\r\n var element = this._elementRegistry.get(elementId);\r\n\r\n if (!element) {\r\n console.log('element <' + elementId + '> not found');\r\n\r\n return;\r\n }\r\n\r\n var isProcess = element.type === 'bpmn:Process';\r\n\r\n var position = { top: OFFSET_TOP, right: OFFSET_RIGHT };\r\n\r\n elementIssues = groupBy(elementIssues, function(elementIssue) {\r\n return elementIssue.category\r\n });\r\n\r\n var errors = elementIssues.error,\r\n warnings = elementIssues.warn;\r\n\r\n var html = domify('<div class=\"bpmn-js-bpmnlint-issues\"><div class=\"icons\"></div></div>');\r\n\r\n var icons = domQuery('.icons', html);\r\n\r\n var group;\r\n\r\n if (errors) {\r\n icons.appendChild(domify('<span class=\"icon error\">' + ErrorSvg + '</span>'));\r\n\r\n group = this.createGroup(errors, 'error', 'Errors', ErrorSvg);\r\n\r\n html.appendChild(group);\r\n }\r\n\r\n if (warnings) {\r\n icons.appendChild(domify('<span class=\"icon warning\">' + WarningSvg + '</span>'));\r\n\r\n group = this.createGroup(warnings, 'warning', 'Warnings', WarningSvg);\r\n\r\n html.appendChild(group);\r\n }\r\n\r\n if (isProcess) {\r\n this.createProcessIssues(html);\r\n } else {\r\n this._overlayIds[elementId] = this._overlays.add(element, 'bpmnlint', {\r\n position: position,\r\n html: html,\r\n scale: {\r\n min: 1,\r\n max: 1\r\n }\r\n });\r\n }\r\n\r\n};\r\n\r\nLinting.prototype.createGroup = function(issues, type, label, icon) {\r\n\r\n var group = domify(\r\n '<div class=\"group\">' +\r\n '<div class=\"header ' + type + '\">' + icon + label + '</div>' +\r\n '</div>'\r\n );\r\n\r\n issues.forEach(function(issue) {\r\n var collapsable = domify(\r\n '<div class=\"collapsable ' + type + '\">' +\r\n issue.message +\r\n '</div>'\r\n );\r\n\r\n group.appendChild(collapsable);\r\n });\r\n\r\n return group;\r\n};\r\n\r\nLinting.prototype.removeIssues = function(issues) {\r\n var overlayId;\r\n\r\n for (var id in issues) {\r\n if (id === 'Process') {\r\n this.removeProcessIssues();\r\n } else {\r\n overlayId = this._overlayIds[id];\r\n\r\n // ignore process\r\n if (overlayId) {\r\n this._overlays.remove(overlayId);\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Removes all overlays and clears cached issues.\r\n */\r\nLinting.prototype.clearIssues = function() {\r\n var overlayId;\r\n\r\n for (var id in this._overlayIds) {\r\n overlayId = this._overlayIds[id];\r\n\r\n this._overlays.remove(overlayId);\r\n }\r\n\r\n this._issues = null;\r\n\r\n this.removeProcessIssues();\r\n};\r\n\r\n/**\r\n * Sets button state to reflect if linting is active.\r\n *\r\n * @param {String} state\r\n */\r\nLinting.prototype.setButtonState = function(state, html) {\r\n if (state === 'success') {\r\n this._button.classList.add('success');\r\n this._button.classList.remove('error');\r\n this._button.classList.remove('inactive');\r\n this._button.classList.remove('warning');\r\n } else if (state === 'error') {\r\n this._button.classList.add('error');\r\n this._button.classList.remove('inactive');\r\n this._button.classList.remove('success');\r\n this._button.classList.remove('warning');\r\n } else if (state === 'warning') {\r\n this._button.classList.add('warning');\r\n this._button.classList.remove('error');\r\n this._button.classList.remove('inactive');\r\n this._button.classList.remove('success');\r\n } else if (state === 'inactive') {\r\n this._button.classList.add('inactive');\r\n this._button.classList.remove('error');\r\n this._button.classList.remove('success');\r\n this._button.classList.remove('warning');\r\n }\r\n\r\n this._button.innerHTML = html;\r\n}\r\n\r\nLinting.prototype.updateButton = function() {\r\n if (this._lintingActive) {\r\n var errors = 0,\r\n warnings = 0;\r\n\r\n for (var id in this._issues) {\r\n this._issues[id].forEach(function(issue) {\r\n if (issue.category === 'error') {\r\n errors++;\r\n } else if (issue.category === 'warn') {\r\n warnings++;\r\n }\r\n });\r\n }\r\n\r\n if (errors) {\r\n this.setButtonState('error', ErrorSvg + '<span>' + errors + ' Errors, ' + warnings + ' Warnings</span>');\r\n } else if (warnings) {\r\n this.setButtonState('warning', WarningSvg + '<span>' + errors + ' Errors, ' + warnings + ' Warnings</span>');\r\n } else {\r\n this.setButtonState('success', SuccessSvg + '<span>0 Errors, 0 Warnings</span>');\r\n }\r\n\r\n } else {\r\n this.setButtonState('inactive', SuccessSvg + '<span>0 Errors, 0 Warnings</span>');\r\n }\r\n\r\n}\r\n\r\nLinting.prototype.createProcessIssues = function(html) {\r\n var container = this._canvas.getContainer();\r\n\r\n html.classList.add('bpmn-js-bpmnlint-process-issues');\r\n\r\n container.appendChild(html);\r\n};\r\n\r\nLinting.prototype.removeProcessIssues = function() {\r\n var container = this._canvas.getContainer();\r\n\r\n var html = domQuery('.bpmn-js-bpmnlint-process-issues', container);\r\n\r\n if (html) {\r\n domRemove(html);\r\n }\r\n};\r\n\r\nLinting.prototype.lint = function() {\r\n\r\n var definitions = this._bpmnjs.getDefinitions();\r\n\r\n var linter = new Linter(this._linterConfig);\r\n\r\n return linter.lint(definitions);\r\n};\r\n\r\nLinting.$inject = [\r\n 'config.linting',\r\n 'bpmnjs',\r\n 'canvas',\r\n 'elementRegistry',\r\n 'eventBus',\r\n 'overlays'\r\n];","import Linting from './Linting';\r\n\r\nexport default {\r\n __init__: [ 'linting' ],\r\n linting: [ 'type', Linting ]\r\n};"],"names":["domify","reduce","groupBy","assign","domQuery","domRemove","linter","Linter"],"mappings":";;;;;AAAA;;;;;;;AAOA,YAAc,GAAG,SAAS,QAAQ,CAAC,OAAO,EAAE,EAAE,EAAE;EAC9C,EAAE,CAAC,OAAO,CAAC,CAAC;;EAEZ,IAAI,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;;EAErC,IAAI,UAAU,CAAC,SAAS,EAAE;IACxB,OAAO;GACR;;EAED,IAAI,mBAAmB,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI;IAC1D,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;GAC3D,CAAC,CAAC;;EAEH,mBAAmB,CAAC,OAAO,CAAC,CAAC,IAAI;IAC/B,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,EAAE;MACrB,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;;MAEtC,IAAI,CAAC,CAAC,MAAM,EAAE;QACZ,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI;UAC7B,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;SACrB,CAAC,CAAC;OACJ,MAAM;QACL,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;OAC7B;KACF;GACF,CAAC,CAAC;CACJ,CAAC;;AC/BF,MAAM,QAAQ,CAAC;EACb,WAAW,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;IAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC7B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;GACtC;;EAED,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE;IAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;GACrC;CACF;;AAED,YAAc,GAAG,SAAS,QAAQ,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;EACvD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;EACpD,QAAQ,CAAC,UAAU,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;EACzD,OAAO,QAAQ,CAAC,QAAQ,CAAC;CAC1B,CAAC;;ACjBF,MAAM,WAAW,GAAG;EAClB,CAAC,EAAE,KAAK;EACR,CAAC,EAAE,MAAM;EACT,CAAC,EAAE,OAAO;CACX,CAAC;;;AAGF,SAAS,MAAM,CAAC,OAAO,GAAG,EAAE,EAAE;;EAE5B,MAAM;IACJ,MAAM;IACN,QAAQ;GACT,GAAG,OAAO,CAAC;;EAEZ,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;IACnC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;GACpD;;EAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;EACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;;EAEzB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;EACtB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;CACzB;;;AAGD,UAAc,GAAG,MAAM,CAAC;;;;;;;;;;;;;;AAcxB,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAAC,UAAU,EAAE,cAAc,EAAE;;EAE1E,MAAM;IACJ,MAAM;IACN,IAAI;IACJ,QAAQ;IACR,IAAI;GACL,GAAG,cAAc,CAAC;;EAEnB,IAAI;;IAEF,MAAM,OAAO,GAAG,QAAQ,CAAC;MACvB,UAAU;MACV,IAAI;MACJ,MAAM;KACP,CAAC,CAAC;;IAEH,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,EAAE;MAClC,OAAO;QACL,GAAG,MAAM;QACT,QAAQ;OACT,CAAC;KACH,CAAC,CAAC;GACJ,CAAC,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,GAAG,uBAAuB,EAAE,CAAC,CAAC,CAAC;;IAE5D,OAAO;MACL;QACE,OAAO,EAAE,cAAc,GAAG,CAAC,CAAC,OAAO;QACnC,QAAQ,EAAE,OAAO;OAClB;KACF,CAAC;GACH;;CAEF,CAAC;;;AAGF,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE;;EAE5C,MAAM;IACJ,GAAG;IACH,QAAQ;GACT,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;;EAE7B,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;;EAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;;EAElC,IAAI,IAAI,EAAE;IACR,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;GAC9B;;EAED,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK;;IAErF,IAAI,CAAC,WAAW,EAAE;MAChB,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3C;;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC;;IAElD,OAAO,IAAI,CAAC;GACb,CAAC,CAAC;CACJ,CAAC;;AAEF,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,IAAI,EAAE;;EAE9C,MAAM;IACJ,GAAG;IACH,UAAU;GACX,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;;EAE/B,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;;EAElC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;;EAEtC,IAAI,MAAM,EAAE;IACV,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;GAChC;;EAED,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK;;IAEpF,IAAI,CAAC,MAAM,EAAE;MACX,MAAM,IAAI,KAAK,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7C;;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;;IAE3E,OAAO,YAAY,CAAC;GACrB,CAAC,CAAC;CACJ,CAAC;;;;;;;;;AASF,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,MAAM,EAAE;;EAE/C,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK;;;IAG/D,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK;MACvE,MAAM;QACJ,QAAQ;QACR,MAAM;OACP,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;;MAE/B,OAAO;QACL,IAAI;QACJ,QAAQ;QACR,MAAM;OACP,CAAC;KACH,CAAC,CAAC;;;IAGH,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC;;;IAGrF,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,KAAK;;MAE/C,MAAM;QACJ,IAAI;OACL,GAAG,UAAU,CAAC;;MAEf,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;QAChD,OAAO;UACL,GAAG,UAAU;UACb,IAAI;SACL,CAAC;OACH,CAAC,CAAC;KACJ,CAAC,CAAC;;IAEH,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;GAC7B,CAAC,CAAC;CACJ,CAAC;;;AAGF,MAAM,CAAC,SAAS,CAAC,sBAAsB,GAAG,SAAS,MAAM,EAAE;;EAEzD,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;;EAE7B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;IAC/B,OAAO,GAAG,EAAE,OAAO,EAAE,CAAC;GACvB;;EAED,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;IAClC,OAAO,GAAG,EAAE,CAAC;GACd;;EAED,OAAO,OAAO,CAAC,GAAG;IAChB,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,KAAK;MAC1B,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK;QACrD,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;OAC5C,CAAC,CAAC;KACJ,CAAC;GACH,CAAC,IAAI,CAAC,CAAC,cAAc,KAAK;;IAEzB,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC;;IAEhE,MAAM,KAAK,GAAG,EAAE,GAAG,cAAc,EAAE,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK;MACjF,OAAO;QACL,GAAG,KAAK;QACR,GAAG,YAAY;OAChB,CAAC;KACH,EAAE,EAAE,CAAC,CAAC;;IAEP,OAAO,KAAK,CAAC;GACd,CAAC,CAAC;CACJ,CAAC;;;;;;;;;;;AAWF,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,UAAU,EAAE,MAAM,EAAE;;EAEnD,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;;;EAG/B,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,KAAK;;IAEzD,MAAM,UAAU,GAAG,EAAE,CAAC;;IAEtB,eAAe,CAAC,OAAO,CAAC,CAAC,cAAc,KAAK;;MAE1C,MAAM;QACJ,IAAI;OACL,GAAG,cAAc,CAAC;;MAEnB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;;MAE3D,IAAI,OAAO,CAAC,MAAM,EAAE;QAClB,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;OAC5B;KACF,CAAC,CAAC;;IAEH,OAAO,UAAU,CAAC;GACnB,CAAC,CAAC;CACJ,CAAC;;;AAGF,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,SAAS,KAAK,EAAE;;EAEhD,IAAI,QAAQ,CAAC;EACb,IAAI,MAAM,CAAC;;EAEX,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;IACxB,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;GACnB,MAAM;IACL,QAAQ,GAAG,KAAK,CAAC;IACjB,MAAM,GAAG,EAAE,CAAC;GACb;;;;EAID,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;IAChC,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;GACnC;;EAED,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;;EAE7C,OAAO;IACL,MAAM;IACN,QAAQ;GACT,CAAC;CACH,CAAC;;AAEF,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,IAAI,EAAE;;EAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;;;EAGnC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE;IACnB,OAAO;MACL,GAAG,EAAE,UAAU;MACf,QAAQ,EAAE,IAAI;KACf,CAAC;GACH;;EAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;EACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;;EAE9C,IAAI,GAAG,KAAK,UAAU,EAAE;IACtB,OAAO;MACL,GAAG,EAAE,UAAU;MACf,QAAQ;KACT,CAAC;GACH,MAAM;IACL,OAAO;MACL,GAAG,EAAE,kBAAkB,GAAG,GAAG;MAC7B,QAAQ;KACT,CAAC;GACH;CACF,CAAC;;;AAGF,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG,SAAS,IAAI,EAAE;;EAEhD,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;EAEhD,IAAI,UAAU,EAAE;IACd,OAAO;MACL,GAAG,EAAE,UAAU;MACf,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;KAC1B,CAAC;GACH;;EAED,MAAM,WAAW,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;EAExD,IAAI,CAAC,WAAW,EAAE;IAChB,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;GACpD;;EAED,OAAO;IACL,GAAG,EAAE,kBAAkB,GAAG,WAAW,CAAC,CAAC,CAAC;IACxC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;GAC3B,CAAC;CACH,CAAC;;;;;;;;;;;;;AAaF,SAAS,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE;;EAEpC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;;EAEjC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,IAAI,KAAK;;IAE1E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;;;IAG1B,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;MACnC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;KAC3C;;IAED,eAAe,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;;IAE9B,OAAO,eAAe,CAAC;GACxB,EAAE,EAAE,CAAC,CAAC;;EAEP,OAAO;IACL,GAAG,MAAM;IACT,KAAK,EAAE,cAAc;GACtB,CAAC;;;;;;;;;ACrVJ,IAAI,UAAU,GAAG,CAAC,CAAC;IACf,YAAY,GAAG,CAAC,CAAC,CAAC;;AAEtB,IAAI,YAAY,GAAG,GAAG,CAAC;;AAEvB,IAAI,WAAW,GAAG;EAChB,QAAQ,EAAE;IACR,WAAW,EAAE,WAAW;MACtB,OAAO,IAAI,CAAC;KACb;GACF;EACD,MAAM,EAAE,EAAE;CACX,CAAC;;;AAGF,AAAe,SAAS,OAAO;EAC7B,MAAM,EAAE,MAAM,EAAE,MAAM;EACtB,eAAe,EAAE,QAAQ,EAAE,QAAQ;EACnC;;EAEA,IAAI,UAAU,IAAI,MAAM,EAAE;IACxB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC;GACtC;;EAED,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;;IAErF,OAAO,CAAC,IAAI;MACV,kEAAkE;MAClE,8EAA8E;MAC9E,sEAAsE;KACvE,CAAC;;IAEF,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC;GAClC;;EAED,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;EACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;EACtB,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;EACxC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;EAC1B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;;EAE1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;EACpB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;;EAE5B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;;EAEtB,IAAI,IAAI,GAAG,IAAI,CAAC;;EAEhB,QAAQ,CAAC,EAAE,CAAC,kBAAkB,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE;IACxD,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;MACxB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;GACF,CAAC,CAAC;;EAEH,QAAQ,CAAC,EAAE,CAAC,eAAe,EAAE,WAAW;IACtC,IAAI,CAAC,WAAW,EAAE,CAAC;GACpB,CAAC,CAAC;;EAEH,IAAI,CAAC,KAAK,EAAE,CAAC;CACd,AACD;AACA,OAAO,CAAC,SAAS,CAAC,KAAK,GAAG,WAAW;EACnC,IAAI,IAAI,GAAG,IAAI,CAAC;;EAEhB,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,GAAGA,aAAM;IAChC,4DAA4D;GAC7D,CAAC;;EAEF,IAAI,CAAC,YAAY,EAAE,CAAC;;EAEpB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW;IAC1C,IAAI,CAAC,aAAa,EAAE,CAAC;GACtB,CAAC,CAAC;;EAEH,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;CACjD,CAAC;;AAEF,OAAO,CAAC,SAAS,CAAC,aAAa,GAAG,WAAW;EAC3C,OAAO,IAAI,CAAC,cAAc,CAAC;CAC5B,CAAC;;AAEF,OAAO,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,MAAM,EAAE;;EAEhD,MAAM,OAAO,GAAGC,cAAM,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE;;IAElE,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,MAAM,EAAE;MACrD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;;MAEnB,OAAO,MAAM,CAAC;KACf,CAAC,CAAC,CAAC;;GAEL,EAAE,EAAE,CAAC,CAAC;;EAEP,OAAOC,eAAO,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE;IACvC,OAAO,MAAM,CAAC,EAAE,CAAC;GAClB,CAAC,CAAC;CACJ,CAAC;;AAEF,OAAO,CAAC,SAAS,CAAC,aAAa,GAAG,WAAW;EAC3C,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;IACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC;GAC1B,MAAM;IACL,IAAI,CAAC,eAAe,EAAE,CAAC;GACxB;CACF,CAAC;;AAEF,OAAO,CAAC,SAAS,CAAC,eAAe,GAAG,WAAW;EAC7C,IAAI,IAAI,GAAG,IAAI,CAAC;;EAEhB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;EAErB,IAAI,CAAC,IAAI,EAAE;KACR,IAAI,CAAC,SAAS,MAAM,EAAE;MACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;;MAEzC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;MAEhC,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB,CAAC,CAAC;CACN,CAAC;;AAEF,OAAO,CAAC,SAAS,CAAC,iBAAiB,GAAG,WAAW;EAC/C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;;EAEtB,IAAI,CAAC,WAAW,EAAE,CAAC;;EAEnB,IAAI,CAAC,YAAY,EAAE,CAAC;CACrB,CAAC;;AAEF,OAAO,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,MAAM,EAAE;EAC7C,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;;EAE7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC3D,CAAC;;;;;AAKF,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,WAAW;EACpC,IAAI,IAAI,GAAG,IAAI,CAAC;;EAEhB,IAAI,CAAC,IAAI,EAAE;KACR,IAAI,CAAC,SAAS,SAAS,EAAE;MACxB,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;;MAEzC,IAAI,MAAM,GAAG,EAAE;UACX,MAAM,GAAG,EAAE;UACX,GAAG,GAAG,EAAE,CAAC;;MAEb,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;QAC3B,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;UAClB,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SAC/B;OACF;;MAED,KAAK,IAAI,EAAE,IAAI,SAAS,EAAE;QACxB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;UACrB,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;SACzB,MAAM;UACL,IAAI,SAAS,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACtC,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;WAC5B;SACF;OACF;;MAED,MAAM,GAAGC,cAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;MAChC,GAAG,GAAGA,cAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;;MAE1B,IAAI,CAAC,mBAAmB,EAAE,CAAC;;MAE3B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;MAC1B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;;MAEvB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;;MAEzB,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB,CAAC,CAAC;CACN,CAAC;;AAEF,OAAO,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,MAAM,EAAE;EAChD,KAAK,IAAI,EAAE,IAAI,MAAM,EAAE;IACrB,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;GAC1C;CACF,CAAC;;;;;;;;AAQF,OAAO,CAAC,SAAS,CAAC,mBAAmB,GAAG,SAAS,SAAS,EAAE,aAAa,EAAE;;EAEzE,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;;EAEtC,IAAI,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;;EAEnD,IAAI,CAAC,OAAO,EAAE;IACZ,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,SAAS,GAAG,aAAa,CAAC,CAAC;;IAErD,OAAO;GACR;;EAED,IAAI,SAAS,GAAG,OAAO,CAAC,IAAI,KAAK,cAAc,CAAC;;EAEhD,IAAI,QAAQ,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;;EAExD,aAAa,GAAGD,eAAO,CAAC,aAAa,EAAE,SAAS,YAAY,EAAE;IAC5D,OAAO,YAAY,CAAC,QAAQ;GAC7B,CAAC,CAAC;;EAEH,IAAI,MAAM,GAAG,aAAa,CAAC,KAAK;MAC5B,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC;;EAElC,IAAI,IAAI,GAAGF,aAAM,CAAC,sEAAsE,CAAC,CAAC;;EAE1F,IAAI,KAAK,GAAGI,YAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;;EAErC,IAAI,KAAK,CAAC;;EAEV,IAAI,MAAM,EAAE;IACV,KAAK,CAAC,WAAW,CAACJ,aAAM,CAAC,2BAA2B,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC;;IAE9E,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;;IAE9D,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;GACzB;;EAED,IAAI,QAAQ,EAAE;IACZ,KAAK,CAAC,WAAW,CAACA,aAAM,CAAC,6BAA6B,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC;;IAElF,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;;IAEtE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;GACzB;;EAED,IAAI,SAAS,EAAE;IACb,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;GAChC,MAAM;IACL,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE;MACpE,QAAQ,EAAE,QAAQ;MAClB,IAAI,EAAE,IAAI;MACV,KAAK,EAAE;QACL,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;OACP;KACF,CAAC,CAAC;GACJ;;CAEF,CAAC;;AAEF,OAAO,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;;EAElE,IAAI,KAAK,GAAGA,aAAM;IAChB,qBAAqB;MACnB,qBAAqB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,QAAQ;IAC/D,QAAQ;GACT,CAAC;;EAEF,MAAM,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE;IAC7B,IAAI,WAAW,GAAGA,aAAM;MACtB,0BAA0B,GAAG,IAAI,GAAG,IAAI;MACxC,KAAK,CAAC,OAAO;MACb,QAAQ;KACT,CAAC;;IAEF,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;GAChC,CAAC,CAAC;;EAEH,OAAO,KAAK,CAAC;CACd,CAAC;;AAEF,OAAO,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,MAAM,EAAE;EAChD,IAAI,SAAS,CAAC;;EAEd,KAAK,IAAI,EAAE,IAAI,MAAM,EAAE;IACrB,IAAI,EAAE,KAAK,SAAS,EAAE;MACpB,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B,MAAM;MACL,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;;;MAGjC,IAAI,SAAS,EAAE;QACb,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;OAClC;KACF;GACF;CACF,CAAC;;;;;AAKF,OAAO,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW;EACzC,IAAI,SAAS,CAAC;;EAEd,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;IAC/B,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;;IAEjC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;GAClC;;EAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;;EAEpB,IAAI,CAAC,mBAAmB,EAAE,CAAC;CAC5B,CAAC;;;;;;;AAOF,OAAO,CAAC,SAAS,CAAC,cAAc,GAAG,SAAS,KAAK,EAAE,IAAI,EAAE;EACvD,IAAI,KAAK,KAAK,SAAS,EAAE;IACvB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;GAC1C,MAAM,IAAI,KAAK,KAAK,OAAO,EAAE;IAC5B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;GAC1C,MAAM,IAAI,KAAK,KAAK,SAAS,EAAE;IAC9B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;GAC1C,MAAM,IAAI,KAAK,KAAK,UAAU,EAAE;IAC/B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;GAC1C;;EAED,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;EAC/B;;AAED,OAAO,CAAC,SAAS,CAAC,YAAY,GAAG,WAAW;EAC1C,IAAI,IAAI,CAAC,cAAc,EAAE;IACvB,IAAI,MAAM,GAAG,CAAC;QACV,QAAQ,GAAG,CAAC,CAAC;;IAEjB,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;MAC3B,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE;QACvC,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,EAAE;UAC9B,MAAM,EAAE,CAAC;SACV,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE;UACpC,QAAQ,EAAE,CAAC;SACZ;OACF,CAAC,CAAC;KACJ;;IAED,IAAI,MAAM,EAAE;MACV,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,kBAAkB,CAAC,CAAC;KAC1G,MAAM,IAAI,QAAQ,EAAE;MACnB,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,kBAAkB,CAAC,CAAC;KAC9G,MAAM;MACL,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,GAAG,mCAAmC,CAAC,CAAC;KAClF;;GAEF,MAAM;IACL,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,mCAAmC,CAAC,CAAC;GACnF;;EAEF;;AAED,OAAO,CAAC,SAAS,CAAC,mBAAmB,GAAG,SAAS,IAAI,EAAE;EACrD,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;;EAE5C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;;EAEtD,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;CAC7B,CAAC;;AAEF,OAAO,CAAC,SAAS,CAAC,mBAAmB,GAAG,WAAW;EACjD,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;;EAE5C,IAAI,IAAI,GAAGI,YAAQ,CAAC,kCAAkC,EAAE,SAAS,CAAC,CAAC;;EAEnE,IAAI,IAAI,EAAE;IACRC,aAAS,CAAC,IAAI,CAAC,CAAC;GACjB;CACF,CAAC;;AAEF,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,WAAW;;EAElC,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;;EAEhD,IAAIC,SAAM,GAAG,IAAIC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;EAE5C,OAAOD,SAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;CACjC,CAAC;;AAEF,OAAO,CAAC,OAAO,GAAG;EAChB,gBAAgB;EAChB,QAAQ;EACR,QAAQ;EACR,iBAAiB;EACjB,UAAU;EACV,UAAU;CACX;;EAAC,FClaF,YAAe;EACb,QAAQ,EAAE,EAAE,SAAS,EAAE;EACvB,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;CAC7B;;;;"}
\No newline at end of file