@accordproject/template-engine 2.2.0 → 2.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/drafting/Boolean/index.ts","../src/drafting/DateTime/index.ts","../src/drafting/Double/format.ts","../src/drafting/Double/index.ts","../src/drafting/Integer/format.ts","../src/drafting/Integer/index.ts","../src/drafting/Long/index.ts","../src/drafting/MonetaryAmount/currencycode.ts","../src/drafting/MonetaryAmount/index.ts","../src/drafting/String/index.ts","../src/drafting/index.ts","../src/Common.ts","../src/TypeScriptCompilationContext.ts","../src/runtime/declarations.ts","../src/TypeScriptToJavaScriptCompiler.ts","../src/model-gen/org.accordproject.templatemark@0.5.0.ts","../src/utils.ts","../src/TemplateMarkToJavaScriptCompiler.ts","../src/TypeScriptRuntime.ts","../src/TemplateMarkInterpreter.ts","../src/compilers/Common.ts","../src/compilers/Clause.ts","../src/compilers/Conditional.ts","../src/compilers/ContractDefinition.ts","../src/compilers/FormattedVariable.ts","../src/compilers/Formula.ts","../src/compilers/Join.ts","../src/compilers/ListBlock.ts","../src/compilers/Optional.ts","../src/compilers/Variable.ts","../src/compilers/With.ts","../src/compilers/EnumVariable.ts","../src/compilers/NodeCompilers.ts","../src/runtime/runtime.ts","../src/TemplateMarkToTypeScriptCompiler.ts"],"sourcesContent":["/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for Boolean\n * @param {Boolean} value the Boolean\n * @returns {string} the text\n */\nexport default function booleanDrafter(value:boolean) : string {\n if (value) {\n return 'true';\n } else {\n return 'false';\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\ndayjs.extend(utc);\n\n/**\n * Creates a drafter for DateTime\n * @param {string} value the DateTime\n * @param {object} format the the format\n * @returns {string} the text\n */\nexport default function dateTimeDrafter(value:string,format:string) : string {\n const f = format ? format : 'MM/DD/YYYY';\n return dayjs.utc(value).format(f);\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for Double\n * @param {number} value - the double\n * @returns {string} the text\n */\nexport function draftDoubleIEEE(value:number) : string {\n if (Math.floor(value) === value) {\n return (new Number(value)).toFixed(1); // Make sure there is always decimal point\n } else {\n return '' + value;\n }\n}\n\n/**\n * Creates a drafter for a formatted Double\n * @param {number} value - the Double\n * @param {string} format - the format\n * @returns {object} the parser\n */\nexport function draftDoubleFormat(value:number,format:string) : string {\n return format.replace(/0(.)0((.)(0+))?/gi, function(_a,sep1,_b,sep2,digits){\n const len = digits ? digits.length : 0;\n const vs = value.toFixed(len);\n let res = '';\n if (sep2) {\n const d = vs.substring(vs.length - len);\n res += sep2 + d;\n }\n let i = vs.substring(0,vs.length - (len === 0 ? 0 : len+1));\n while (i.length > 3) {\n res = sep1 + i.substring(i.length - 3) + res;\n i = i.substring(0, i.length - 3);\n }\n return i + res;\n });\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { draftDoubleIEEE } from './format';\nimport { draftDoubleFormat } from './format';\n\n/**\n * Creates a drafter for a double\n * @param {number} value - the Double\n * @param {string} format - the format\n * @returns {string} the text\n */\nexport default function doubleDrafter(value:number,format:string) : string {\n if (format) {\n return draftDoubleFormat(value,format);\n } else {\n return draftDoubleIEEE(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for Integer\n * @param {number} value - the integer\n * @returns {string} the text\n */\nexport function draftInteger(value:number) : string {\n return '' + value;\n}\n\n/**\n * Creates a drafter for a formatted Integer\n * @param {number} value - the Integer\n * @param {string} format - the format\n * @returns {object} the parser\n */\nexport function draftIntegerFormat(value:number,format:string) : string {\n return format.replace(/0(.)0/gi, function(_a,sep1){\n const vs = value.toFixed(0);\n let res = '';\n let i = vs.substring(0,vs.length);\n while (i.length > 3) {\n res = sep1 + i.substring(i.length - 3) + res;\n i = i.substring(0, i.length - 3);\n }\n return i + res;\n });\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'use strict';\n\nimport { draftInteger } from './format';\nimport { draftIntegerFormat } from './format';\n\n/**\n * Creates a drafter for an Integer\n * @param {number} value - the integer\n * @param {string} format - the format\n * @returns {string} the text\n */\nexport default function integerDrafter(value:number,format:string) : string {\n if (format) {\n return draftIntegerFormat(value,format);\n } else {\n return draftInteger(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { draftInteger as draftLong } from '../Integer/format';\nimport { draftIntegerFormat as draftLongFormat } from '../Integer/format';\n\n/**\n * Creates a drafter for a long\n * @param {number} value - the Long\n * @param {string} format - the format\n * @returns {string} the text\n */\nexport default function longDrafter(value:number,format:string) : string {\n if (format) {\n return draftLongFormat(value,format);\n } else {\n return draftLong(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport enum CurrencyCode {\n 'USD' = '$',\n 'EUR'= '€',\n 'JPY'= '¥',\n 'GBP'= '£',\n 'AUD'= 'A$',\n 'CAD'= 'C$',\n 'CHF'= 'CHF',\n 'CNY'= '元',\n 'HKD'= 'HK$',\n 'NZD'= 'NZ$',\n 'KRW'= '₩',\n 'SGD'= 'S$',\n 'MXN'= 'MEX$',\n 'INR'= '₹',\n 'RUB'= '₽',\n 'ZAR'= 'R',\n 'TRY'= '₺',\n 'BRL'= 'R$',\n 'TWD'= 'NT$',\n 'PLN'= 'zł',\n 'THB'= '฿',\n 'IDR'= 'Rp',\n 'HUF'= 'Ft',\n 'CZK'= 'Kč',\n 'ILS'= '₪',\n 'CLP'= 'CLP$',\n 'PHP'= '₱',\n 'AED'= 'د.إ',\n 'COP'= 'COL$',\n 'SAR'= '﷼',\n 'MYR'= 'RM',\n 'RON'= 'L',\n 'BGN'= 'лв.'\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { draftDoubleIEEE } from '../Double/format';\nimport { draftDoubleFormat } from '../Double/format';\nimport { CurrencyCode } from './currencycode';\n\ntype MonetaryAmount = {\n doubleValue: number;\n currencyCode: string;\n};\n\n/**\n * Creates a drafter for monetary amount with no format\n * @param {object} value the monetary amount\n * @returns {string} the text\n */\nfunction monetaryAmountDefaultDrafter(value:MonetaryAmount) {\n return '' + draftDoubleIEEE(value.doubleValue) + ' ' + value.currencyCode;\n}\n\n/**\n * Symbol from a currency code\n * @param {string} c - the currency code\n * @returns {string} the symbol\n */\nfunction codeSymbol(c:string) : string {\n const index: number = Object.keys(CurrencyCode).indexOf(c);\n if(index >=0) {\n return Object.values(CurrencyCode)[index];\n }\n else {\n return c;\n }\n}\n\n/**\n * Creates a drafter for monetary amount with a given format\n * @param {object} value the monetary amount\n * @param {string} format the format\n * @returns {string} the text\n */\nfunction monetaryAmountFormatDrafter(value:MonetaryAmount,format:string) : string {\n return draftDoubleFormat(value.doubleValue,\n format\n .replace(/K/gi,codeSymbol(value.currencyCode))\n .replace(/CCC/gi,value.currencyCode));\n}\n\n/**\n * Creates a drafter for a monetary amount\n * @param {object} value the monetary amount\n * @param {string} format the format\n * @returns {string} the text\n */\nexport default function monetaryAmountDrafter(value:MonetaryAmount,format:string) : string {\n if (format) {\n return monetaryAmountFormatDrafter(value,format);\n } else {\n return monetaryAmountDefaultDrafter(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for String\n * @param {object} value the String\n * @returns {string} the text\n */\nexport default function stringDrafter(value:string) : string {\n return value;\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport booleanDrafter from './Boolean';\nimport dateTimeDrafter from './DateTime';\nimport doubleDrafter from './Double';\nimport integerDrafter from './Integer';\nimport longDrafter from './Long';\nimport monetaryAmountDrafter from './MonetaryAmount';\nimport stringDrafter from './String';\n\nexport function getDrafter(typeName: string) : ((value:any, format:string) => string)|null {\n switch(typeName) {\n case 'Boolean': return booleanDrafter;\n case 'DateTime': return dateTimeDrafter;\n case 'Double': return doubleDrafter;\n case 'Integer': return integerDrafter;\n case 'Long': return longDrafter;\n case 'org.accordproject.money@0.3.0.MonetaryAmount': return monetaryAmountDrafter;\n case 'String': return stringDrafter;\n default: return null;\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ClassDeclaration, Introspector, ModelManager } from '@accordproject/concerto-core';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\nimport { templatemarkutil } from '@accordproject/markdown-template';\n\n// use to create agreementmark from templatemark\nexport const TEMPLATEMARK_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.(\\w+)Definition$/;\nexport const FORMULA_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.FormulaDefinition$/;\nexport const VARIABLE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.VariableDefinition$/;\nexport const CONDITIONAL_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ConditionalDefinition$/;\nexport const ENUM_VARIABLE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.EnumVariableDefinition$/;\nexport const FORMATTED_VARIABLE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.FormattedVariableDefinition$/;\nexport const WITH_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.WithDefinition$/;\nexport const LISTBLOCK_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ListBlockDefinition$/;\nexport const JOIN_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.JoinDefinition$/;\nexport const OPTIONAL_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.OptionalDefinition$/;\nexport const CLAUSE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ClauseDefinition$/;\nexport const CONTRACT_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ContractDefinition$/;\n\nexport type TemplateData = Record<string, unknown>;\n\n/**\n * TemplateMark nodes that implicity change the data access scope\n * by specifying the name of a property on the node.\n */\nexport const NAVIGATION_NODES = [\n `${TemplateMarkModel.NAMESPACE}.ListBlockDefinition`,\n `${TemplateMarkModel.NAMESPACE}.WithDefinition`,\n `${TemplateMarkModel.NAMESPACE}.JoinDefinition`,\n `${TemplateMarkModel.NAMESPACE}.OptionalDefinition`,\n `${TemplateMarkModel.NAMESPACE}.ClauseDefinition`\n];\n\nexport function getTemplateClassDeclaration(modelManager: ModelManager, templateConceptFqn?: string) : ClassDeclaration {\n const introspector = new Introspector(modelManager);\n try {\n return templatemarkutil.findTemplateConcept(introspector, 'clause', templateConceptFqn);\n }\n catch(err) {\n console.log(err);\n throw err;\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ClassDeclaration, ModelManager } from '@accordproject/concerto-core';\nimport { CodeGen } from '@accordproject/concerto-codegen';\nimport { InMemoryWriter } from '@accordproject/concerto-util';\nimport { getTemplateClassDeclaration } from './Common';\n\n/**\n * This class creates the typescript types\n * required to compile Typescript expressions (used in\n * formulae, conditions and clauses) to JavaScript. It uses\n * these to create a compilation context for '@typescript/twoslash'\n * which is used to compile the typescript code.\n */\nexport class TypeScriptCompilationContext {\n\n modelManager:ModelManager;\n templateClass:ClassDeclaration;\n\n constructor(modelManager:ModelManager,templateConceptFqn?: string) {\n this.modelManager = modelManager;\n this.templateClass = getTemplateClassDeclaration(this.modelManager, templateConceptFqn);\n }\n\n getTypeScriptFiles() : Record<string,string> {\n const result:Record<string,string> = {};\n\n const visitor = new CodeGen.TypescriptVisitor();\n const writer = new InMemoryWriter();\n\n const params = {\n fileWriter: writer\n };\n this.modelManager.accept(visitor, params);\n writer.getFilesInMemory().forEach( (value, key) => {\n result[key] = value;\n });\n return result;\n }\n\n getCompilationContext() : string {\n const files = this.getTypeScriptFiles();\n\n let result = '';\n\n Object.keys(files).forEach( key => {\n const content = files[key];\n result += `\n// @filename: ${key}\n${content}\n`;\n });\n\n result += `\n// @filename: code.ts\nimport * as TemplateModel from './${this.templateClass.getNamespace()}';\nimport dayjs from 'dayjs';\nimport jp from 'jsonpath';\n\ntype GenerationOptions = {\n now?:string,\n locale?:string\n}\n`;\n return result;\n }\n}","\n/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable quotes */\n// file generated by ./scripts/updateRuntimeDependencies.js\n\n\nexport const DAYJS_BASE64 = 'Ly8vIDxyZWZlcmVuY2UgcGF0aD0iLi9sb2NhbGUvaW5kZXguZC50cyIgLz4KCmV4cG9ydCA9IGRheWpzOwoKZGVjbGFyZSBmdW5jdGlvbiBkYXlqcyAoZGF0ZT86IGRheWpzLkNvbmZpZ1R5cGUpOiBkYXlqcy5EYXlqcwoKZGVjbGFyZSBmdW5jdGlvbiBkYXlqcyAoZGF0ZT86IGRheWpzLkNvbmZpZ1R5cGUsIGZvcm1hdD86IGRheWpzLk9wdGlvblR5cGUsIHN0cmljdD86IGJvb2xlYW4pOiBkYXlqcy5EYXlqcwoKZGVjbGFyZSBmdW5jdGlvbiBkYXlqcyAoZGF0ZT86IGRheWpzLkNvbmZpZ1R5cGUsIGZvcm1hdD86IGRheWpzLk9wdGlvblR5cGUsIGxvY2FsZT86IHN0cmluZywgc3RyaWN0PzogYm9vbGVhbik6IGRheWpzLkRheWpzCgpkZWNsYXJlIG5hbWVzcGFjZSBkYXlqcyB7CiAgaW50ZXJmYWNlIENvbmZpZ1R5cGVNYXAgewogICAgZGVmYXVsdDogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSB8IERheWpzIHwgbnVsbCB8IHVuZGVmaW5lZAogIH0KCiAgZXhwb3J0IHR5cGUgQ29uZmlnVHlwZSA9IENvbmZpZ1R5cGVNYXBba2V5b2YgQ29uZmlnVHlwZU1hcF0KCiAgZXhwb3J0IGludGVyZmFjZSBGb3JtYXRPYmplY3QgeyBsb2NhbGU/OiBzdHJpbmcsIGZvcm1hdD86IHN0cmluZywgdXRjPzogYm9vbGVhbiB9CgogIGV4cG9ydCB0eXBlIE9wdGlvblR5cGUgPSBGb3JtYXRPYmplY3QgfCBzdHJpbmcgfCBzdHJpbmdbXQoKICBleHBvcnQgdHlwZSBVbml0VHlwZVNob3J0ID0gJ2QnIHwgJ0QnIHwgJ00nIHwgJ3knIHwgJ2gnIHwgJ20nIHwgJ3MnIHwgJ21zJwoKICBleHBvcnQgdHlwZSBVbml0VHlwZUxvbmcgPSAnbWlsbGlzZWNvbmQnIHwgJ3NlY29uZCcgfCAnbWludXRlJyB8ICdob3VyJyB8ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJyB8ICdkYXRlJwoKICBleHBvcnQgdHlwZSBVbml0VHlwZUxvbmdQbHVyYWwgPSAnbWlsbGlzZWNvbmRzJyB8ICdzZWNvbmRzJyB8ICdtaW51dGVzJyB8ICdob3VycycgfCAnZGF5cycgfCAnbW9udGhzJyB8ICd5ZWFycycgfCAnZGF0ZXMnCiAgCiAgZXhwb3J0IHR5cGUgVW5pdFR5cGUgPSBVbml0VHlwZUxvbmcgfCBVbml0VHlwZUxvbmdQbHVyYWwgfCBVbml0VHlwZVNob3J0OwoKICBleHBvcnQgdHlwZSBPcFVuaXRUeXBlID0gVW5pdFR5cGUgfCAid2VlayIgfCAid2Vla3MiIHwgJ3cnOwogIGV4cG9ydCB0eXBlIFFVbml0VHlwZSA9IFVuaXRUeXBlIHwgInF1YXJ0ZXIiIHwgInF1YXJ0ZXJzIiB8ICdRJzsKICBleHBvcnQgdHlwZSBNYW5pcHVsYXRlVHlwZSA9IEV4Y2x1ZGU8T3BVbml0VHlwZSwgJ2RhdGUnIHwgJ2RhdGVzJz47CiAgY2xhc3MgRGF5anMgewogICAgY29uc3RydWN0b3IgKGNvbmZpZz86IENvbmZpZ1R5cGUpCiAgICAvKioKICAgICAqIEFsbCBEYXkuanMgb2JqZWN0cyBhcmUgaW1tdXRhYmxlLiBTdGlsbCwgYGRheWpzI2Nsb25lYCBjYW4gY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGlmIHlvdSBuZWVkIG9uZS4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5jbG9uZSgpLy8gPT4gRGF5anMKICAgICAqIGRheWpzKGRheWpzKCcyMDE5LTAxLTI1JykpIC8vIHBhc3NpbmcgYSBEYXlqcyBvYmplY3QgdG8gYSBjb25zdHJ1Y3RvciB3aWxsIGFsc28gY2xvbmUgaXQKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vcGFyc2UvZGF5anMtY2xvbmUKICAgICAqLwogICAgY2xvbmUoKTogRGF5anMKICAgIC8qKgogICAgICogVGhpcyByZXR1cm5zIGEgYGJvb2xlYW5gIGluZGljYXRpbmcgd2hldGhlciB0aGUgRGF5LmpzIG9iamVjdCBjb250YWlucyBhIHZhbGlkIGRhdGUgb3Igbm90LgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmlzVmFsaWQoKS8vID0+IGJvb2xlYW4KICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vcGFyc2UvaXMtdmFsaWQKICAgICAqLwogICAgaXNWYWxpZCgpOiBib29sZWFuCiAgICAvKioKICAgICAqIEdldCB0aGUgeWVhci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS55ZWFyKCkvLyA9PiAyMDIwCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQveWVhcgogICAgICovCiAgICB5ZWFyKCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHllYXIuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkueWVhcigyMDAwKS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQveWVhcgogICAgICovCiAgICB5ZWFyKHZhbHVlOiBudW1iZXIpOiBEYXlqcwogICAgLyoqCiAgICAgKiBHZXQgdGhlIG1vbnRoLgogICAgICoKICAgICAqIE1vbnRocyBhcmUgemVybyBpbmRleGVkLCBzbyBKYW51YXJ5IGlzIG1vbnRoIDAuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkubW9udGgoKS8vID0+IDAtMTEKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9tb250aAogICAgICovCiAgICBtb250aCgpOiBudW1iZXIKICAgIC8qKgogICAgICogU2V0IHRoZSBtb250aC4KICAgICAqCiAgICAgKiBNb250aHMgYXJlIHplcm8gaW5kZXhlZCwgc28gSmFudWFyeSBpcyBtb250aCAwLgogICAgICoKICAgICAqIEFjY2VwdHMgbnVtYmVycyBmcm9tIDAgdG8gMTEuIElmIHRoZSByYW5nZSBpcyBleGNlZWRlZCwgaXQgd2lsbCBidWJibGUgdXAgdG8gdGhlIG5leHQgeWVhci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5tb250aCgwKS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvbW9udGgKICAgICAqLwogICAgbW9udGgodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgZGF0ZSBvZiB0aGUgbW9udGguCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuZGF0ZSgpLy8gPT4gMS0zMQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L2RhdGUKICAgICAqLwogICAgZGF0ZSgpOiBudW1iZXIKICAgIC8qKgogICAgICogU2V0IHRoZSBkYXRlIG9mIHRoZSBtb250aC4KICAgICAqCiAgICAgKiBBY2NlcHRzIG51bWJlcnMgZnJvbSAxIHRvIDMxLiBJZiB0aGUgcmFuZ2UgaXMgZXhjZWVkZWQsIGl0IHdpbGwgYnViYmxlIHVwIHRvIHRoZSBuZXh0IG1vbnRocy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5kYXRlKDEpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9kYXRlCiAgICAgKi8KICAgIGRhdGUodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgZGF5IG9mIHRoZSB3ZWVrLgogICAgICoKICAgICAqIFJldHVybnMgbnVtYmVycyBmcm9tIDAgKFN1bmRheSkgdG8gNiAoU2F0dXJkYXkpLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmRheSgpLy8gMC02CiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvZGF5CiAgICAgKi8KICAgIGRheSgpOiBudW1iZXIKICAgIC8qKgogICAgICogU2V0IHRoZSBkYXkgb2YgdGhlIHdlZWsuCiAgICAgKgogICAgICogQWNjZXB0cyBudW1iZXJzIGZyb20gMCAoU3VuZGF5KSB0byA2IChTYXR1cmRheSkuIElmIHRoZSByYW5nZSBpcyBleGNlZWRlZCwgaXQgd2lsbCBidWJibGUgdXAgdG8gbmV4dCB3ZWVrcy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5kYXkoMCkvLyA9PiBEYXlqcwogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L2RheQogICAgICovCiAgICBkYXkodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgaG91ci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5ob3VyKCkvLyA9PiAwLTIzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvaG91cgogICAgICovCiAgICBob3VyKCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGhvdXIuCiAgICAgKgogICAgICogQWNjZXB0cyBudW1iZXJzIGZyb20gMCB0byAyMy4gSWYgdGhlIHJhbmdlIGlzIGV4Y2VlZGVkLCBpdCB3aWxsIGJ1YmJsZSB1cCB0byB0aGUgbmV4dCBkYXkuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuaG91cigxMikvLyA9PiBEYXlqcwogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L2hvdXIKICAgICAqLwogICAgaG91cih2YWx1ZTogbnVtYmVyKTogRGF5anMKICAgIC8qKgogICAgICogR2V0IHRoZSBtaW51dGVzLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLm1pbnV0ZSgpLy8gPT4gMC01OQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L21pbnV0ZQogICAgICovCiAgICBtaW51dGUoKTogbnVtYmVyCiAgICAvKioKICAgICAqIFNldCB0aGUgbWludXRlcy4KICAgICAqCiAgICAgKiBBY2NlcHRzIG51bWJlcnMgZnJvbSAwIHRvIDU5LiBJZiB0aGUgcmFuZ2UgaXMgZXhjZWVkZWQsIGl0IHdpbGwgYnViYmxlIHVwIHRvIHRoZSBuZXh0IGhvdXIuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkubWludXRlKDU5KS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvbWludXRlCiAgICAgKi8KICAgIG1pbnV0ZSh2YWx1ZTogbnVtYmVyKTogRGF5anMKICAgIC8qKgogICAgICogR2V0IHRoZSBzZWNvbmRzLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLnNlY29uZCgpLy8gPT4gMC01OQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L3NlY29uZAogICAgICovCiAgICBzZWNvbmQoKTogbnVtYmVyCiAgICAvKioKICAgICAqIFNldCB0aGUgc2Vjb25kcy4KICAgICAqCiAgICAgKiBBY2NlcHRzIG51bWJlcnMgZnJvbSAwIHRvIDU5LiBJZiB0aGUgcmFuZ2UgaXMgZXhjZWVkZWQsIGl0IHdpbGwgYnViYmxlIHVwIHRvIHRoZSBuZXh0IG1pbnV0ZXMuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuc2Vjb25kKDEpLy8gRGF5anMKICAgICAqIGBgYAogICAgICovCiAgICBzZWNvbmQodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgbWlsbGlzZWNvbmRzLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLm1pbGxpc2Vjb25kKCkvLyA9PiAwLTk5OQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L21pbGxpc2Vjb25kCiAgICAgKi8KICAgIG1pbGxpc2Vjb25kKCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBTZXQgdGhlIG1pbGxpc2Vjb25kcy4KICAgICAqCiAgICAgKiBBY2NlcHRzIG51bWJlcnMgZnJvbSAwIHRvIDk5OS4gSWYgdGhlIHJhbmdlIGlzIGV4Y2VlZGVkLCBpdCB3aWxsIGJ1YmJsZSB1cCB0byB0aGUgbmV4dCBzZWNvbmRzLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLm1pbGxpc2Vjb25kKDEpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9taWxsaXNlY29uZAogICAgICovCiAgICBtaWxsaXNlY29uZCh2YWx1ZTogbnVtYmVyKTogRGF5anMKICAgIC8qKgogICAgICogR2VuZXJpYyBzZXR0ZXIsIGFjY2VwdGluZyB1bml0IGFzIGZpcnN0IGFyZ3VtZW50LCBhbmQgdmFsdWUgYXMgc2Vjb25kLCByZXR1cm5zIGEgbmV3IGluc3RhbmNlIHdpdGggdGhlIGFwcGxpZWQgY2hhbmdlcy4KICAgICAqCiAgICAgKiBJbiBnZW5lcmFsOgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLnNldCh1bml0LCB2YWx1ZSkgPT09IGRheWpzKClbdW5pdF0odmFsdWUpCiAgICAgKiBgYGAKICAgICAqIFVuaXRzIGFyZSBjYXNlIGluc2Vuc2l0aXZlLCBhbmQgc3VwcG9ydCBwbHVyYWwgYW5kIHNob3J0IGZvcm1zLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLnNldCgnZGF0ZScsIDEpCiAgICAgKiBkYXlqcygpLnNldCgnbW9udGgnLCAzKSAvLyBBcHJpbAogICAgICogZGF5anMoKS5zZXQoJ3NlY29uZCcsIDMwKQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L3NldAogICAgICovCiAgICBzZXQodW5pdDogVW5pdFR5cGUsIHZhbHVlOiBudW1iZXIpOiBEYXlqcwogICAgLyoqCiAgICAgKiBTdHJpbmcgZ2V0dGVyLCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGluZm9ybWF0aW9uIGdldHRpbmcgZnJvbSBEYXkuanMgb2JqZWN0LgogICAgICoKICAgICAqIEluIGdlbmVyYWw6CiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuZ2V0KHVuaXQpID09PSBkYXlqcygpW3VuaXRdKCkKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuZ2V0KCd5ZWFyJykKICAgICAqIGRheWpzKCkuZ2V0KCdtb250aCcpIC8vIHN0YXJ0IDAKICAgICAqIGRheWpzKCkuZ2V0KCdkYXRlJykKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9nZXQKICAgICAqLwogICAgZ2V0KHVuaXQ6IFVuaXRUeXBlKTogbnVtYmVyCiAgICAvKioKICAgICAqIFJldHVybnMgYSBjbG9uZWQgRGF5LmpzIG9iamVjdCB3aXRoIGEgc3BlY2lmaWVkIGFtb3VudCBvZiB0aW1lIGFkZGVkLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmFkZCg3LCAnZGF5JykvLyA9PiBEYXlqcwogICAgICogYGBgCiAgICAgKiBVbml0cyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSwgYW5kIHN1cHBvcnQgcGx1cmFsIGFuZCBzaG9ydCBmb3Jtcy4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9tYW5pcHVsYXRlL2FkZAogICAgICovCiAgICBhZGQodmFsdWU6IG51bWJlciwgdW5pdD86IE1hbmlwdWxhdGVUeXBlKTogRGF5anMKICAgIC8qKgogICAgICogUmV0dXJucyBhIGNsb25lZCBEYXkuanMgb2JqZWN0IHdpdGggYSBzcGVjaWZpZWQgYW1vdW50IG9mIHRpbWUgc3VidHJhY3RlZC4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5zdWJ0cmFjdCg3LCAneWVhcicpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vbWFuaXB1bGF0ZS9zdWJ0cmFjdAogICAgICovCiAgICBzdWJ0cmFjdCh2YWx1ZTogbnVtYmVyLCB1bml0PzogTWFuaXB1bGF0ZVR5cGUpOiBEYXlqcwogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgY2xvbmVkIERheS5qcyBvYmplY3QgYW5kIHNldCBpdCB0byB0aGUgc3RhcnQgb2YgYSB1bml0IG9mIHRpbWUuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuc3RhcnRPZigneWVhcicpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vbWFuaXB1bGF0ZS9zdGFydC1vZgogICAgICovCiAgICBzdGFydE9mKHVuaXQ6IE9wVW5pdFR5cGUpOiBEYXlqcwogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgY2xvbmVkIERheS5qcyBvYmplY3QgYW5kIHNldCBpdCB0byB0aGUgZW5kIG9mIGEgdW5pdCBvZiB0aW1lLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmVuZE9mKCdtb250aCcpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vbWFuaXB1bGF0ZS9lbmQtb2YKICAgICAqLwogICAgZW5kT2YodW5pdDogT3BVbml0VHlwZSk6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgZm9ybWF0dGVkIGRhdGUgYWNjb3JkaW5nIHRvIHRoZSBzdHJpbmcgb2YgdG9rZW5zIHBhc3NlZCBpbi4KICAgICAqCiAgICAgKiBUbyBlc2NhcGUgY2hhcmFjdGVycywgd3JhcCB0aGVtIGluIHNxdWFyZSBicmFja2V0cyAoZS5nLiBbTU1dKS4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5mb3JtYXQoKS8vID0+IGN1cnJlbnQgZGF0ZSBpbiBJU084NjAxLCB3aXRob3V0IGZyYWN0aW9uIHNlY29uZHMgZS5nLiAnMjAyMC0wNC0wMlQwODowMjoxNy0wNTowMCcKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykuZm9ybWF0KCdbWVlZWWVzY2FwZV0gWVlZWS1NTS1ERFRISDptbTpzc1pbWl0nKS8vICdZWVlZZXNjYXBlIDIwMTktMDEtMjVUMDA6MDA6MDAtMDI6MDBaJwogICAgICogZGF5anMoJzIwMTktMDEtMjUnKS5mb3JtYXQoJ0REL01NL1lZWVknKSAvLyAnMjUvMDEvMjAxOScKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZGlzcGxheS9mb3JtYXQKICAgICAqLwogICAgZm9ybWF0KHRlbXBsYXRlPzogc3RyaW5nKTogc3RyaW5nCiAgICAvKioKICAgICAqIFRoaXMgaW5kaWNhdGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGRhdGUtdGltZSBpbiB0aGUgc3BlY2lmaWVkIHVuaXQuCiAgICAgKgogICAgICogVG8gZ2V0IHRoZSBkaWZmZXJlbmNlIGluIG1pbGxpc2Vjb25kcywgdXNlIGBkYXlqcyNkaWZmYAogICAgICogYGBgCiAgICAgKiBjb25zdCBkYXRlMSA9IGRheWpzKCcyMDE5LTAxLTI1JykKICAgICAqIGNvbnN0IGRhdGUyID0gZGF5anMoJzIwMTgtMDYtMDUnKQogICAgICogZGF0ZTEuZGlmZihkYXRlMikgLy8gMjAyMTQwMDAwMDAgZGVmYXVsdCBtaWxsaXNlY29uZHMKICAgICAqIGRhdGUxLmRpZmYoKSAvLyBtaWxsaXNlY29uZHMgdG8gY3VycmVudCB0aW1lCiAgICAgKiBgYGAKICAgICAqCiAgICAgKiBUbyBnZXQgdGhlIGRpZmZlcmVuY2UgaW4gYW5vdGhlciB1bml0IG9mIG1lYXN1cmVtZW50LCBwYXNzIHRoYXQgbWVhc3VyZW1lbnQgYXMgdGhlIHNlY29uZCBhcmd1bWVudC4KICAgICAqIGBgYAogICAgICogY29uc3QgZGF0ZTEgPSBkYXlqcygnMjAxOS0wMS0yNScpCiAgICAgKiBkYXRlMS5kaWZmKCcyMDE4LTA2LTA1JywgJ21vbnRoJykgLy8gNwogICAgICogYGBgCiAgICAgKiBVbml0cyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSwgYW5kIHN1cHBvcnQgcGx1cmFsIGFuZCBzaG9ydCBmb3Jtcy4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L2RpZmZlcmVuY2UKICAgICAqLwogICAgZGlmZihkYXRlPzogQ29uZmlnVHlwZSwgdW5pdD86IFFVbml0VHlwZSB8IE9wVW5pdFR5cGUsIGZsb2F0PzogYm9vbGVhbik6IG51bWJlcgogICAgLyoqCiAgICAgKiBUaGlzIHJldHVybnMgdGhlIG51bWJlciBvZiAqKm1pbGxpc2Vjb25kcyoqIHNpbmNlIHRoZSBVbml4IEVwb2NoIG9mIHRoZSBEYXkuanMgb2JqZWN0LgogICAgICogYGBgCiAgICAgKiBkYXlqcygnMjAxOS0wMS0yNScpLnZhbHVlT2YoKSAvLyAxNTQ4MzgxNjAwMDAwCiAgICAgKiArZGF5anMoMTU0ODM4MTYwMDAwMCkgLy8gMTU0ODM4MTYwMDAwMAogICAgICogYGBgCiAgICAgKiBUbyBnZXQgYSBVbml4IHRpbWVzdGFtcCAodGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCkgZnJvbSBhIERheS5qcyBvYmplY3QsIHlvdSBzaG91bGQgdXNlIFVuaXggVGltZXN0YW1wIGBkYXlqcyN1bml4KClgLgogICAgICoKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2Rpc3BsYXkvdW5peC10aW1lc3RhbXAtbWlsbGlzZWNvbmRzCiAgICAgKi8KICAgIHZhbHVlT2YoKTogbnVtYmVyCiAgICAvKioKICAgICAqIFRoaXMgcmV0dXJucyB0aGUgVW5peCB0aW1lc3RhbXAgKHRoZSBudW1iZXIgb2YgKipzZWNvbmRzKiogc2luY2UgdGhlIFVuaXggRXBvY2gpIG9mIHRoZSBEYXkuanMgb2JqZWN0LgogICAgICogYGBgCiAgICAgKiBkYXlqcygnMjAxOS0wMS0yNScpLnVuaXgoKSAvLyAxNTQ4MzgxNjAwCiAgICAgKiBgYGAKICAgICAqIFRoaXMgdmFsdWUgaXMgZmxvb3JlZCB0byB0aGUgbmVhcmVzdCBzZWNvbmQsIGFuZCBkb2VzIG5vdCBpbmNsdWRlIGEgbWlsbGlzZWNvbmRzIGNvbXBvbmVudC4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L3VuaXgtdGltZXN0YW1wCiAgICAgKi8KICAgIHVuaXgoKTogbnVtYmVyCiAgICAvKioKICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhlIGN1cnJlbnQgbW9udGguCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykuZGF5c0luTW9udGgoKSAvLyAzMQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L2RheXMtaW4tbW9udGgKICAgICAqLwogICAgZGF5c0luTW9udGgoKTogbnVtYmVyCiAgICAvKioKICAgICAqIFRvIGdldCBhIGNvcHkgb2YgdGhlIG5hdGl2ZSBgRGF0ZWAgb2JqZWN0IHBhcnNlZCBmcm9tIHRoZSBEYXkuanMgb2JqZWN0IHVzZSBgZGF5anMjdG9EYXRlYC4KICAgICAqIGBgYAogICAgICogZGF5anMoJzIwMTktMDEtMjUnKS50b0RhdGUoKS8vID0+IERhdGUKICAgICAqIGBgYAogICAgICovCiAgICB0b0RhdGUoKTogRGF0ZQogICAgLyoqCiAgICAgKiBUbyBzZXJpYWxpemUgYXMgYW4gSVNPIDg2MDEgc3RyaW5nLgogICAgICogYGBgCiAgICAgKiBkYXlqcygnMjAxOS0wMS0yNScpLnRvSlNPTigpIC8vICcyMDE5LTAxLTI1VDAyOjAwOjAwLjAwMFonCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2Rpc3BsYXkvYXMtanNvbgogICAgICovCiAgICB0b0pTT04oKTogc3RyaW5nCiAgICAvKioKICAgICAqIFRvIGZvcm1hdCBhcyBhbiBJU08gODYwMSBzdHJpbmcuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykudG9JU09TdHJpbmcoKSAvLyAnMjAxOS0wMS0yNVQwMjowMDowMC4wMDBaJwogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L2FzLWlzby1zdHJpbmcKICAgICAqLwogICAgdG9JU09TdHJpbmcoKTogc3RyaW5nCiAgICAvKioKICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykudG9TdHJpbmcoKSAvLyAnRnJpLCAyNSBKYW4gMjAxOSAwMjowMDowMCBHTVQnCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2Rpc3BsYXkvYXMtc3RyaW5nCiAgICAgKi8KICAgIHRvU3RyaW5nKCk6IHN0cmluZwogICAgLyoqCiAgICAgKiBHZXQgdGhlIFVUQyBvZmZzZXQgaW4gbWludXRlcy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS51dGNPZmZzZXQoKQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9tYW5pcHVsYXRlL3V0Yy1vZmZzZXQKICAgICAqLwogICAgdXRjT2Zmc2V0KCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBUaGlzIGluZGljYXRlcyB3aGV0aGVyIHRoZSBEYXkuanMgb2JqZWN0IGlzIGJlZm9yZSB0aGUgb3RoZXIgc3VwcGxpZWQgZGF0ZS10aW1lLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmlzQmVmb3JlKGRheWpzKCcyMDExLTAxLTAxJykpIC8vIGRlZmF1bHQgbWlsbGlzZWNvbmRzCiAgICAgKiBgYGAKICAgICAqIElmIHlvdSB3YW50IHRvIGxpbWl0IHRoZSBncmFudWxhcml0eSB0byBhIHVuaXQgb3RoZXIgdGhhbiBtaWxsaXNlY29uZHMsIHBhc3MgaXQgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuaXNCZWZvcmUoJzIwMTEtMDEtMDEnLCAneWVhcicpLy8gPT4gYm9vbGVhbgogICAgICogYGBgCiAgICAgKiBVbml0cyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSwgYW5kIHN1cHBvcnQgcGx1cmFsIGFuZCBzaG9ydCBmb3Jtcy4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9xdWVyeS9pcy1iZWZvcmUKICAgICAqLwogICAgaXNCZWZvcmUoZGF0ZTogQ29uZmlnVHlwZSwgdW5pdD86IE9wVW5pdFR5cGUpOiBib29sZWFuCiAgICAvKioKICAgICAqIFRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIERheS5qcyBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIG90aGVyIHN1cHBsaWVkIGRhdGUtdGltZS4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5pc1NhbWUoZGF5anMoJzIwMTEtMDEtMDEnKSkgLy8gZGVmYXVsdCBtaWxsaXNlY29uZHMKICAgICAqIGBgYAogICAgICogSWYgeW91IHdhbnQgdG8gbGltaXQgdGhlIGdyYW51bGFyaXR5IHRvIGEgdW5pdCBvdGhlciB0aGFuIG1pbGxpc2Vjb25kcywgcGFzcyBpdCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5pc1NhbWUoJzIwMTEtMDEtMDEnLCAneWVhcicpLy8gPT4gYm9vbGVhbgogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9xdWVyeS9pcy1zYW1lCiAgICAgKi8KICAgIGlzU2FtZShkYXRlOiBDb25maWdUeXBlLCB1bml0PzogT3BVbml0VHlwZSk6IGJvb2xlYW4KICAgIC8qKgogICAgICogVGhpcyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgRGF5LmpzIG9iamVjdCBpcyBhZnRlciB0aGUgb3RoZXIgc3VwcGxpZWQgZGF0ZS10aW1lLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmlzQWZ0ZXIoZGF5anMoJzIwMTEtMDEtMDEnKSkgLy8gZGVmYXVsdCBtaWxsaXNlY29uZHMKICAgICAqIGBgYAogICAgICogSWYgeW91IHdhbnQgdG8gbGltaXQgdGhlIGdyYW51bGFyaXR5IHRvIGEgdW5pdCBvdGhlciB0aGFuIG1pbGxpc2Vjb25kcywgcGFzcyBpdCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5pc0FmdGVyKCcyMDExLTAxLTAxJywgJ3llYXInKS8vID0+IGJvb2xlYW4KICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vcXVlcnkvaXMtYWZ0ZXIKICAgICAqLwogICAgaXNBZnRlcihkYXRlOiBDb25maWdUeXBlLCB1bml0PzogT3BVbml0VHlwZSk6IGJvb2xlYW4KCiAgICBsb2NhbGUoKTogc3RyaW5nCgogICAgbG9jYWxlKHByZXNldDogc3RyaW5nIHwgSUxvY2FsZSwgb2JqZWN0PzogUGFydGlhbDxJTG9jYWxlPik6IERheWpzCiAgfQoKICBleHBvcnQgdHlwZSBQbHVnaW5GdW5jPFQgPSB1bmtub3duPiA9IChvcHRpb246IFQsIGM6IHR5cGVvZiBEYXlqcywgZDogdHlwZW9mIGRheWpzKSA9PiB2b2lkCgogIGV4cG9ydCBmdW5jdGlvbiBleHRlbmQ8VCA9IHVua25vd24+KHBsdWdpbjogUGx1Z2luRnVuYzxUPiwgb3B0aW9uPzogVCk6IERheWpzCgogIGV4cG9ydCBmdW5jdGlvbiBsb2NhbGUocHJlc2V0Pzogc3RyaW5nIHwgSUxvY2FsZSwgb2JqZWN0PzogUGFydGlhbDxJTG9jYWxlPiwgaXNMb2NhbD86IGJvb2xlYW4pOiBzdHJpbmcKCiAgZXhwb3J0IGZ1bmN0aW9uIGlzRGF5anMoZDogYW55KTogZCBpcyBEYXlqcwoKICBleHBvcnQgZnVuY3Rpb24gdW5peCh0OiBudW1iZXIpOiBEYXlqcwoKICBjb25zdCBMcyA6IHsgW2tleTogc3RyaW5nXSA6ICBJTG9jYWxlIH0KfQo=';\nexport const JSONPATH_BASE64 = 'Ly8gVHlwZSBkZWZpbml0aW9ucyBmb3IganNvbnBhdGggMC4yLjExDQovLyBQcm9qZWN0OiBodHRwczovL3d3dy5ucG1qcy5vcmcvcGFja2FnZS9qc29ucGF0aA0KLy8gRGVmaW5pdGlvbnMgYnk6IEhpcm9raSBIb3JpdWNoaSA8aHR0cHM6Ly9naXRodWIuY29tL2hvcml1Y2hpPiwgSWthIDxodHRwczovL2dpdGh1Yi5jb20vaWthdHlhbmc+DQovLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQNCg0KdHlwZSBQYXRoQ29tcG9uZW50ID0gc3RyaW5nIHwgbnVtYmVyOw0KDQovKioNCiAqIEZpbmQgZWxlbWVudHMgaW4gYG9iamAgbWF0Y2hpbmcgYHBhdGhFeHByZXNzaW9uYC4gUmV0dXJucyBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0DQogKiBzYXRpc2Z5IHRoZSBwcm92aWRlZCBKU09OUGF0aCBleHByZXNzaW9uLG9yIGFuIGVtcHR5IGFycmF5IGlmIG5vbmUgd2VyZSBtYXRjaGVkLg0KICogUmV0dXJucyBvbmx5IGZpcnN0IGBjb3VudGAgZWxlbWVudHMgaWYgc3BlY2lmaWVkLg0KICovDQpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBxdWVyeShvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZywgY291bnQ/OiBudW1iZXIpOiBhbnlbXTsNCg0KLyoqDQogKiBGaW5kIHBhdGhzIHRvIGVsZW1lbnRzIGluIGBvYmpgIG1hdGNoaW5nIGBwYXRoRXhwcmVzc2lvbmAuIFJldHVybnMgYW4gYXJyYXkgb2YNCiAqIGVsZW1lbnQgcGF0aHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBKU09OUGF0aCBleHByZXNzaW9uLiBFYWNoIHBhdGggaXMgaXRzZWxmIGFuDQogKiBhcnJheSBvZiBrZXlzIHJlcHJlc2VudGluZyB0aGUgbG9jYXRpb24gd2l0aGluIGBvYmpgIG9mIHRoZSBtYXRjaGluZyBlbGVtZW50LiBSZXR1cm5zDQogKiBvbmx5IGZpcnN0IGBjb3VudGAgcGF0aHMgaWYgc3BlY2lmaWVkLg0KICovDQpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYXRocyhvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZywgY291bnQ/OiBudW1iZXIpOiBQYXRoQ29tcG9uZW50W11bXTsNCg0KLyoqDQogKiBGaW5kIGVsZW1lbnRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHBhdGhzIGluIGBvYmpgIG1hdGNoaW5nIGBwYXRoRXhwcmVzc2lvbmAuDQogKiBSZXR1cm5zIGFuIGFycmF5IG9mIG5vZGUgb2JqZWN0cyB3aGVyZSBlYWNoIG5vZGUgaGFzIGEgYHBhdGhgIGNvbnRhaW5pbmcgYW4gYXJyYXkgb2YNCiAqIGtleXMgcmVwcmVzZW50aW5nIHRoZSBsb2NhdGlvbiB3aXRoaW4gYG9iamAsIGFuZCBhIGB2YWx1ZWAgcG9pbnRpbmcgdG8gdGhlIG1hdGNoZWQNCiAqIGVsZW1lbnQuIFJldHVybnMgb25seSBmaXJzdCBgY291bnRgIG5vZGVzIGlmIHNwZWNpZmllZC4NCiAqLw0KZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbm9kZXMob2JqOiBhbnksIHBhdGhFeHByZXNzaW9uOiBzdHJpbmcsIGNvdW50PzogbnVtYmVyKTogeyBwYXRoOiBQYXRoQ29tcG9uZW50W107IHZhbHVlOiBhbnk7IH1bXTsNCg0KLyoqDQogKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBtYXRjaGluZyBgcGF0aEV4cHJlc3Npb25gLiBJZiBgbmV3VmFsdWVgIGlzDQogKiBwcm92aWRlZCwgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgYW5kIHJldHVybnMgdGhlIG5ldyB2YWx1ZS4NCiAqLw0KZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmFsdWUob2JqOiBhbnksIHBhdGhFeHByZXNzaW9uOiBzdHJpbmcpOiBhbnk7DQpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB2YWx1ZTxUPihvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZywgbmV3VmFsdWU6IFQpOiBUOw0KDQovKioNCiAqIFJldHVybnMgdGhlIHBhcmVudCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudC4NCiAqLw0KZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcGFyZW50KG9iajogYW55LCBwYXRoRXhwcmVzc2lvbjogc3RyaW5nKTogYW55Ow0KDQovKioNCiAqIFJ1bnMgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIGBmbmAgb24gZWFjaCBtYXRjaGluZyBlbGVtZW50LCBhbmQgcmVwbGFjZXMgZWFjaA0KICogbWF0Y2hpbmcgZWxlbWVudCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHRoZQ0KICogdmFsdWUgb2YgdGhlIG1hdGNoaW5nIGVsZW1lbnQgYXMgaXRzIG9ubHkgcGFyYW1ldGVyLiBSZXR1cm5zIG1hdGNoaW5nIG5vZGVzIHdpdGgNCiAqIHRoZWlyIHVwZGF0ZWQgdmFsdWVzLg0KICovDQpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseShvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZywgZm46ICh4OiBhbnkpID0+IGFueSk6IHsgcGF0aDogUGF0aENvbXBvbmVudFtdOyB2YWx1ZTogYW55OyB9W107DQoNCi8qKg0KICogUGFyc2UgdGhlIHByb3ZpZGVkIEpTT05QYXRoIGV4cHJlc3Npb24gaW50byBwYXRoIGNvbXBvbmVudHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQNCiAqIG9wZXJhdGlvbnMuDQogKi8NCmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHBhcnNlKHBhdGhFeHByZXNzaW9uOiBzdHJpbmcpOiBhbnlbXTsNCg0KLyoqDQogKiBSZXR1cm5zIGEgcGF0aCBleHByZXNzaW9uIGluIHN0cmluZyBmb3JtLCBnaXZlbiBhIHBhdGguIFRoZSBzdXBwbGllZCBwYXRoIG1heSBlaXRoZXINCiAqIGJlIGEgZmxhdCBhcnJheSBvZiBrZXlzLCBhcyByZXR1cm5lZCBieSBganAubm9kZXNgIGZvciBleGFtcGxlLCBvciBtYXkgYWx0ZXJuYXRpdmVseSBiZSBhDQogKiBmdWxseSBwYXJzZWQgcGF0aCBleHByZXNzaW9uIGluIHRoZSBmb3JtIG9mIGFuIGFycmF5IG9mIHBhdGggY29tcG9uZW50cyBhcyByZXR1cm5lZA0KICogYnkgYGpwLnBhcnNlYC4NCiAqLw0KZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc3RyaW5naWZ5KHBhdGg6IFBhdGhDb21wb25lbnRbXSk6IHN0cmluZzsNCg0KZXhwb3J0IGFzIG5hbWVzcGFjZSBqc29ucGF0aDsNCg==';\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createDefaultMapFromNodeModules, createDefaultMapFromCDN } from '@typescript/vfs';\nimport { twoslasher, TwoSlashOptions, TwoSlashReturn } from '@typescript/twoslash';\nimport { ModelManager } from '@accordproject/concerto-core';\nimport { TypeScriptCompilationContext } from './TypeScriptCompilationContext';\nimport { DAYJS_BASE64, JSONPATH_BASE64 } from './runtime/declarations';\nimport * as lzstring from 'lz-string';\n\n/**\n * Compiles user Typescript code to JavaScript. This uses the '@typescript/twoslash'\n * project which is maintained by the Typescript team and powers their web playground.\n * It uses the TypeScriptCompilationContext class to construct a payload for twoslash\n * that is composed of multiple TS files to compile, along with their 3rd-party module\n * dependencies.\n *\n * Note that the 'typescript' module is either dynamically loaded from node_modules (Node.js)\n * or from the CDN (browser). This module is used by twoslash.\n *\n * The 'updateRuntimeDependencies' script it used to package type declarations for 3rd-party\n * modules that we need to expose to user TS code: dayjs and jsonpath, these also need to be\n * added to the twoslash compilation context.\n */\nexport class TypeScriptToJavaScriptCompiler {\n context: string;\n fsMap: Map<string,string>|undefined;\n ts: any;\n\n constructor(modelManager: ModelManager, templateConceptFqn?: string) {\n this.context = new TypeScriptCompilationContext(modelManager, templateConceptFqn).getCompilationContext();\n }\n\n async initialize() {\n if(typeof window === 'undefined') {\n this.ts = await import ('typescript');\n this.fsMap = createDefaultMapFromNodeModules({\n target: this.ts.ScriptTarget.ES2020,\n });\n }\n else {\n this.ts = (await import('https://cdn.jsdelivr.net/npm/typescript@4.8.4/+esm')).default;\n if(!this.ts) {\n throw new Error('Failed to dynamically load typescript');\n }\n this.fsMap = await createDefaultMapFromCDN({ target: this.ts.ScriptTarget.ES2020 }, this.ts.version, false, this.ts);\n }\n this.fsMap.set('/node_modules/@types/dayjs/index.d.ts', Buffer.from(DAYJS_BASE64, 'base64').toString());\n this.fsMap.set('/node_modules/@types/jsonpath/index.d.ts', Buffer.from(JSONPATH_BASE64, 'base64').toString());\n }\n\n compile(typescript: string): TwoSlashReturn {\n if(!this.fsMap) {\n throw new Error('initialize must be awaited before compile is called.');\n }\n const twoSlashCode =`\n${this.context}\n${typescript}\n`;\n\n const options: TwoSlashOptions = {\n fsMap: this.fsMap,\n tsModule: this.ts,\n lzstringModule:lzstring,\n defaultOptions: {\n showEmit: true,\n noErrorValidation: true,\n showEmittedFile: 'code.js'\n }\n };\n const result = twoslasher(twoSlashCode, 'ts', options);\n return result;\n }\n}","/* eslint-disable @typescript-eslint/no-empty-interface */\n// Generated code for namespace: org.accordproject.templatemark@0.5.0\n\n// imports\n\n// Warning: Beware of circular dependencies when modifying these imports\n\n// Warning: Beware of circular dependencies when modifying these imports\n\n// Warning: Beware of circular dependencies when modifying these imports\nimport {IChild,INode} from './org.accordproject.commonmark@0.5.0';\nimport {IDecorator} from './concerto.metamodel@1.0.0';\nimport {IConcept} from './concerto@1.0.0';\n\n// interfaces\nexport enum CodeType {\n TYPESCRIPT = 'TYPESCRIPT',\n ES_2020 = 'ES_2020',\n}\n\nexport interface ICode extends IConcept {\n type: CodeType;\n contents: string;\n}\n\nexport interface IElementDefinition extends IChild {\n name: string;\n elementType?: string;\n decorators?: IDecorator[];\n}\n\nexport type ElementDefinitionUnion = IVariableDefinition | \nIFormulaDefinition | \nIBlockDefinition;\n\nexport interface IVariableDefinition extends IElementDefinition {\n identifiedBy?: string;\n}\n\nexport type VariableDefinitionUnion = IFormattedVariableDefinition | \nIEnumVariableDefinition;\n\nexport interface IFormattedVariableDefinition extends IVariableDefinition {\n format: string;\n}\n\nexport interface IEnumVariableDefinition extends IVariableDefinition {\n enumValues: string[];\n}\n\nexport interface IFormulaDefinition extends IElementDefinition {\n dependencies?: string[];\n code: ICode;\n}\n\nexport interface IBlockDefinition extends IElementDefinition {\n}\n\nexport type BlockDefinitionUnion = IClauseDefinition | \nIContractDefinition | \nIWithDefinition | \nIConditionalDefinition | \nIOptionalDefinition | \nIJoinDefinition | \nIListBlockDefinition | \nIForeachBlockDefinition | \nIWithBlockDefinition | \nIConditionalBlockDefinition | \nIOptionalBlockDefinition;\n\nexport interface IClauseDefinition extends IBlockDefinition {\n condition?: ICode;\n}\n\nexport interface IContractDefinition extends IBlockDefinition {\n}\n\nexport interface IWithDefinition extends IBlockDefinition {\n}\n\nexport interface IConditionalDefinition extends IBlockDefinition {\n whenTrue: IChild[];\n whenFalse: IChild[];\n condition?: ICode;\n dependencies?: string[];\n}\n\nexport interface IOptionalDefinition extends IBlockDefinition {\n whenSome: IChild[];\n whenNone: IChild[];\n}\n\nexport interface IJoinDefinition extends IBlockDefinition {\n separator?: string;\n locale?: string;\n type?: string;\n style?: string;\n}\n\nexport interface IListBlockDefinition extends IBlockDefinition {\n type: string;\n tight: string;\n start?: string;\n delimiter?: string;\n}\n\nexport interface IForeachBlockDefinition extends IBlockDefinition {\n}\n\nexport interface IWithBlockDefinition extends IBlockDefinition {\n}\n\nexport interface IConditionalBlockDefinition extends IBlockDefinition {\n whenTrue: IChild[];\n whenFalse: IChild[];\n condition?: ICode;\n}\n\nexport interface IOptionalBlockDefinition extends IBlockDefinition {\n whenSome: IChild[];\n whenNone: IChild[];\n}\n\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ClassDeclaration, Property } from '@accordproject/concerto-core';\nimport { existsSync, mkdirSync, rmSync } from 'fs';\nimport traverse from 'traverse';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\n\nexport function ensureDirSync(path:string) {\n !existsSync(path) && mkdirSync(path, { recursive: true });\n}\n\nexport function removeSync(path:string) {\n rmSync(path, { recursive: true, force: true });\n}\n\nexport function writeFunctionToString(templateClass:ClassDeclaration, functionName: string, returnType: string, code: string): string {\n let result = '';\n result += '/// ---cut---\\n';\n result += `export function ${functionName}(data:TemplateModel.I${templateClass.getName()}, library:any, options:GenerationOptions) : ${returnType} {\\n`;\n result += ' const now = dayjs(options?.now);\\n';\n result += ' const locale = options?.locale;\\n';\n templateClass.getProperties().forEach((p: Property) => {\n result += ` const ${p.getName()} = data.${p.getName()};\\n`;\n });\n result += ' ' + code.trim() + '\\n';\n result += '}\\n';\n result += '\\n';\n\n return result;\n}\n\nexport function nameUserCode(templateMarkDom: any) {\n return traverse(templateMarkDom).map(function (x) {\n if (x && ((x.$class === `${TemplateMarkModel.NAMESPACE}.ConditionalDefinition` && x.condition) ||\n (`${TemplateMarkModel.NAMESPACE}.ClauseDefinition` && x.condition))) {\n x.functionName = `condition_${this.path.join('_')}`;\n }\n this.update(x);\n });\n}\n\n\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport traverse from 'traverse';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\nimport { ClassDeclaration, ModelManager } from '@accordproject/concerto-core';\nimport { TypeScriptToJavaScriptCompiler } from './TypeScriptToJavaScriptCompiler';\nimport { TwoSlashReturn } from '@typescript/twoslash';\nimport { getTemplateClassDeclaration } from './Common';\nimport { CodeType, ICode } from './model-gen/org.accordproject.templatemark@0.5.0';\nimport { nameUserCode, writeFunctionToString } from './utils';\n\nconst CODE_NODES = [\n `${TemplateMarkModel.NAMESPACE}.FormulaDefinition`,\n `${TemplateMarkModel.NAMESPACE}.ConditionalDefinition`,\n `${TemplateMarkModel.NAMESPACE}.ClauseDefinition`,\n];\n\nexport type CompilerError = {\n nodeId: string;\n code: string;\n errors:TwoSlashReturn['errors'];\n};\n\nfunction checkCode(code:ICode) {\n if(code.type !== CodeType.TYPESCRIPT) {\n throw new Error(`Cannot compile ${code.contents} as it is not Typescript.`);\n }\n}\n\n/**\n * Compiles all the Typescript nodes in a TemplateMark JSON\n * to ES_2020 and returns a modified TemplateMark JSON.\n */\nexport class TemplateMarkToJavaScriptCompiler {\n modelManager:ModelManager;\n compiler: TypeScriptToJavaScriptCompiler;\n templateClass: ClassDeclaration;\n\n constructor(modelManager: ModelManager, templateConceptFqn?: string) {\n this.modelManager = modelManager;\n this.compiler = new TypeScriptToJavaScriptCompiler(modelManager,templateConceptFqn);\n this.templateClass = getTemplateClassDeclaration(modelManager,templateConceptFqn);\n }\n\n async initialize() {\n await this.compiler.initialize();\n }\n\n compile(templateJson: any) : any {\n const namedTemplateMark = nameUserCode(templateJson);\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const that = this;\n const errors = Array<CompilerError>();\n const compiled = traverse(namedTemplateMark).map(function (x) {\n if (x && CODE_NODES.includes(x.$class)) {\n if (x.code) { // formula\n checkCode(x.code);\n const result = that.compiler.compile(writeFunctionToString(that.templateClass, x.name, 'any', x.code.contents));\n if(result.errors.length === 0) {\n x.code.contents = result.code;\n x.code.type = CodeType.ES_2020;\n this.update(x);\n }\n else {\n errors.push({\n nodeId: x.name,\n code: x.code.contents,\n errors: result.errors\n });\n }\n }\n else if (x.condition) { // condition or clause (boolean condition)\n checkCode(x.condition);\n const result = that.compiler.compile(writeFunctionToString(that.templateClass, x.functionName, 'boolean', x.condition.contents));\n if(result.errors.length === 0) {\n x.condition.contents = result.code;\n x.condition.type = CodeType.ES_2020;\n this.update(x);\n }\n else {\n errors.push({\n nodeId: x.functionName,\n code: x.condition.contents,\n errors: result.errors\n });\n }\n }\n }\n });\n\n if(errors.length === 0) {\n return compiled;\n }\n else {\n throw errors;\n }\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEBUG = false;\n\n// BEWARE adding imports to this file\n// as it is used by the static code generator\n\n/**\n * BEWARE - this type is duplicated in TypeScriptCompilationContext\n * for use by code generation\n */\nexport type GenerationOptions = {\n now?:string,\n locale?:string\n}\n\nexport function joinList(data:Array<string>, joinDef:any, options?:GenerationOptions) : string {\n if(joinDef.separator) {\n return data.join(joinDef.separator);\n }\n else {\n const formatter = new Intl.ListFormat( joinDef.locale ? joinDef.locale : options?.locale,\n {\n style: (joinDef.style as Intl.ListFormatStyle),\n type: (joinDef.type as Intl.ListFormatType)\n }\n );\n return formatter.format(data);\n }\n}\n\n/**\n * These utility functions are used by the typescript code that\n * is generated from TemplateMark. They manage a stack to improve\n * debuggability.\n */\n\nfunction dump(op:string, $data:any[]) {\n if(DEBUG) {\n console.log(`${op}: ${JSON.stringify($data)}`);\n }\n}\n\nexport function peek($data:any[]) : any {\n if($data.length <= 0) {\n throw new Error('Empty array');\n }\n const result = $data[$data.length-1];\n dump('peek', $data);\n return result;\n}\n\nexport function peekProperty($data:any[], propertyName:string, allowUndefined=false) : any {\n const head = peek($data);\n const result = head[propertyName];\n if(!allowUndefined && result === undefined) {\n throw new Error(`Undefined property ${propertyName}. Current stack is ${JSON.stringify($data)}`);\n }\n return result;\n}\n\nexport function push($data:any[], item:any) : number {\n const result = $data.push(item);\n dump('push', $data);\n return result;\n}\n\nexport function addChild($data:any[], item:any) {\n const node = peek($data);\n node.nodes ? node.nodes.push(item) : node.nodes = [item];\n}\n\nexport function pop($data:any[]) : any {\n if($data.length <= 0) {\n throw new Error('Empty array');\n }\n const result = $data.pop();\n dump('pop', $data);\n return result;\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport jp from 'jsonpath';\nimport traverse from 'traverse';\n\nimport { ClassDeclaration, Factory, Introspector, ModelManager, Serializer } from '@accordproject/concerto-core';\nimport { getDrafter } from './drafting';\nimport { TemplateMarkModel, CommonMarkModel, CiceroMarkModel, ConcertoMetaModel } from '@accordproject/markdown-common';\nimport { ModelUtil } from '@accordproject/concerto-core';\n\nimport {\n TEMPLATEMARK_RE,\n FORMULA_DEFINITION_RE,\n VARIABLE_DEFINITION_RE,\n CONDITIONAL_DEFINITION_RE,\n ENUM_VARIABLE_DEFINITION_RE,\n FORMATTED_VARIABLE_DEFINITION_RE,\n WITH_DEFINITION_RE,\n LISTBLOCK_DEFINITION_RE,\n JOIN_DEFINITION_RE,\n OPTIONAL_DEFINITION_RE,\n CLAUSE_DEFINITION_RE,\n CONTRACT_DEFINITION_RE,\n TemplateData,\n NAVIGATION_NODES,\n getTemplateClassDeclaration\n} from './Common';\nimport { TemplateMarkToJavaScriptCompiler } from './TemplateMarkToJavaScriptCompiler';\nimport { CodeType, ICode } from './model-gen/org.accordproject.templatemark@0.5.0';\nimport { GenerationOptions, joinList } from './TypeScriptRuntime';\nimport dayjs from 'dayjs';\n\nfunction checkCode(code:ICode) {\n if(code.type !== CodeType.ES_2020) {\n throw new Error(`Cannot run ${code.contents} as it is not ES_2020 JavaScript.`);\n }\n}\n\n/**\n * Evaluates a JS expression\n * @param {*} clauseLibrary the clause library\n * @param {*} data the contract data\n * @param {string} fn the JS function (including header)\n * @param {GenerationOptions} options the generation options\n * @returns {object} the result of evaluating the expression against the data\n */\nfunction evaluateJavaScript(clauseLibrary:object, data: TemplateData, fn: string, options?: GenerationOptions): object {\n if (!data || !fn) {\n throw new Error(`Cannot evaluate JS ${fn} against ${data}`);\n }\n const functionArgNames = new Array<string>();\n functionArgNames.push('data');\n functionArgNames.push('library');\n functionArgNames.push('options');\n functionArgNames.push('dayjs');\n functionArgNames.push('jp');\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const functionArgValues = new Array<any>();\n functionArgValues.push(data);\n functionArgValues.push(clauseLibrary);\n functionArgValues.push(options);\n functionArgValues.push(dayjs);\n functionArgValues.push(jp);\n\n // chop the function header and closing\n const expression = fn.substring(fn.indexOf('{') + 1, fn.lastIndexOf('}'));\n if(expression.trim().length === 0) {\n throw new Error('Empty expression');\n }\n try {\n const fun = new Function(...functionArgNames, expression); // SECURITY!\n const result = fun(...functionArgValues);\n return result;\n }\n catch(err) {\n throw new Error(`Caught error ${err} evaluating ${expression} with arguments ${functionArgValues}`);\n }\n}\n\n/**\n * Calculates a JSON path to use to retrieve data, based on a TemplatemMark tree.\n * For example, if we hit a VariableDefinition {{city}} that is nested inside a\n * WithDefinition {{#with address}} then the JSON path returned should be '$.address.city'.\n * Similarly ListBlockDefinition, JoinDefinition and OptionalDefinition also include\n * property names that must apply to their child nodes.\n * @param {*} rootData the root of the JSON document, typically this is a TemplateMark JSON\n * @param {*} currentNode the current TemplateMark node we are processing\n * @param {string[]} paths the traverse path to the current node\n * @returns {string} the JSON path to use to retrieve data\n */\nfunction getJsonPath(rootData:any, currentNode:any, paths:string[]) : string {\n if(!currentNode) {\n throw new Error('Node must be supplied');\n }\n if(!currentNode.name) {\n throw new Error(`Node must have a name: ${JSON.stringify(currentNode)}`);\n }\n if(currentNode.name.indexOf('.') >=0) {\n // prevent JSON path injection\n throw new Error(`Invalid name property ${currentNode.name}`);\n }\n if(!paths || !paths.length || paths.length <1 ) {\n throw new Error('Paths must be supplied');\n }\n const withPath = [];\n for (let n = 1; n < paths.length; n++) {\n const sub = paths.slice(0, n);\n const obj = traverse.get(rootData, sub);\n // HACK\n // if(obj===undefined) {\n // throw new Error(`Failed to find data with path ${sub} and data ${JSON.stringify(rootData, null, 2)}`);\n // }\n if (obj && obj.$class) {\n if(NAVIGATION_NODES.indexOf(obj.$class) >= 0) {\n withPath.push(`['${obj.name}']`);\n }\n }\n }\n\n if(currentNode.name !== 'this') {\n withPath.push(`['${currentNode.name}']`);\n }\n\n return withPath.length > 0 ? `$${withPath.join('')}` : '$';\n}\n\n/**\n * Generates an AgreementMark JSON document from a template plus data.\n * @param {ModelManager} modelManager - the template model\n * @param {*} clauseLibrary - the clause library\n * @param {*} templateMark - the TemplateMark JSON document\n * @param {*} data - the template data JSON\n * @param {[GenerationOptions]} options - the generation options\n * @returns {*} the AgreementMark JSON\n */\nfunction generateAgreement(modelManager:ModelManager, clauseLibrary:object, templateMark: object, data: TemplateData, options?:GenerationOptions): any {\n const introspector = new Introspector(modelManager);\n return traverse(templateMark).map(function (context: any) {\n let stopHere = false;\n if (typeof context === 'object' && context.$class && typeof context.$class === 'string') {\n const nodeClass = context.$class as string;\n\n // rewrite node types, mapping from TemplateMark namespace to CiceroMark\n const match = nodeClass.match(TEMPLATEMARK_RE);\n if (match && match.length > 1) {\n context.$class = `${CiceroMarkModel.NAMESPACE}.${match[3]}`;\n }\n\n // convert a contract node to a clause note HACK\n if (CONTRACT_DEFINITION_RE.test(nodeClass)) {\n context.$class = `${CommonMarkModel.NAMESPACE}.Paragraph`;\n delete context.name;\n delete context.elementType;\n }\n\n // convert a WithDefinition to a Paragraph in the output\n // not 100% sure we want to do that ... we may need to process\n // the child variable nodes and reparent them?\n if (WITH_DEFINITION_RE.test(nodeClass)) {\n context.$class = `${CommonMarkModel.NAMESPACE}.Paragraph`;\n delete context.name;\n delete context.elementType;\n }\n\n // add a 'value' property to FormulaDefinition\n // with the result of evaluating the JS code\n else if (FORMULA_DEFINITION_RE.test(nodeClass)) {\n if (context.code) {\n checkCode(context.code);\n const result = evaluateJavaScript(clauseLibrary, data, context.code.contents, options);\n if(result === null) {\n context.value = '<null>';\n }\n else if(typeof result === 'string') {\n context.value = result;\n }\n else {\n context.value = JSON.stringify(result);\n }\n delete context.code;\n }\n else {\n throw new Error('Formula node is missing code.');\n }\n }\n\n // evaluate lists, recursing on each list item\n else if (LISTBLOCK_DEFINITION_RE.test(nodeClass)) {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n\n if (variableValues.length === 0) {\n throw new Error(`No values found for path '${path}' in data ${data}.`);\n }\n else {\n const arrayData = variableValues[0];\n if(!Array.isArray(arrayData)) {\n throw new Error(`Values found for path '${path}' in data ${data} is not an array: ${arrayData}.`);\n }\n else {\n context.$class = `${CommonMarkModel.NAMESPACE}.List`;\n delete context.elementType;\n delete context.name;\n context.nodes = arrayData.map( arrayItem => {\n // arrayItem is now the data for the nested traversal\n const subResult = generateAgreement(modelManager, clauseLibrary, context.nodes[0].nodes[0], arrayItem);\n return {\n $class: `${CommonMarkModel.NAMESPACE}.Item`,\n nodes: subResult.nodes ? subResult.nodes : []\n };\n });\n stopHere = true; // do not process child nodes, we've already done it above...\n }\n }\n }\n\n // map over an array of items, joining them into a Text node\n else if (JOIN_DEFINITION_RE.test(nodeClass)) {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n\n if (variableValues.length === 0) {\n throw new Error(`No values found for path '${path}' in data ${data}.`);\n }\n else {\n const arrayData = variableValues[0];\n if(!Array.isArray(arrayData)) {\n throw new Error(`Values found for path '${path}' in data ${data} is not an array: ${arrayData}.`);\n }\n else {\n context.$class = `${CommonMarkModel.NAMESPACE}.Text`;\n const drafter = getDrafter(context.elementType);\n context.text = joinList(arrayData.map( arrayItem => {\n return drafter ? drafter(arrayItem, context.format) : arrayItem as string;\n }), context, options);\n delete context.elementType;\n delete context.name;\n delete context.separator;\n delete context.locale;\n delete context.type;\n delete context.style;\n delete context.nodes;\n stopHere = true; // do not process child nodes, we've already done it above...\n }\n }\n }\n\n // add a 'value' property to VariableDefinition\n // with the value of the variable from 'data'\n else if (VARIABLE_DEFINITION_RE.test(nodeClass) ||\n ENUM_VARIABLE_DEFINITION_RE.test(nodeClass) ||\n FORMATTED_VARIABLE_DEFINITION_RE.test(nodeClass)) {\n if(typeof data === 'object') {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n if (variableValues.length === 0) {\n throw new Error(`No values found for path '${path}' in data ${data}.`);\n }\n else {\n // convert the value to a string, optionally using the formatter\n const variableValue = variableValues[0];\n const type = (ModelUtil as any).isPrimitiveType(context.elementType) ? null : introspector.getClassDeclaration(context.elementType);\n // we want to draft Enums as strings, not objects\n const drafter = getDrafter(type && type.isEnum() ? 'String' : context.elementType);\n context.value = drafter ? drafter(variableValue, context.format) : JSON.stringify(variableValue) as string;\n }\n }\n else {\n // a list of enum values or primitives brings us here\n const variableValue = data;\n const type = (ModelUtil as any).isPrimitiveType(context.elementType) ? null : introspector.getClassDeclaration(context.elementType);\n // we want to draft Enums as strings, not objects\n const drafter = getDrafter(type && type.isEnum() ? 'String' : context.elementType);\n context.value = drafter ? drafter(variableValue, context.format) : JSON.stringify(variableValue) as string;\n }\n }\n\n // add a 'isTrue' property to ConditionDefinition\n // with the result of evaluating the JS code or a boolean property\n else if (CONDITIONAL_DEFINITION_RE.test(nodeClass)) {\n if (context.condition) {\n checkCode(context.condition);\n context.isTrue = !!evaluateJavaScript(clauseLibrary, data, context.condition.contents, options) as unknown as boolean;\n }\n else {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n if (variableValues && variableValues.length) {\n if(variableValues.length === 1) {\n context.isTrue = !!variableValues[0];\n }\n else {\n throw new Error(`Multiple values found for path '${path}' in data ${data}.`);\n }\n }\n else {\n context.isTrue = false;\n }\n }\n context.nodes = context.isTrue ? context.whenTrue : context.whenFalse;\n delete context.condition;\n delete context.dependencies;\n delete context.functionName;\n }\n\n // only include the children of a clause if its condition is true\n else if (CLAUSE_DEFINITION_RE.test(nodeClass)) {\n if (context.condition) {\n checkCode(context.condition);\n const result = !!evaluateJavaScript(clauseLibrary, data, context.condition.contents, options) as unknown as boolean;\n if(!result) {\n delete context.nodes;\n stopHere = true;\n }\n }\n delete context.condition;\n delete context.functionName;\n }\n\n // add a 'hasSome' property to OptionalDefinition\n else if (OPTIONAL_DEFINITION_RE.test(nodeClass)) {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n if (variableValues && variableValues.length) {\n if(variableValues.length === 1) {\n context.hasSome = true;\n context.whenNone = [];\n }\n else {\n throw new Error(`Multiple values found for path '${path}' in data ${data}.`);\n }\n }\n else {\n context.hasSome = false;\n context.whenSome = [];\n }\n context.nodes = context.hasSome ? context.whenSome : context.whenNone;\n }\n }\n this.update(context, stopHere);\n });\n}\n\n/**\n * A template engine: merges the markup and logic of a template with\n * JSON data to produce JSON data.\n */\nexport class TemplateMarkInterpreter {\n modelManager: ModelManager;\n templateClass: ClassDeclaration;\n clauseLibrary: object;\n\n constructor(modelManager: ModelManager, clauseLibrary:object, templateConceptFqn?: string) {\n this.modelManager = modelManager;\n this.clauseLibrary = clauseLibrary;\n this.templateClass = getTemplateClassDeclaration(this.modelManager,templateConceptFqn);\n }\n\n /**\n * Checks that a TemplateMark JSON document is valid with respect to the\n * TemplateMark model, as well as the template model.\n *\n * Checks:\n * 1. Variable names are valid properties in the template model\n * 2. Optional properties have guards\n * @param {*} templateMark the TemplateMark JSON object\n * @returns {*} TemplateMark JSON that has been typed checked and has type metadata added\n * @throws {Error} if the templateMark document is invalid\n */\n checkTypes(templateMark: object): object {\n const modelManager = new ModelManager({ strict: true });\n modelManager.addCTOModel(ConcertoMetaModel.MODEL, 'concertometamodel.cto');\n modelManager.addCTOModel(CommonMarkModel.MODEL, 'commonmark.cto');\n modelManager.addCTOModel(TemplateMarkModel.MODEL, 'templatemark.cto');\n const factory = new Factory(modelManager);\n const serializer = new Serializer(factory, modelManager);\n try {\n serializer.fromJSON(templateMark);\n return templateMark;\n }\n catch(err) {\n throw new Error(`Generated invalid agreement: ${err}: ${JSON.stringify(templateMark, null, 2)}`);\n }\n }\n\n /**\n * Compiles the code nodes containing TS to code nodes containing JS.\n * @param {*} templateMark the TemplateMark JSON object\n * @returns {*} TemplateMark JSON with JS nodes\n * @throws {Error} if the templateMark document is invalid\n */\n async compileTypeScriptToJavaScript(templateMark: object) : Promise<object> {\n const templateConcept = (templateMark as any).nodes[0].elementType;\n if(!templateConcept) {\n throw new Error('TemplateMark is not typed');\n }\n const compiler = new TemplateMarkToJavaScriptCompiler(this.modelManager, templateConcept);\n await compiler.initialize();\n return compiler.compile(templateMark);\n }\n\n validateCiceroMark(ciceroMark: object) {\n const modelManager = new ModelManager({ strict: true });\n modelManager.addCTOModel(ConcertoMetaModel.MODEL, 'concertometamodel.cto');\n modelManager.addCTOModel(CommonMarkModel.MODEL, 'commonmark.cto');\n modelManager.addCTOModel(CiceroMarkModel.MODEL, 'ciceromark.cto');\n const factory = new Factory(modelManager);\n const serializer = new Serializer(factory, modelManager);\n try {\n return serializer.fromJSON(ciceroMark);\n }\n catch(err) {\n throw new Error(`Generated invalid agreement: ${err}: ${JSON.stringify(ciceroMark, null, 2)}`);\n }\n }\n\n async generate(templateMark: object, data: TemplateData, options?:GenerationOptions): Promise<any> {\n const factory = new Factory(this.modelManager);\n const serializer = new Serializer(factory, this.modelManager);\n const templateData = serializer.fromJSON(data);\n if (templateData.getFullyQualifiedType() !== this.templateClass.getFullyQualifiedName()) {\n throw new Error(`Template data must be of type '${this.templateClass.getFullyQualifiedName()}'.`);\n }\n const typedTemplateMark = this.checkTypes(templateMark);\n const jsTemplateMark = await this.compileTypeScriptToJavaScript(typedTemplateMark);\n const ciceroMark = generateAgreement(this.modelManager, this.clauseLibrary, jsTemplateMark, data, options);\n return this.validateCiceroMark(ciceroMark);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { INode } from '../model-gen/org.accordproject.commonmark@0.5.0';\nimport { CommonMarkModel,TemplateMarkModel,CiceroMarkModel } from '@accordproject/markdown-common';\nimport { FileWriter } from '@accordproject/concerto-util';\nimport { ClassDeclaration, ModelUtil } from '@accordproject/concerto-core';\nimport { ProcessingFunction } from '../TemplateMarkToTypeScriptCompiler';\n\nexport function writeDebug(fw:FileWriter, level:number, concept:any) {\n fw.writeLine(level, `// ${ModelUtil.getShortName(concept.$class)} ${concept.name ? `(${concept.name})` : ''}`);\n}\n\nexport const RUNTIME_DIR = 'runtime';\n\nexport function writeImports(fw:FileWriter, level:number, templateClass:ClassDeclaration) {\n fw.writeLine(level, `import * as CommonMark from './${CommonMarkModel.NAMESPACE}';`);\n fw.writeLine(level, `import * as CiceroMark from './${CiceroMarkModel.NAMESPACE}';`);\n fw.writeLine(level, `import * as TemplateModel from './${templateClass.getNamespace()}';`);\n fw.writeLine(level, 'import * as UserCode from \\'./usercode\\';');\n fw.writeLine(level, `import { getDrafter as $getDrafter } from './${RUNTIME_DIR}/drafting';`);\n fw.writeLine(level, `import * as Runtime from './${RUNTIME_DIR}/TypeScriptRuntime';`);\n}\nexport function writeProlog(fw:FileWriter, level:number, templateClass:ClassDeclaration) {\n fw.writeLine(level, `export function generator(data:TemplateModel.I${templateClass.getName()}, library:any, options:Runtime.GenerationOptions) : CommonMark.IDocument {`);\n fw.writeLine(level, `const docNode = {$class: '${CommonMarkModel.NAMESPACE}.Document', xmlns: '${CommonMarkModel.NAMESPACE}', nodes: []} as CommonMark.INode;`);\n fw.writeLine(level, 'const $nodes:CommonMark.INode[] = [];'); // the stack of output CiceroMark nodes\n fw.writeLine(level, 'const $data:any[] = [];'); // the stack of 'this' used for data access\n fw.writeLine(level, 'let $result:any = docNode;'); // document root, or the return value\n fw.writeLine(level, 'Runtime.push($data, data);'); // push the 'data' to the stack so we have an initial 'this';\n}\n\nexport function writeEpilog(fw:FileWriter, level:number) {\n fw.writeLine(level, 'return $result as CommonMark.IDocument;');\n fw.writeLine(level, '}');\n}\n\n// allows us to declare local variables without fear of collision\nexport function writeOpenGenerateScope(fw:FileWriter, level:number) {\n fw.writeLine(level, '$result = (() => {');\n}\n\n// closes the scope, calling the anon-function\n// and then pushes the result as a child of the last element of $nodes\nexport function writeCloseGenerateScope(fw:FileWriter, level:number) {\n fw.writeLine(level, '})();');\n fw.writeLine(level, 'Runtime.addChild($nodes, $result);');\n}\n\n// save $curNode into $stack, so we can pop it when the scope closes\nexport function writeOpenNodeScope(fw:FileWriter, level:number) {\n fw.writeLine(level, 'Runtime.push($nodes, $result);');\n}\n\n// closes the scope, popping the stack and setting $curNode\nexport function writeCloseNodeScope(fw:FileWriter, level:number) {\n fw.writeLine(level, '$result = Runtime.pop($nodes);');\n}\n\n// save $curNode into $stack, so we can pop it when the scope closes\nexport function writeOpenDataScope(fw:FileWriter, level:number, name:string, allowUndefined=false) {\n fw.writeLine(level, `Runtime.push($data, Runtime.peekProperty($data, '${name}', ${allowUndefined}));`);\n}\n\n// closes the scope, popping the stack and setting $curNode\nexport function writeCloseDataScope(fw:FileWriter, level:number) {\n fw.writeLine(level, 'Runtime.pop($data);');\n}\n\nexport function getTypeScriptType(ctoFqn: string): string {\n const ns = ModelUtil.getNamespace(ctoFqn);\n const type = ModelUtil.getShortName(ctoFqn);\n\n if (ns === CommonMarkModel.NAMESPACE) {\n return `CommonMark.I${type}`;\n }\n else if (ns === CiceroMarkModel.NAMESPACE) {\n return `CiceroMark.I${type}`;\n }\n else if (ns === TemplateMarkModel.NAMESPACE) {\n return `CiceroMark.I${type.substring(0, type.length - 'Definition'.length)}`;\n }\n else {\n throw new Error(`No type mapping for ${ctoFqn}`);\n }\n}\n\n/**\n * Map of a node from template mark to ciceromark\n * @param {INode} templateMarkNode the template mark.\n * @param {boolean} deep when deep is false (the default) child nodes are not copied\n * @returns {INode} the mapped node\n */\nexport function makeCiceroMark(templateMarkNode:INode, deep=false): INode {\n if(!templateMarkNode.$class) {\n throw new Error('Not a concerto type.');\n }\n const json = JSON.parse(JSON.stringify(templateMarkNode));\n delete json.elementType;\n if(!deep) {\n delete json.nodes;\n }\n else {\n if(json.nodes) {\n json.nodes = json.nodes.map((n:INode) => makeCiceroMark(n,deep));\n }\n }\n\n const ns = ModelUtil.getNamespace(json.$class);\n const type = ModelUtil.getShortName(json.$class);\n\n if (ns === TemplateMarkModel.NAMESPACE) {\n json.$class = `${CiceroMarkModel.NAMESPACE}.${type.substring(0, type.length - 'Definition'.length)}`;\n }\n\n return json;\n}\n\nexport interface INodeCompiler {\n enter(fw:FileWriter, level:number, templateMarkNode:INode) : void;\n generate(fw:FileWriter, level:number, templateMarkNode:INode, doIt:ProcessingFunction) : void;\n exit(fw:FileWriter, level:number, templateMarkNode:INode) : void;\n}\n\n/**\n * A node compiler that allows code to run on node enter, exit and\n * with a generate method to generate code for the node.\n */\nexport abstract class AbstractComplexCompiler implements INodeCompiler {\n\n leaf:boolean;\n\n constructor(leaf:boolean) {\n this.leaf = leaf;\n }\n\n isLeaf() : boolean {\n return this.leaf;\n }\n\n enter(fw:FileWriter, level:number,templateMarkNode:INode) {\n writeDebug(fw, level, templateMarkNode);\n writeOpenNodeScope(fw,level);\n }\n\n abstract generate(fw:FileWriter, level:number, templateMarkNode:INode, doIt:ProcessingFunction) : void;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n exit(fw:FileWriter, level:number) {\n writeCloseNodeScope(fw,level);\n }\n}\n\n/**\n * A node compiler that allows a JSON node to be constructed from\n * the data in a templatemark node.\n */\nexport abstract class AbstractSimpleCompiler extends AbstractComplexCompiler {\n\n constructor(leaf:boolean) {\n super(leaf);\n }\n\n abstract getNode(templateMarkNode:INode):INode;\n\n generate(fw:FileWriter, level:number, templateMarkNode:INode) {\n const node = this.getNode(templateMarkNode);\n if(this.isLeaf()) {\n node.nodes = []; // we are a leaf node, null out child nodes\n }\n writeOpenGenerateScope(fw,level);\n fw.writeLine(level, `return ${JSON.stringify(node)} as ${getTypeScriptType(node.$class)};`);\n writeCloseGenerateScope(fw,level);\n }\n}\n\n/**\n * PassThroughNode simply maps data from TemplateMark to\n * CiceroMark, updating namespaces but otherwise leaving\n * the data alone.\n */\nexport class PassThrough extends AbstractSimpleCompiler {\n constructor(leaf:boolean) {\n super(leaf);\n }\n getNode(templateMarkNode:INode):INode {\n return makeCiceroMark(templateMarkNode) as INode;\n }\n}\n\n/**\n * Ignore doesn't write any output for a node type\n */\nexport class Ignore implements INodeCompiler {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n enter(fw: FileWriter, level: number, templateMarkNode: INode): void {\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n generate(fw: FileWriter, level: number, templateMarkNode: INode): void {\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n exit(fw: FileWriter, level: number, templateMarkNode: INode): void {\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { FileWriter } from '@accordproject/concerto-util';\nimport { TemplateMarkModel,CommonMarkModel } from '@accordproject/markdown-common';\nimport { IClause } from '../model-gen/org.accordproject.ciceromark@0.6.0';\nimport { IParagraph } from '../model-gen/org.accordproject.commonmark@0.5.0';\nimport { IClauseDefinition, IWithDefinition } from '../model-gen/org.accordproject.templatemark@0.5.0';\nimport { AbstractComplexCompiler, getTypeScriptType, makeCiceroMark, writeCloseDataScope, writeCloseGenerateScope, writeCloseNodeScope, writeDebug, writeOpenDataScope, writeOpenGenerateScope, writeOpenNodeScope } from './Common';\n\ninterface INamedClauseDefinition extends IClauseDefinition {\n readonly functionName: string;\n}\n\nexport class Clause extends AbstractComplexCompiler {\n static TYPE = `${TemplateMarkModel.NAMESPACE}.ClauseDefinition`;\n constructor() {\n super(false);\n }\n\n enter(fw:FileWriter, level:number,templateMarkNode:IWithDefinition) {\n writeDebug(fw, level, templateMarkNode);\n writeOpenNodeScope(fw,level);\n writeOpenDataScope(fw,level,templateMarkNode.name);\n }\n\n generate(fw:FileWriter, level:number, templateMarkNode:INamedClauseDefinition) {\n const clone = makeCiceroMark(templateMarkNode) as IClause;\n delete (clone as any).condition;\n delete (clone as any).functionName;\n const para = {$class: `${CommonMarkModel.NAMESPACE}.Paragraph`} as IParagraph;\n writeOpenGenerateScope(fw, level);\n if(templateMarkNode.condition) {\n fw.writeLine(level, `const isTrue:boolean = UserCode.${templateMarkNode.functionName}(data,library,options)`);\n }\n else {\n fw.writeLine(level, 'const isTrue:boolean = true;');\n }\n fw.writeLine(level, 'if(isTrue) {');\n fw.writeLine(level, `return ${JSON.stringify(clone)} as ${getTypeScriptType(clone.$class)};`);\n fw.writeLine(level, '}');\n fw.writeLine(level, 'else {');\n fw.writeLine(level, `return ${JSON.stringify(para)} as ${getTypeScriptType(para.$class)};`);\n fw.writeLine(level, '}');\n writeCloseGenerateScope(fw, level);\n delete templateMarkNode.condition;\n }\n\n exit(fw:FileWriter, level:number) {\n writeCloseDataScope(fw,level);\n writeCloseNodeScope(fw,level);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { FileWriter } from '@accordproject/concerto-util';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\nimport { IConditional } from '../model-gen/org.accordproject.ciceromark@0.6.0';\nimport { IConditionalDefinition } from '../model-gen/org.accordproject.templatemark@0.5.0';\nimport { AbstractComplexCompiler, getTypeScriptType, makeCiceroMark, writeCloseDataScope, writeCloseGenerateScope, writeOpenDataScope, writeOpenGenerateScope } from './Common';\n\ninterface INamedConditionalDefinition extends IConditionalDefinition {\n readonly functionName: string;\n}\n\nexport class Conditional extends AbstractComplexCompiler {\n static TYPE = `${TemplateMarkModel.NAMESPACE}.ConditionalDefinition`;\n constructor() {\n super(false);\n }\n generate(fw:FileWriter, level:number, templateMarkNode:INamedConditionalDefinition) {\n const clone = makeCiceroMark(templateMarkNode, true) as IConditional;\n delete (clone as any).condition;\n delete (clone as any).dependencies;\n delete (clone as any).functionName;\n clone.isTrue = true;\n writeOpenGenerateScope(fw,level);\n if(templateMarkNode.condition) {\n fw.writeLine(level, `const isTrue:boolean = UserCode.${templateMarkNode.functionName}(data,library,options)`);\n }\n else {\n writeOpenDataScope(fw,level,templateMarkNode.name);\n fw.writeLine(level, 'const isTrue:boolean = Runtime.peek($data);');\n writeCloseDataScope(fw,level);\n }\n fw.writeLine(level, `const curNode = ${JSON.stringify(clone)} as ${getTypeScriptType(templateMarkNode.$class)};`);\n fw.writeLine(level, '(curNode as CiceroMark.IConditional).isTrue = isTrue;');\n fw.writeLine(level, 'return curNode;');\n writeCloseGenerateScope(fw,level);\n delete templateMarkNode.condition;\n delete (templateMarkNode as any).whenTrue;\n delete (templateMarkNode as any).whenFalse;\n\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { TemplateMarkModel,CiceroMarkModel } from '@accordproject/markdown-common';\nimport { IContract } from '../model-gen/org.accordproject.ciceromark@0.6.0';\nimport { IContractDefinition } from '../model-gen/org.accordproject.templatemark@0.5.0';\nimport { AbstractSimpleCompiler } from './Common';\n\nexport class ContractDefinition extends AbstractSimpleCompiler {\n static TYPE = `${TemplateMarkModel.NAMESPACE}.ContractDefinition`;\n constructor() {\n super(false);\n }\n getNode(templateMarkNode:IContractDefinition) {\n return {\n $class: `${CiceroMarkModel.NAMESPACE}.Contract`,\n name: templateMarkNode.name,\n nodes: []\n } as IContract;\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { FileWriter } from '@accordproject/concerto-util';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\nimport { IFormattedVariable } from '../model-gen/org.accordproject.ciceromark@0.6.0';\nimport { IFormattedVariableDefinition } from '../model-gen/org.accordproject.templatemark@0.5.0';\nimport { AbstractComplexCompiler, getTypeScriptType, makeCiceroMark, writeCloseDataScope, writeCloseGenerateScope, writeOpenDataScope, writeOpenGenerateScope } from './Common';\n\nexport class FormattedVariable extends AbstractComplexCompiler {\n static TYPE = `${TemplateMarkModel.NAMESPACE}.FormattedVariableDefinition`;\n constructor() {\n super(true);\n }\n generate(fw:FileWriter, level:number, templateMarkNode:IFormattedVariableDefinition) {\n const clone = makeCiceroMark(templateMarkNode) as IFormattedVariable;\n writeOpenGenerateScope(fw,level);\n if(templateMarkNode.name !== 'this') {\n writeOpenDataScope(fw,level,templateMarkNode.name);\n }\n fw.writeLine(level, `const drafter = $getDrafter('${templateMarkNode.elementType}');`);\n fw.writeLine(level, `const text = drafter ? drafter(Runtime.peek($data), '${templateMarkNode.format}') : JSON.stringify(Runtime.peek($data)) as string;`);\n if(templateMarkNode.name !== 'this') {\n writeCloseDataScope(fw,level);\n }\n fw.writeLine(level, `const variable:any = ${JSON.stringify(clone)};`);\n fw.writeLine(level, 'variable.value = text;');\n fw.writeLine(level, `return variable as ${getTypeScriptType(clone.$class)};`);\n writeCloseGenerateScope(fw,level);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { FileWriter } from '@accordproject/concerto-util';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\nimport { IFormula } from '../model-gen/org.accordproject.ciceromark@0.6.0';\nimport { IFormulaDefinition } from '../model-gen/org.accordproject.templatemark@0.5.0';\nimport { AbstractComplexCompiler, getTypeScriptType, makeCiceroMark, writeCloseGenerateScope, writeOpenGenerateScope } from './Common';\n\nexport class Formula extends AbstractComplexCompiler {\n static TYPE = `${TemplateMarkModel.NAMESPACE}.FormulaDefinition`;\n constructor() {\n super(true);\n }\n generate(fw:FileWriter, level:number, templateMarkNode:IFormulaDefinition) {\n const clone = makeCiceroMark(templateMarkNode) as IFormula;\n writeOpenGenerateScope(fw,level);\n fw.writeLine(level, `const formulaResult = UserCode.${templateMarkNode.name}(data,library,options);`);\n fw.writeLine(level, 'const text = JSON.stringify(formulaResult);');\n fw.writeLine(level, `const formula:any = ${JSON.stringify(clone)};`);\n fw.writeLine(level, 'formula.value = text;');\n fw.writeLine(level, `formula.code = ${JSON.stringify(templateMarkNode.code.contents)};`); // HACK - update model\n fw.writeLine(level, `return formula as ${getTypeScriptType(clone.$class)};`);\n writeCloseGenerateScope(fw,level);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { FileWriter } from '@accordproject/concerto-util';\nimport { TemplateMarkModel,CommonMarkModel } from '@accordproject/markdown-common';\nimport { IJoinDefinition } from '../model-gen/org.accordproject.templatemark@0.5.0';\nimport { AbstractComplexCompiler, getTypeScriptType, writeCloseDataScope, writeCloseGenerateScope, writeOpenDataScope, writeOpenGenerateScope } from './Common';\n\nexport class Join extends AbstractComplexCompiler {\n static TYPE = `${TemplateMarkModel.NAMESPACE}.JoinDefinition`;\n constructor() {\n super(true);\n }\n generate(fw:FileWriter, level:number, templateMarkNode:IJoinDefinition) {\n writeOpenGenerateScope(fw,level);\n writeOpenDataScope(fw,level,templateMarkNode.name);\n fw.writeLine(level, `const joinDef = ${JSON.stringify(templateMarkNode)};`);\n fw.writeLine(level, 'const text = Runtime.joinList(Runtime.peek($data), joinDef, options);');\n writeCloseDataScope(fw,level);\n fw.writeLine(level, `return { $class: '${CommonMarkModel.NAMESPACE}.Text', text: text } as ${getTypeScriptType(CommonMarkModel.NAMESPACE + '.Text')};`);\n writeCloseGenerateScope(fw,level);\n delete templateMarkNode.nodes; // ignore child nodes, like {{this}}\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { FileWriter } from '@accordproject/concerto-util';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\nimport { ProcessingFunction } from '../TemplateMarkToTypeScriptCompiler';\nimport { IList } from '../model-gen/org.accordproject.commonmark@0.5.0';\nimport { IListBlockDefinition, IWithDefinition } from '../model-gen/org.accordproject.templatemark@0.5.0';\nimport { AbstractComplexCompiler, getTypeScriptType, makeCiceroMark, writeCloseDataScope, writeCloseGenerateScope, writeCloseNodeScope, writeDebug, writeOpenDataScope, writeOpenGenerateScope, writeOpenNodeScope } from './Common';\n\nexport class ListBlock extends AbstractComplexCompiler {\n static TYPE = `${TemplateMarkModel.NAMESPACE}.ListBlockDefinition`;\n constructor() {\n super(false);\n }\n\n enter(fw:FileWriter, level:number,templateMarkNode:IWithDefinition) {\n writeDebug(fw, level, templateMarkNode);\n writeOpenNodeScope(fw,level);\n writeOpenDataScope(fw,level,templateMarkNode.name);\n }\n\n generate(fw:FileWriter, level:number, templateMarkNode:IListBlockDefinition, doIt:ProcessingFunction) {\n if(templateMarkNode?.nodes?.[0]) {\n const clone = makeCiceroMark(templateMarkNode?.nodes?.[0]) as IList;\n writeOpenGenerateScope(fw, level);\n fw.writeLine(level, `const result = ${JSON.stringify(clone)} as ${getTypeScriptType(templateMarkNode.$class)};`);\n fw.writeLine(level, 'Runtime.peek($data).forEach( (item:any) => {');\n fw.writeLine(level, 'Runtime.push($data,item);');\n if(templateMarkNode.nodes?.[0].nodes?.[0]) {\n doIt(fw, level+1, templateMarkNode.nodes[0].nodes[0]);\n delete templateMarkNode.nodes; // already handled children ^^^\n }\n fw.writeLine(level, 'Runtime.pop($data);');\n fw.writeLine(level, '});');\n fw.writeLine(level, 'return result;');\n writeCloseGenerateScope(fw, level);\n }\n }\n\n exit(fw:FileWriter, level:number) {\n writeCloseDataScope(fw,level);\n writeCloseNodeScope(fw,level);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { FileWriter } from '@accordproject/concerto-util';\nimport { CommonMarkModel,TemplateMarkModel } from '@accordproject/markdown-common';\n\nimport { ProcessingFunction } from '../TemplateMarkToTypeScriptCompiler';\nimport { IOptionalDefinition } from '../model-gen/org.accordproject.templatemark@0.5.0';\nimport { AbstractComplexCompiler, getTypeScriptType, makeCiceroMark, writeCloseDataScope, writeCloseGenerateScope, writeCloseNodeScope, writeDebug, writeOpenDataScope, writeOpenGenerateScope, writeOpenNodeScope } from './Common';\n\n\nexport class Optional extends AbstractComplexCompiler {\n static TYPE = `${TemplateMarkModel.NAMESPACE}.OptionalDefinition`;\n constructor() {\n super(false);\n }\n\n enter(fw:FileWriter, level:number,templateMarkNode:IOptionalDefinition) {\n writeDebug(fw, level, templateMarkNode);\n writeOpenNodeScope(fw,level);\n writeOpenDataScope(fw,level,templateMarkNode.name, true); // allow pushing undefined onto the stack\n }\n\n generate(fw:FileWriter, level:number, templateMarkNode:IOptionalDefinition, doIt:ProcessingFunction) {\n const clone = makeCiceroMark(templateMarkNode) as any;\n delete clone.nodes;\n delete clone.whenSome; // replaced below\n delete clone.whenNone;\n writeOpenGenerateScope(fw, level);\n fw.writeLine(level, `const result = ${JSON.stringify(clone)} as ${getTypeScriptType(templateMarkNode.$class)};`);\n fw.writeLine(level, 'const hasSome:boolean = !(Runtime.peek($data) === null || Runtime.peek($data) === undefined);');\n fw.writeLine(level, '(result as CiceroMark.IOptional).hasSome = hasSome;');\n fw.writeLine(level, 'if(hasSome) {');\n doIt(fw, level+1, {$class: `${CommonMarkModel.NAMESPACE}.Paragraph`, nodes: templateMarkNode.whenSome});\n fw.writeLine(level, '(result as CiceroMark.IOptional).whenSome = $result.nodes[0];');\n fw.writeLine(level, '(result as CiceroMark.IOptional).whenNone = $result.nodes[0];'); // HACK - model needs to be updated\n fw.writeLine(level, 'return result;');\n fw.writeLine(level, '}');\n fw.writeLine(level, 'else {');\n doIt(fw, level+1, {$class: `${CommonMarkModel.NAMESPACE}.Paragraph`, nodes: templateMarkNode.whenNone});\n fw.writeLine(level, '(result as CiceroMark.IOptional).whenNone = $result.nodes[0];');\n fw.writeLine(level, '(result as CiceroMark.IOptional).whenSome = $result.nodes[0];'); // HACK - model needs to be updated\n fw.writeLine(level, 'return result;');\n fw.writeLine(level, '}');\n writeCloseGenerateScope(fw, level);\n delete templateMarkNode.nodes;\n delete (templateMarkNode as any).whenSome; // already handled\n delete (templateMarkNode as any).whenNone;\n }\n\n exit(fw:FileWriter, level:number) {\n writeCloseDataScope(fw,level);\n writeCloseNodeScope(fw,level);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { FileWriter } from '@accordproject/concerto-util';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\nimport { IVariable } from '../model-gen/org.accordproject.ciceromark@0.6.0';\nimport { IVariableDefinition } from '../model-gen/org.accordproject.templatemark@0.5.0';\nimport { AbstractComplexCompiler, getTypeScriptType, makeCiceroMark, writeCloseDataScope, writeCloseGenerateScope, writeOpenDataScope, writeOpenGenerateScope } from './Common';\n\nexport class Variable extends AbstractComplexCompiler {\n static TYPE = `${TemplateMarkModel.NAMESPACE}.VariableDefinition`;\n constructor() {\n super(true);\n }\n generate(fw:FileWriter, level:number, templateMarkNode:IVariableDefinition) {\n const clone = makeCiceroMark(templateMarkNode) as IVariable;\n writeOpenGenerateScope(fw,level);\n if(templateMarkNode.name !== 'this') {\n writeOpenDataScope(fw,level,templateMarkNode.name);\n }\n fw.writeLine(level, 'const text = JSON.stringify(Runtime.peek($data)) as string;');\n if(templateMarkNode.name !== 'this') {\n writeCloseDataScope(fw,level);\n }\n fw.writeLine(level, `const variable:any = ${JSON.stringify(clone)};`);\n fw.writeLine(level, 'variable.value = text;');\n fw.writeLine(level, `return variable as ${getTypeScriptType(clone.$class)};`);\n writeCloseGenerateScope(fw,level);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { FileWriter } from '@accordproject/concerto-util';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\nimport { IWithDefinition } from '../model-gen/org.accordproject.templatemark@0.5.0';\nimport { AbstractComplexCompiler, writeCloseDataScope, writeDebug, writeOpenDataScope } from './Common';\n\nexport class With extends AbstractComplexCompiler {\n static TYPE = `${TemplateMarkModel.NAMESPACE}.WithDefinition`;\n constructor() {\n super(false);\n }\n\n enter(fw:FileWriter, level:number,templateMarkNode:IWithDefinition) {\n writeDebug(fw, level, templateMarkNode);\n writeOpenDataScope(fw,level,templateMarkNode.name);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\n generate(fw:FileWriter, level:number, templateMarkNode:IWithDefinition) {\n }\n\n exit(fw:FileWriter, level:number) {\n writeCloseDataScope(fw,level);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { FileWriter } from '@accordproject/concerto-util';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\nimport { IEnumVariable } from '../model-gen/org.accordproject.ciceromark@0.6.0';\nimport { IEnumVariableDefinition } from '../model-gen/org.accordproject.templatemark@0.5.0';\nimport { AbstractComplexCompiler, getTypeScriptType, makeCiceroMark, writeCloseDataScope, writeCloseGenerateScope, writeOpenDataScope, writeOpenGenerateScope } from './Common';\n\nexport class EnumVariable extends AbstractComplexCompiler {\n static TYPE = `${TemplateMarkModel.NAMESPACE}.EnumVariableDefinition`;\n constructor() {\n super(true);\n }\n generate(fw:FileWriter, level:number, templateMarkNode:IEnumVariableDefinition) {\n const clone = makeCiceroMark(templateMarkNode) as IEnumVariable;\n writeOpenGenerateScope(fw,level);\n if(templateMarkNode.name !== 'this') {\n writeOpenDataScope(fw,level,templateMarkNode.name);\n }\n fw.writeLine(level, 'const text = JSON.stringify(Runtime.peek($data)) as string;');\n if(templateMarkNode.name !== 'this') {\n writeCloseDataScope(fw,level);\n }\n fw.writeLine(level, `const variable:any = ${JSON.stringify(clone)};`);\n fw.writeLine(level, 'variable.value = text;');\n fw.writeLine(level, `return variable as ${getTypeScriptType(clone.$class)};`);\n writeCloseGenerateScope(fw,level);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CommonMarkModel,TemplateMarkModel } from '@accordproject/markdown-common';\n\nimport { Clause } from './Clause';\nimport { Ignore, INodeCompiler, PassThrough } from './Common';\nimport { Conditional } from './Conditional';\nimport { ContractDefinition } from './ContractDefinition';\nimport { FormattedVariable } from './FormattedVariable';\nimport { Formula } from './Formula';\nimport { Join } from './Join';\nimport { ListBlock } from './ListBlock';\nimport { Optional } from './Optional';\nimport { Variable } from './Variable';\nimport { With } from './With';\nimport { EnumVariable } from './EnumVariable';\n\n/**\n * Registry of node compilers\n */\nconst NODE_COMPILERS:Record<string,INodeCompiler> = {\n};\n\n// templatemark\nNODE_COMPILERS[ContractDefinition.TYPE] = new ContractDefinition();\nNODE_COMPILERS[Variable.TYPE] = new Variable();\nNODE_COMPILERS[EnumVariable.TYPE] = new EnumVariable();\nNODE_COMPILERS[FormattedVariable.TYPE] = new FormattedVariable();\nNODE_COMPILERS[Formula.TYPE] = new Formula();\nNODE_COMPILERS[Conditional.TYPE] = new Conditional();\nNODE_COMPILERS[Join.TYPE] = new Join();\nNODE_COMPILERS[With.TYPE] = new With();\nNODE_COMPILERS[Clause.TYPE] = new Clause();\nNODE_COMPILERS[Optional.TYPE] = new Optional();\nNODE_COMPILERS[ListBlock.TYPE] = new ListBlock();\n\n// ignored\nNODE_COMPILERS[`${TemplateMarkModel.NAMESPACE}.Code`] = new Ignore();\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.Document`] = new Ignore();\n\n// commonmark\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.Paragraph`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.Text`] = new PassThrough(true);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.Attribute`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.TagInfo`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.CodeBlock`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.Code`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.HtmlInline`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.HtmlBlock`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.Emph`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.Strong`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.BlockQuote`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.Heading`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.ThematicBreak`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.Softbreak`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.Linebreak`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.Link`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.Image`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.List`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.Item`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.Table`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.TableHead`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.TableBody`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.TableRow`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.TableRow`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.HeaderCell`] = new PassThrough(false);\nNODE_COMPILERS[`${CommonMarkModel.NAMESPACE}.TableCell`] = new PassThrough(false);\n\n/**\n * Lookup a node compiler\n * @param {string} fqn the Concerto FQN of the node $class\n * @returns {INodeCompiler} the compiler to use for this node\n */\nexport function getCompiler(fqn:string) : INodeCompiler {\n const compiler = NODE_COMPILERS[fqn];\n if(!compiler) {\n throw new Error(`No compiler found for node ${fqn}`);\n }\n return compiler;\n}","\n/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable quotes */\n// file generated by ./scripts/updateRuntimeDependencies.js\n\n\nexport const RUNTIME_TGZ_BASE64 = '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';\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport traverse from 'traverse';\nimport { writeFileSync } from 'fs';\nimport * as tar from 'tar';\nimport { Readable } from 'stream';\n\nimport { TemplateMarkModel, CiceroMarkModel, CommonMarkModel, ConcertoMetaModel } from '@accordproject/markdown-common';\n\nimport { ClassDeclaration, Factory, ModelManager, ModelUtil, Property, Resource } from '@accordproject/concerto-core';\nimport { CodeGen } from '@accordproject/concerto-codegen';\nimport { FileWriter } from '@accordproject/concerto-util';\nimport { getCompiler } from './compilers/NodeCompilers';\nimport { RUNTIME_DIR, writeEpilog, writeImports, writeProlog } from './compilers/Common';\nimport { getTemplateClassDeclaration } from './Common';\nimport { RUNTIME_TGZ_BASE64 } from './runtime/runtime';\nimport { ensureDirSync, nameUserCode, writeFunctionToString } from './utils';\n\nexport type ProcessingFunction = (fw: FileWriter, level: number, resource: any) => void;\n\nexport type CompilationOptions = {\n skipGenerator?: boolean;\n skipCopyRuntime?: boolean;\n}\n\n/**\n * Converts TemplateMark DOM to a Typescript function, that, when run with JSON data\n * that conforms to the template model will produce AgreementMark JSON output.\n */\nexport class TemplateMarkToTypeScriptCompiler {\n modelManager: ModelManager;\n templateClass: ClassDeclaration;\n\n constructor(modelManager: ModelManager,templateConceptFqn?: string) {\n this.modelManager = modelManager;\n this.templateClass = getTemplateClassDeclaration(this.modelManager,templateConceptFqn);\n }\n\n writeFunction(fw: FileWriter, functionName: string, returnType: string, code: string) {\n fw.writeLine(0, writeFunctionToString(this.templateClass, functionName, returnType, code));\n }\n\n /**\n * Get a model manager with templatemark model\n * @param {string} outputDir the output directory\n * @returns {ModelManager} the model manager\n */\n getTemplateMarkModelManager(): ModelManager {\n const modelManager = new ModelManager({ strict: true });\n modelManager.addCTOModel(ConcertoMetaModel.MODEL, 'concertometamodel.cto');\n modelManager.addCTOModel(CommonMarkModel.MODEL, 'commonmark.cto');\n modelManager.addCTOModel(TemplateMarkModel.MODEL, 'templatemark.cto');\n return modelManager;\n }\n\n /**\n * Get a model manager with templatemark model\n * @param {string} outputDir the output directory\n * @returns {ModelManager} the model manager\n */\n getCiceroMarkModelManager(): ModelManager {\n const modelManager = new ModelManager({ strict: true });\n modelManager.addCTOModel(ConcertoMetaModel.MODEL, 'concertometamodel.cto');\n modelManager.addCTOModel(CommonMarkModel.MODEL, 'commonmark.cto');\n modelManager.addCTOModel(CiceroMarkModel.MODEL, 'ciceromark.cto');\n return modelManager;\n }\n\n generateTypeScript(modelManager: ModelManager, outputDir: string) {\n // generate the TS code for the template model\n const tsVisitor = new CodeGen.TypescriptVisitor();\n const parameters = {\n fileWriter: new FileWriter(outputDir)\n };\n modelManager.accept(tsVisitor, parameters);\n }\n\n generateSampleData(modelManager: ModelManager, outputDir: string) {\n const factory = new Factory(modelManager);\n const instance = factory.newResource(this.templateClass.getNamespace(),\n this.templateClass.getName(), this.templateClass.isIdentified() ? 'sample' : undefined,\n {generate: 'sample', includeOptionalFields: true});\n writeFileSync(`${outputDir}/sample.json`,JSON.stringify(instance, null, 2));\n }\n\n /**\n * The main iteration function over templatemark. This function\n * looks up an INodeCompiler that can handle each templatemark node\n * and delegates to it for code generation.\n * Note that the result of code generation (a CiceroMark node) is left in\n * the $result global varianble.\n * @param {FileWriter} fw the file writer to use\n * @param {number} level the indentation level\n * @param {object} templateMark the templatemark node to iterate over\n */\n static doIt(fw: FileWriter, level: number, templateMark: any) {\n fw.writeLine(level, `// start processing ${ModelUtil.getShortName(templateMark.$class)}`);\n traverse(templateMark).forEach(function (context: any) {\n if (typeof context === 'object' && context.$class && typeof context.$class === 'string') {\n const nodeClass = context.$class as string;\n\n const compiler = getCompiler(nodeClass);\n const sourceLevel = level + 1;\n\n this.before(() => {\n compiler.enter(fw, sourceLevel, context);\n compiler.generate(fw, sourceLevel, context, TemplateMarkToTypeScriptCompiler.doIt);\n });\n\n this.after(() => {\n compiler.exit(fw, sourceLevel, context);\n });\n }\n });\n fw.writeLine(level, `// end processing ${ModelUtil.getShortName(templateMark.$class)}`);\n }\n /**\n * Converts a TemplateMark document to typescript code that is parameterised\n * by the 'data' argument.\n *\n * The strategy is to traverse the template mark json, converting each node into\n * typescript statements that add an equivalent ciceromark node. Variables will\n * pull values from 'data'.\n *\n * Conditionals and formulae will call the functions produced by\n * compileUserCode.\n *\n * Note that code generation process is itself recursive, for example, when\n * a list definition node is encountered the list must be iterated over\n * based on a variable value coming from data, and code must be\n * generated to produce each list item.\n *\n * All internal variables are prefixed with '$' to ensure (?)\n * that they cannot collide with end user variable names.\n *\n * @param {IDocument} templateMark the TemplateMark Concerto resource\n * @param {string} outputDir the output directory for code\n */\n compileGenerator(templateMark: any, outputDir: string): void {\n const fw = new FileWriter(outputDir);\n\n fw.openFile('index.ts');\n fw.writeLine(0, '// generated code');\n fw.writeLine(0, 'import { readFileSync } from \\'fs\\';');\n fw.writeLine(0, 'import { generator } from \\'./generator\\';');\n fw.writeLine(0, 'if(process.argv.length === 3) {');\n fw.writeLine(1, 'const result = generator( JSON.parse(readFileSync(process.argv[2], \\'utf-8\\')), {}, {});');\n fw.writeLine(1, 'console.log(JSON.stringify(result, null, 2));');\n fw.writeLine(0, '}');\n fw.writeLine(0, 'else {');\n fw.writeLine(1, 'console.log(\\'First argument is path to JSON data file\\');');\n fw.writeLine(0, '}');\n fw.closeFile();\n\n fw.openFile('generator.ts');\n fw.writeLine(0, '// generated code, do not modify');\n fw.writeLine(0, '');\n\n fw.writeLine(0, '// IMPORTS');\n writeImports(fw, 0, this.templateClass);\n fw.writeLine(0, '');\n\n fw.writeLine(0, '// GENERATOR');\n writeProlog(fw, 0, this.templateClass);\n\n TemplateMarkToTypeScriptCompiler.doIt(fw, 1, templateMark);\n\n writeEpilog(fw, 0);\n fw.closeFile();\n }\n\n /**\n * Decompresses the base64 zipped runtime into an output folder.\n * @param {string} outputDir the output directory to copy the runtime to\n */\n copyRuntime(outputDir: string) {\n ensureDirSync(`${outputDir}/${RUNTIME_DIR}`);\n const runtimeBuffer = Buffer.from(RUNTIME_TGZ_BASE64, 'base64');\n const s = new Readable();\n s.push(runtimeBuffer);\n s.push(null);\n s.pipe(\n tar.x({\n strip: 2,\n C: `${outputDir}/${RUNTIME_DIR}`\n })\n );\n }\n\n /**\n * Create package.json for the generated code\n * @param {string} outputDir the output directory to copy the runtime to\n */\n createPackage(outputDir: string) {\n const packageJson = {\n 'name': 'generated',\n 'version': '1.0.0',\n 'description': 'TypeScript code generated from TemplateMark',\n 'engines': {\n 'node': '>=14',\n 'npm': '>=6'\n },\n 'keywords': [\n 'accord project',\n 'template',\n 'templatemark'\n ],\n 'dependencies': {\n 'dayjs': '1.11.7',\n 'jsonpath': '^1.1.1',\n },\n 'devDependencies': {\n '@types/node': '^20.2.0',\n 'ts-node': '^10.9.1',\n 'typescript': '^5.0.2',\n '@types/jsonpath': '^0.2.0'\n },\n 'scripts' : {\n 'start' : 'ts-node index.ts sample.json'\n }\n };\n\n writeFileSync(`${outputDir}/package.json`,JSON.stringify(packageJson, null, 2));\n }\n\n compile(templateMark: Resource | any, outputDir: string, options?: CompilationOptions) {\n // create output dir\n ensureDirSync(outputDir);\n\n // generate sample data\n this.generateSampleData(this.modelManager, outputDir);\n\n // generate the models\n this.generateTypeScript(this.modelManager, outputDir);\n this.generateTypeScript(this.getTemplateMarkModelManager(), outputDir);\n this.generateTypeScript(this.getCiceroMarkModelManager(), outputDir);\n\n // generate names for all the nodes containing user code\n const namedTemplateMark = nameUserCode(templateMark.toJSON ? templateMark.toJSON() : templateMark);\n\n // compile the user code\n this.compileUserCode(namedTemplateMark, outputDir);\n\n // copy the runtime\n if (!options?.skipCopyRuntime) {\n this.copyRuntime(outputDir);\n }\n\n // compile the generator\n if (!options?.skipGenerator) {\n this.createPackage(outputDir);\n this.compileGenerator(namedTemplateMark, outputDir);\n }\n }\n\n compileUserCode(templateMark: any, outputDir: string) {\n const fw = new FileWriter(outputDir);\n\n fw.openFile('usercode.ts');\n fw.writeLine(0, '// generated code, do not modify');\n fw.writeLine(0, '');\n\n fw.writeLine(0, '// IMPORTS');\n fw.writeLine(0, `import * as TemplateModel from './${this.templateClass.getNamespace()}';`);\n fw.writeLine(0, 'import dayjs from \\'dayjs\\';');\n fw.writeLine(0, 'import jp from \\'jsonpath\\';');\n fw.writeLine(0, 'import {GenerationOptions} from \\'./runtime/TypeScriptRuntime\\';');\n\n fw.writeLine(0, '');\n\n const templateMarkDom = templateMark;\n\n const functionNodes: [] = traverse(templateMarkDom).reduce(function (acc, x) {\n if (x && x.$class === `${TemplateMarkModel.NAMESPACE}.FormulaDefinition`) {\n acc.push({\n name: x.name,\n code: x.code,\n });\n }\n return acc;\n }, []);\n\n const conditionalNodes: [] = traverse(templateMarkDom).reduce(function (acc, x) {\n if (x && x.$class === `${TemplateMarkModel.NAMESPACE}.ConditionalDefinition` && x.condition) {\n acc.push({\n name: x.functionName,\n code: x.condition,\n });\n }\n return acc;\n }, []);\n\n const clauseNodes: [] = traverse(templateMarkDom).reduce(function (acc, x) {\n if (x && x.$class === `${TemplateMarkModel.NAMESPACE}.ClauseDefinition` && x.condition) {\n acc.push({\n name: x.functionName,\n code: x.condition,\n });\n }\n return acc;\n }, []);\n\n fw.writeLine(0, '// FORMULAE');\n functionNodes.forEach((fun: any) => {\n this.writeFunction(fw, `${fun.name}`, 'any', fun.code.contents);\n });\n fw.writeLine(0, '');\n\n fw.writeLine(0, '// CONDITIONALS');\n conditionalNodes.forEach((fun: any) => {\n this.writeFunction(fw, `${fun.name}`, 'boolean', fun.code.contents);\n });\n fw.writeLine(0, '');\n\n fw.writeLine(0, '// CLAUSES');\n clauseNodes.forEach((fun: any) => {\n this.writeFunction(fw, `${fun.name}`, 'boolean', fun.code.contents);\n });\n fw.writeLine(0, '');\n\n fw.closeFile();\n }\n}"],"names":["draftLongFormat","draftLong","CurrencyCode","TemplateMarkModel","Introspector","templatemarkutil","CodeGen","InMemoryWriter","createDefaultMapFromNodeModules","createDefaultMapFromCDN","lzstring","twoslasher","CodeType","existsSync","mkdirSync","checkCode","CiceroMarkModel","CommonMarkModel","ModelUtil","ModelManager","ConcertoMetaModel","Factory","Serializer","FileWriter","writeFileSync","Readable","tar"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,SAAwB,eAAe,KAAwB,EAAA;AAC3D,EAAA,IAAI,KAAO,EAAA;AACP,IAAO,OAAA,MAAA,CAAA;AAAA,GACJ,MAAA;AACH,IAAO,OAAA,OAAA,CAAA;AAAA,GACX;AACJ;;ACTA,KAAA,CAAM,OAAO,GAAG,CAAA,CAAA;AAQQ,SAAA,eAAA,CAAgB,OAAa,MAAwB,EAAA;AACzE,EAAM,MAAA,CAAA,GAAI,SAAS,MAAS,GAAA,YAAA,CAAA;AAC5B,EAAA,OAAO,KAAM,CAAA,GAAA,CAAI,KAAK,CAAA,CAAE,OAAO,CAAC,CAAA,CAAA;AACpC;;ACRO,SAAS,gBAAgB,KAAuB,EAAA;AACnD,EAAA,IAAI,IAAK,CAAA,KAAA,CAAM,KAAK,CAAA,KAAM,KAAO,EAAA;AAC7B,IAAA,OAAQ,IAAI,MAAA,CAAO,KAAK,CAAA,CAAG,QAAQ,CAAC,CAAA,CAAA;AAAA,GACjC,MAAA;AACH,IAAA,OAAO,EAAK,GAAA,KAAA,CAAA;AAAA,GAChB;AACJ,CAAA;AAQgB,SAAA,iBAAA,CAAkB,OAAa,MAAwB,EAAA;AACnE,EAAO,OAAA,MAAA,CAAO,QAAQ,mBAAqB,EAAA,SAAS,IAAG,IAAK,EAAA,EAAA,EAAG,MAAK,MAAO,EAAA;AACvE,IAAM,MAAA,GAAA,GAAM,MAAS,GAAA,MAAA,CAAO,MAAS,GAAA,CAAA,CAAA;AACrC,IAAM,MAAA,EAAA,GAAK,KAAM,CAAA,OAAA,CAAQ,GAAG,CAAA,CAAA;AAC5B,IAAA,IAAI,GAAM,GAAA,EAAA,CAAA;AACV,IAAA,IAAI,IAAM,EAAA;AACN,MAAA,MAAM,CAAI,GAAA,EAAA,CAAG,SAAU,CAAA,EAAA,CAAG,SAAS,GAAG,CAAA,CAAA;AACtC,MAAA,GAAA,IAAO,IAAO,GAAA,CAAA,CAAA;AAAA,KAClB;AACA,IAAI,IAAA,CAAA,GAAI,EAAG,CAAA,SAAA,CAAU,CAAE,EAAA,EAAA,CAAG,UAAU,GAAQ,KAAA,CAAA,GAAI,CAAI,GAAA,GAAA,GAAI,CAAE,CAAA,CAAA,CAAA;AAC1D,IAAO,OAAA,CAAA,CAAE,SAAS,CAAG,EAAA;AACjB,MAAA,GAAA,GAAM,OAAO,CAAE,CAAA,SAAA,CAAU,CAAE,CAAA,MAAA,GAAS,CAAC,CAAI,GAAA,GAAA,CAAA;AACzC,MAAA,CAAA,GAAI,CAAE,CAAA,SAAA,CAAU,CAAG,EAAA,CAAA,CAAE,SAAS,CAAC,CAAA,CAAA;AAAA,KACnC;AACA,IAAA,OAAO,CAAI,GAAA,GAAA,CAAA;AAAA,GACd,CAAA,CAAA;AACL;;AC1BwB,SAAA,aAAA,CAAc,OAAa,MAAwB,EAAA;AACvE,EAAA,IAAI,MAAQ,EAAA;AACR,IAAO,OAAA,iBAAA,CAAkB,OAAM,MAAM,CAAA,CAAA;AAAA,GAClC,MAAA;AACH,IAAA,OAAO,gBAAgB,KAAK,CAAA,CAAA;AAAA,GAChC;AACJ;;ACVO,SAAS,aAAa,KAAuB,EAAA;AAChD,EAAA,OAAO,EAAK,GAAA,KAAA,CAAA;AAChB,CAAA;AAQgB,SAAA,kBAAA,CAAmB,OAAa,MAAwB,EAAA;AACpE,EAAA,OAAO,MAAO,CAAA,OAAA,CAAQ,SAAW,EAAA,SAAS,IAAG,IAAK,EAAA;AAC9C,IAAM,MAAA,EAAA,GAAK,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AAC1B,IAAA,IAAI,GAAM,GAAA,EAAA,CAAA;AACV,IAAA,IAAI,CAAI,GAAA,EAAA,CAAG,SAAU,CAAA,CAAA,EAAE,GAAG,MAAM,CAAA,CAAA;AAChC,IAAO,OAAA,CAAA,CAAE,SAAS,CAAG,EAAA;AACjB,MAAA,GAAA,GAAM,OAAO,CAAE,CAAA,SAAA,CAAU,CAAE,CAAA,MAAA,GAAS,CAAC,CAAI,GAAA,GAAA,CAAA;AACzC,MAAA,CAAA,GAAI,CAAE,CAAA,SAAA,CAAU,CAAG,EAAA,CAAA,CAAE,SAAS,CAAC,CAAA,CAAA;AAAA,KACnC;AACA,IAAA,OAAO,CAAI,GAAA,GAAA,CAAA;AAAA,GACd,CAAA,CAAA;AACL;;ACfwB,SAAA,cAAA,CAAe,OAAa,MAAwB,EAAA;AACxE,EAAA,IAAI,MAAQ,EAAA;AACR,IAAO,OAAA,kBAAA,CAAmB,OAAM,MAAM,CAAA,CAAA;AAAA,GACnC,MAAA;AACH,IAAA,OAAO,aAAa,KAAK,CAAA,CAAA;AAAA,GAC7B;AACJ;;ACRwB,SAAA,WAAA,CAAY,OAAa,MAAwB,EAAA;AACrE,EAAA,IAAI,MAAQ,EAAA;AACR,IAAO,OAAAA,kBAAA,CAAgB,OAAM,MAAM,CAAA,CAAA;AAAA,GAChC,MAAA;AACH,IAAA,OAAOC,aAAU,KAAK,CAAA,CAAA;AAAA,GAC1B;AACJ;;ACfY,IAAA,YAAA,qBAAAC,aAAL,KAAA;AACH,EAAAA,cAAA,KAAQ,CAAA,GAAA,GAAA,CAAA;AACR,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,MAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,MAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,IAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,IAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,KAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,KAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,KAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,IAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,MAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,GAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,IAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,KAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,SAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,IAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,IAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,SAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,MAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,eAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,MAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,IAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,GAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,eAAA,CAAA;AAjCC,EAAAA,OAAAA,aAAAA,CAAAA;AAAA,CAAA,EAAA,YAAA,IAAA,EAAA,CAAA;;ACcZ,SAAS,6BAA6B,KAAsB,EAAA;AACxD,EAAA,OAAO,KAAK,eAAgB,CAAA,KAAA,CAAM,WAAW,CAAA,GAAI,MAAM,KAAM,CAAA,YAAA,CAAA;AACjE,CAAA;AAOA,SAAS,WAAW,CAAmB,EAAA;AACnC,EAAA,MAAM,QAAgB,MAAO,CAAA,IAAA,CAAK,YAAY,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAA;AACzD,EAAA,IAAG,SAAQ,CAAG,EAAA;AACV,IAAA,OAAO,MAAO,CAAA,MAAA,CAAO,YAAY,CAAA,CAAE,KAAK,CAAA,CAAA;AAAA,GAEvC,MAAA;AACD,IAAO,OAAA,CAAA,CAAA;AAAA,GACX;AACJ,CAAA;AAQA,SAAS,2BAAA,CAA4B,OAAqB,MAAwB,EAAA;AAC9E,EAAO,OAAA,iBAAA;AAAA,IAAkB,KAAM,CAAA,WAAA;AAAA,IAC3B,MAAA,CACK,OAAQ,CAAA,KAAA,EAAM,UAAW,CAAA,KAAA,CAAM,YAAY,CAAC,CAC5C,CAAA,OAAA,CAAQ,OAAQ,EAAA,KAAA,CAAM,YAAY,CAAA;AAAA,GAAC,CAAA;AAChD,CAAA;AAQwB,SAAA,qBAAA,CAAsB,OAAqB,MAAwB,EAAA;AACvF,EAAA,IAAI,MAAQ,EAAA;AACR,IAAO,OAAA,2BAAA,CAA4B,OAAM,MAAM,CAAA,CAAA;AAAA,GAC5C,MAAA;AACH,IAAA,OAAO,6BAA6B,KAAK,CAAA,CAAA;AAAA,GAC7C;AACJ;;ACrDA,SAAwB,cAAc,KAAuB,EAAA;AACzD,EAAO,OAAA,KAAA,CAAA;AACX;;ACCO,SAAS,WAAW,QAAiE,EAAA;AACxF,EAAA,QAAO,QAAU;AAAA,IACjB,KAAK,SAAA;AAAW,MAAO,OAAA,cAAA,CAAA;AAAA,IACvB,KAAK,UAAA;AAAY,MAAO,OAAA,eAAA,CAAA;AAAA,IACxB,KAAK,QAAA;AAAU,MAAO,OAAA,aAAA,CAAA;AAAA,IACtB,KAAK,SAAA;AAAW,MAAO,OAAA,cAAA,CAAA;AAAA,IACvB,KAAK,MAAA;AAAQ,MAAO,OAAA,WAAA,CAAA;AAAA,IACpB,KAAK,8CAAA;AAAgD,MAAO,OAAA,qBAAA,CAAA;AAAA,IAC5D,KAAK,QAAA;AAAU,MAAO,OAAA,aAAA,CAAA;AAAA,IACtB;AAAS,MAAO,OAAA,IAAA,CAAA;AAAA,GAChB;AACJ;;ACdO,MAAM,eAAkB,GAAA,4DAAA,CAAA;AACxB,MAAM,qBAAwB,GAAA,8DAAA,CAAA;AAC9B,MAAM,sBAAyB,GAAA,+DAAA,CAAA;AAC/B,MAAM,yBAA4B,GAAA,kEAAA,CAAA;AAClC,MAAM,2BAA8B,GAAA,mEAAA,CAAA;AACpC,MAAM,gCAAmC,GAAA,wEAAA,CAAA;AACzC,MAAM,kBAAqB,GAAA,2DAAA,CAAA;AAC3B,MAAM,uBAA0B,GAAA,gEAAA,CAAA;AAChC,MAAM,kBAAqB,GAAA,2DAAA,CAAA;AAC3B,MAAM,sBAAyB,GAAA,+DAAA,CAAA;AAC/B,MAAM,oBAAuB,GAAA,6DAAA,CAAA;AAC7B,MAAM,sBAAyB,GAAA,+DAAA,CAAA;AAQ/B,MAAM,gBAAmB,GAAA;AAAA,EAC5B,CAAA,EAAGC,iCAAkB,SAAS,CAAA,oBAAA,CAAA;AAAA,EAC9B,CAAA,EAAGA,iCAAkB,SAAS,CAAA,eAAA,CAAA;AAAA,EAC9B,CAAA,EAAGA,iCAAkB,SAAS,CAAA,eAAA,CAAA;AAAA,EAC9B,CAAA,EAAGA,iCAAkB,SAAS,CAAA,mBAAA,CAAA;AAAA,EAC9B,CAAA,EAAGA,iCAAkB,SAAS,CAAA,iBAAA,CAAA;AAClC,CAAA,CAAA;AAEgB,SAAA,2BAAA,CAA4B,cAA4B,kBAAgD,EAAA;AACpH,EAAM,MAAA,YAAA,GAAe,IAAIC,yBAAA,CAAa,YAAY,CAAA,CAAA;AAClD,EAAI,IAAA;AACA,IAAA,OAAOC,iCAAiB,CAAA,mBAAA,CAAoB,YAAc,EAAA,QAAA,EAAU,kBAAkB,CAAA,CAAA;AAAA,WAEpF,GAAK,EAAA;AACP,IAAA,OAAA,CAAQ,IAAI,GAAG,CAAA,CAAA;AACf,IAAM,MAAA,GAAA,CAAA;AAAA,GACV;AACJ;;AC9BO,MAAM,4BAA6B,CAAA;AAAA,EAEtC,YAAA,CAAA;AAAA,EACA,aAAA,CAAA;AAAA,EAEA,WAAA,CAAY,cAA0B,kBAA6B,EAAA;AAC/D,IAAA,IAAA,CAAK,YAAe,GAAA,YAAA,CAAA;AACpB,IAAA,IAAA,CAAK,aAAgB,GAAA,2BAAA,CAA4B,IAAK,CAAA,YAAA,EAAc,kBAAkB,CAAA,CAAA;AAAA,GAC1F;AAAA,EAEA,kBAA6C,GAAA;AACzC,IAAA,MAAM,SAA+B,EAAC,CAAA;AAEtC,IAAM,MAAA,OAAA,GAAU,IAAIC,uBAAA,CAAQ,iBAAkB,EAAA,CAAA;AAC9C,IAAM,MAAA,MAAA,GAAS,IAAIC,2BAAe,EAAA,CAAA;AAElC,IAAA,MAAM,MAAS,GAAA;AAAA,MACX,UAAY,EAAA,MAAA;AAAA,KAChB,CAAA;AACA,IAAK,IAAA,CAAA,YAAA,CAAa,MAAO,CAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AACxC,IAAA,MAAA,CAAO,gBAAiB,EAAA,CAAE,OAAS,CAAA,CAAC,OAAO,GAAQ,KAAA;AAC/C,MAAA,MAAA,CAAO,GAAG,CAAI,GAAA,KAAA,CAAA;AAAA,KACjB,CAAA,CAAA;AACD,IAAO,OAAA,MAAA,CAAA;AAAA,GACX;AAAA,EAEA,qBAAiC,GAAA;AAC7B,IAAM,MAAA,KAAA,GAAQ,KAAK,kBAAmB,EAAA,CAAA;AAEtC,IAAA,IAAI,MAAS,GAAA,EAAA,CAAA;AAEb,IAAA,MAAA,CAAO,IAAK,CAAA,KAAK,CAAE,CAAA,OAAA,CAAS,CAAO,GAAA,KAAA;AAC/B,MAAM,MAAA,OAAA,GAAU,MAAM,GAAG,CAAA,CAAA;AACzB,MAAU,MAAA,IAAA,CAAA;AAAA,cAAA,EACN,GAAG,CAAA;AAAA,EACjB,OAAO,CAAA;AAAA,CAAA,CAAA;AAAA,KAEA,CAAA,CAAA;AAED,IAAU,MAAA,IAAA,CAAA;AAAA;AAAA,kCAEkB,EAAA,IAAA,CAAK,aAAc,CAAA,YAAA,EAAc,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAAA;AAS7D,IAAO,OAAA,MAAA,CAAA;AAAA,GACX;AACJ;;AC1DO,MAAM,YAAe,GAAA,sikBAAA,CAAA;AACrB,MAAM,eAAkB,GAAA,04HAAA;;ACcxB,MAAM,8BAA+B,CAAA;AAAA,EACxC,OAAA,CAAA;AAAA,EACA,KAAA,CAAA;AAAA,EACA,EAAA,CAAA;AAAA,EAEA,WAAA,CAAY,cAA4B,kBAA6B,EAAA;AACjE,IAAA,IAAA,CAAK,UAAU,IAAI,4BAAA,CAA6B,YAAc,EAAA,kBAAkB,EAAE,qBAAsB,EAAA,CAAA;AAAA,GAC5G;AAAA,EAEA,MAAM,UAAa,GAAA;AACf,IAAG,IAAA,OAAO,WAAW,WAAa,EAAA;AAC9B,MAAK,IAAA,CAAA,EAAA,GAAK,MAAM,OAAQ,YAAY,CAAA,CAAA;AACpC,MAAA,IAAA,CAAK,QAAQC,mCAAgC,CAAA;AAAA,QACzC,MAAA,EAAQ,IAAK,CAAA,EAAA,CAAG,YAAa,CAAA,MAAA;AAAA,OAChC,CAAA,CAAA;AAAA,KAEA,MAAA;AACD,MAAA,IAAA,CAAK,EAAM,GAAA,CAAA,MAAM,OAAO,oDAAoD,CAAG,EAAA,OAAA,CAAA;AAC/E,MAAG,IAAA,CAAC,KAAK,EAAI,EAAA;AACT,QAAM,MAAA,IAAI,MAAM,uCAAuC,CAAA,CAAA;AAAA,OAC3D;AACA,MAAA,IAAA,CAAK,KAAQ,GAAA,MAAMC,2BAAwB,CAAA,EAAE,QAAQ,IAAK,CAAA,EAAA,CAAG,YAAa,CAAA,MAAA,IAAU,IAAK,CAAA,EAAA,CAAG,OAAS,EAAA,KAAA,EAAO,KAAK,EAAE,CAAA,CAAA;AAAA,KACvH;AACA,IAAK,IAAA,CAAA,KAAA,CAAM,IAAI,uCAAyC,EAAA,MAAA,CAAO,KAAK,YAAc,EAAA,QAAQ,CAAE,CAAA,QAAA,EAAU,CAAA,CAAA;AACtG,IAAK,IAAA,CAAA,KAAA,CAAM,IAAI,0CAA4C,EAAA,MAAA,CAAO,KAAK,eAAiB,EAAA,QAAQ,CAAE,CAAA,QAAA,EAAU,CAAA,CAAA;AAAA,GAChH;AAAA,EAEA,QAAQ,UAAoC,EAAA;AACxC,IAAG,IAAA,CAAC,KAAK,KAAO,EAAA;AACZ,MAAM,MAAA,IAAI,MAAM,sDAAsD,CAAA,CAAA;AAAA,KAC1E;AACA,IAAA,MAAM,YAAc,GAAA,CAAA;AAAA,EAC1B,KAAK,OAAO,CAAA;AAAA,EACZ,UAAU,CAAA;AAAA,CAAA,CAAA;AAGJ,IAAA,MAAM,OAA2B,GAAA;AAAA,MAC7B,OAAO,IAAK,CAAA,KAAA;AAAA,MACZ,UAAU,IAAK,CAAA,EAAA;AAAA,MACf,cAAe,EAAAC,mBAAA;AAAA,MACf,cAAgB,EAAA;AAAA,QACZ,QAAU,EAAA,IAAA;AAAA,QACV,iBAAmB,EAAA,IAAA;AAAA,QACnB,eAAiB,EAAA,SAAA;AAAA,OACrB;AAAA,KACJ,CAAA;AACA,IAAA,MAAM,MAAS,GAAAC,mBAAA,CAAW,YAAc,EAAA,IAAA,EAAM,OAAO,CAAA,CAAA;AACrD,IAAO,OAAA,MAAA,CAAA;AAAA,GACX;AACJ;;ACpEY,IAAA,QAAA,qBAAAC,SAAL,KAAA;AACJ,EAAAA,UAAA,YAAa,CAAA,GAAA,YAAA,CAAA;AACb,EAAAA,UAAA,SAAU,CAAA,GAAA,SAAA,CAAA;AAFD,EAAAA,OAAAA,SAAAA,CAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA,CAAA;;ACGL,SAAS,cAAc,IAAa,EAAA;AACvC,EAAC,CAAAC,aAAA,CAAW,IAAI,CAAK,IAAAC,YAAA,CAAU,MAAM,EAAE,SAAA,EAAW,MAAM,CAAA,CAAA;AAC5D,CAAA;AAMO,SAAS,qBAAsB,CAAA,aAAA,EAAgC,YAAsB,EAAA,UAAA,EAAoB,IAAsB,EAAA;AAClI,EAAA,IAAI,MAAS,GAAA,EAAA,CAAA;AACb,EAAU,MAAA,IAAA,iBAAA,CAAA;AACV,EAAA,MAAA,IAAU,mBAAmB,YAAY,CAAA,qBAAA,EAAwB,cAAc,OAAQ,EAAC,+CAA+C,UAAU,CAAA;AAAA,CAAA,CAAA;AACjJ,EAAU,MAAA,IAAA,uCAAA,CAAA;AACV,EAAU,MAAA,IAAA,sCAAA,CAAA;AACV,EAAA,aAAA,CAAc,aAAc,EAAA,CAAE,OAAQ,CAAA,CAAC,CAAgB,KAAA;AACnD,IAAA,MAAA,IAAU,YAAY,CAAE,CAAA,OAAA,EAAS,CAAW,QAAA,EAAA,CAAA,CAAE,SAAS,CAAA;AAAA,CAAA,CAAA;AAAA,GAC1D,CAAA,CAAA;AACD,EAAU,MAAA,IAAA,KAAA,GAAQ,IAAK,CAAA,IAAA,EAAS,GAAA,IAAA,CAAA;AAChC,EAAU,MAAA,IAAA,KAAA,CAAA;AACV,EAAU,MAAA,IAAA,IAAA,CAAA;AAEV,EAAO,OAAA,MAAA,CAAA;AACX,CAAA;AAEO,SAAS,aAAa,eAAsB,EAAA;AAC/C,EAAA,OAAO,QAAS,CAAA,eAAe,CAAE,CAAA,GAAA,CAAI,SAAU,CAAG,EAAA;AAC9C,IAAA,IAAI,CAAO,KAAA,CAAA,CAAE,MAAW,KAAA,CAAA,EAAGX,iCAAkB,SAAS,CAAA,sBAAA,CAAA,IAA4B,CAAE,CAAA,SAAA,IAC/E,CAAG,EAAAA,gCAAA,CAAkB,SAAS,CAAA,iBAAA,CAAA,IAAuB,EAAE,SAAa,CAAA,EAAA;AACrE,MAAA,CAAA,CAAE,eAAe,CAAa,UAAA,EAAA,IAAA,CAAK,IAAK,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA,KACrD;AACA,IAAA,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,GAChB,CAAA,CAAA;AACL;;AC3BA,MAAM,UAAa,GAAA;AAAA,EACf,CAAA,EAAGA,iCAAkB,SAAS,CAAA,kBAAA,CAAA;AAAA,EAC9B,CAAA,EAAGA,iCAAkB,SAAS,CAAA,sBAAA,CAAA;AAAA,EAC9B,CAAA,EAAGA,iCAAkB,SAAS,CAAA,iBAAA,CAAA;AAClC,CAAA,CAAA;AAQA,SAASY,YAAU,IAAY,EAAA;AAC3B,EAAG,IAAA,IAAA,CAAK,IAAS,KAAA,QAAA,CAAS,UAAY,EAAA;AAClC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAkB,eAAA,EAAA,IAAA,CAAK,QAAQ,CAA2B,yBAAA,CAAA,CAAA,CAAA;AAAA,GAC9E;AACJ,CAAA;AAMO,MAAM,gCAAiC,CAAA;AAAA,EAC1C,YAAA,CAAA;AAAA,EACA,QAAA,CAAA;AAAA,EACA,aAAA,CAAA;AAAA,EAEA,WAAA,CAAY,cAA4B,kBAA6B,EAAA;AACjE,IAAA,IAAA,CAAK,YAAe,GAAA,YAAA,CAAA;AACpB,IAAA,IAAA,CAAK,QAAW,GAAA,IAAI,8BAA+B,CAAA,YAAA,EAAa,kBAAkB,CAAA,CAAA;AAClF,IAAK,IAAA,CAAA,aAAA,GAAgB,2BAA4B,CAAA,YAAA,EAAa,kBAAkB,CAAA,CAAA;AAAA,GACpF;AAAA,EAEA,MAAM,UAAa,GAAA;AACf,IAAM,MAAA,IAAA,CAAK,SAAS,UAAW,EAAA,CAAA;AAAA,GACnC;AAAA,EAEA,QAAQ,YAAyB,EAAA;AAC7B,IAAM,MAAA,iBAAA,GAAoB,aAAa,YAAY,CAAA,CAAA;AAEnD,IAAA,MAAM,IAAO,GAAA,IAAA,CAAA;AACb,IAAA,MAAM,SAAS,KAAqB,EAAA,CAAA;AACpC,IAAA,MAAM,WAAW,QAAS,CAAA,iBAAiB,CAAE,CAAA,GAAA,CAAI,SAAU,CAAG,EAAA;AAC1D,MAAA,IAAI,CAAK,IAAA,UAAA,CAAW,QAAS,CAAA,CAAA,CAAE,MAAM,CAAG,EAAA;AACpC,QAAA,IAAI,EAAE,IAAM,EAAA;AACR,UAAAA,WAAA,CAAU,EAAE,IAAI,CAAA,CAAA;AAChB,UAAA,MAAM,MAAS,GAAA,IAAA,CAAK,QAAS,CAAA,OAAA,CAAQ,qBAAsB,CAAA,IAAA,CAAK,aAAe,EAAA,CAAA,CAAE,IAAM,EAAA,KAAA,EAAO,CAAE,CAAA,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAA;AAC9G,UAAG,IAAA,MAAA,CAAO,MAAO,CAAA,MAAA,KAAW,CAAG,EAAA;AAC3B,YAAE,CAAA,CAAA,IAAA,CAAK,WAAW,MAAO,CAAA,IAAA,CAAA;AACzB,YAAE,CAAA,CAAA,IAAA,CAAK,OAAO,QAAS,CAAA,OAAA,CAAA;AACvB,YAAA,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,WAEZ,MAAA;AACD,YAAA,MAAA,CAAO,IAAK,CAAA;AAAA,cACR,QAAQ,CAAE,CAAA,IAAA;AAAA,cACV,IAAA,EAAM,EAAE,IAAK,CAAA,QAAA;AAAA,cACb,QAAQ,MAAO,CAAA,MAAA;AAAA,aAClB,CAAA,CAAA;AAAA,WACL;AAAA,SACJ,MAAA,IACS,EAAE,SAAW,EAAA;AAClB,UAAAA,WAAA,CAAU,EAAE,SAAS,CAAA,CAAA;AACrB,UAAA,MAAM,MAAS,GAAA,IAAA,CAAK,QAAS,CAAA,OAAA,CAAQ,qBAAsB,CAAA,IAAA,CAAK,aAAe,EAAA,CAAA,CAAE,YAAc,EAAA,SAAA,EAAW,CAAE,CAAA,SAAA,CAAU,QAAQ,CAAC,CAAA,CAAA;AAC/H,UAAG,IAAA,MAAA,CAAO,MAAO,CAAA,MAAA,KAAW,CAAG,EAAA;AAC3B,YAAE,CAAA,CAAA,SAAA,CAAU,WAAW,MAAO,CAAA,IAAA,CAAA;AAC9B,YAAE,CAAA,CAAA,SAAA,CAAU,OAAO,QAAS,CAAA,OAAA,CAAA;AAC5B,YAAA,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,WAEZ,MAAA;AACD,YAAA,MAAA,CAAO,IAAK,CAAA;AAAA,cACR,QAAQ,CAAE,CAAA,YAAA;AAAA,cACV,IAAA,EAAM,EAAE,SAAU,CAAA,QAAA;AAAA,cAClB,QAAQ,MAAO,CAAA,MAAA;AAAA,aAClB,CAAA,CAAA;AAAA,WACL;AAAA,SACJ;AAAA,OACJ;AAAA,KACH,CAAA,CAAA;AAED,IAAG,IAAA,MAAA,CAAO,WAAW,CAAG,EAAA;AACpB,MAAO,OAAA,QAAA,CAAA;AAAA,KAEN,MAAA;AACD,MAAM,MAAA,MAAA,CAAA;AAAA,KACV;AAAA,GACJ;AACJ;;AClFgB,SAAA,QAAA,CAAS,IAAoB,EAAA,OAAA,EAAa,OAAqC,EAAA;AAC3F,EAAA,IAAG,QAAQ,SAAW,EAAA;AAClB,IAAO,OAAA,IAAA,CAAK,IAAK,CAAA,OAAA,CAAQ,SAAS,CAAA,CAAA;AAAA,GAEjC,MAAA;AACD,IAAM,MAAA,SAAA,GAAY,IAAI,IAAK,CAAA,UAAA;AAAA,MAAY,OAAQ,CAAA,MAAA,GAAS,OAAQ,CAAA,MAAA,GAAS,OAAS,EAAA,MAAA;AAAA,MAC9E;AAAA,QACI,OAAQ,OAAQ,CAAA,KAAA;AAAA,QAChB,MAAO,OAAQ,CAAA,IAAA;AAAA,OACnB;AAAA,KACJ,CAAA;AACA,IAAO,OAAA,SAAA,CAAU,OAAO,IAAI,CAAA,CAAA;AAAA,GAChC;AACJ;;ACIA,SAAS,UAAU,IAAY,EAAA;AAC3B,EAAG,IAAA,IAAA,CAAK,IAAS,KAAA,QAAA,CAAS,OAAS,EAAA;AAC/B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAc,WAAA,EAAA,IAAA,CAAK,QAAQ,CAAmC,iCAAA,CAAA,CAAA,CAAA;AAAA,GAClF;AACJ,CAAA;AAUA,SAAS,kBAAmB,CAAA,aAAA,EAAsB,IAAoB,EAAA,EAAA,EAAY,OAAqC,EAAA;AACnH,EAAI,IAAA,CAAC,IAAQ,IAAA,CAAC,EAAI,EAAA;AACd,IAAA,MAAM,IAAI,KAAM,CAAA,CAAA,mBAAA,EAAsB,EAAE,CAAA,SAAA,EAAY,IAAI,CAAE,CAAA,CAAA,CAAA;AAAA,GAC9D;AACA,EAAM,MAAA,gBAAA,GAAmB,IAAI,KAAc,EAAA,CAAA;AAC3C,EAAA,gBAAA,CAAiB,KAAK,MAAM,CAAA,CAAA;AAC5B,EAAA,gBAAA,CAAiB,KAAK,SAAS,CAAA,CAAA;AAC/B,EAAA,gBAAA,CAAiB,KAAK,SAAS,CAAA,CAAA;AAC/B,EAAA,gBAAA,CAAiB,KAAK,OAAO,CAAA,CAAA;AAC7B,EAAA,gBAAA,CAAiB,KAAK,IAAI,CAAA,CAAA;AAG1B,EAAM,MAAA,iBAAA,GAAoB,IAAI,KAAW,EAAA,CAAA;AACzC,EAAA,iBAAA,CAAkB,KAAK,IAAI,CAAA,CAAA;AAC3B,EAAA,iBAAA,CAAkB,KAAK,aAAa,CAAA,CAAA;AACpC,EAAA,iBAAA,CAAkB,KAAK,OAAO,CAAA,CAAA;AAC9B,EAAA,iBAAA,CAAkB,KAAK,KAAK,CAAA,CAAA;AAC5B,EAAA,iBAAA,CAAkB,KAAK,EAAE,CAAA,CAAA;AAGzB,EAAM,MAAA,UAAA,GAAa,EAAG,CAAA,SAAA,CAAU,EAAG,CAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,CAAG,EAAA,EAAA,CAAG,WAAY,CAAA,GAAG,CAAC,CAAA,CAAA;AACxE,EAAA,IAAG,UAAW,CAAA,IAAA,EAAO,CAAA,MAAA,KAAW,CAAG,EAAA;AAC/B,IAAM,MAAA,IAAI,MAAM,kBAAkB,CAAA,CAAA;AAAA,GACtC;AACA,EAAI,IAAA;AACA,IAAA,MAAM,GAAM,GAAA,IAAI,QAAS,CAAA,GAAG,kBAAkB,UAAU,CAAA,CAAA;AACxD,IAAM,MAAA,MAAA,GAAS,GAAI,CAAA,GAAG,iBAAiB,CAAA,CAAA;AACvC,IAAO,OAAA,MAAA,CAAA;AAAA,WAEL,GAAK,EAAA;AACP,IAAM,MAAA,IAAI,MAAM,CAAgB,aAAA,EAAA,GAAG,eAAe,UAAU,CAAA,gBAAA,EAAmB,iBAAiB,CAAE,CAAA,CAAA,CAAA;AAAA,GACtG;AACJ,CAAA;AAaA,SAAS,WAAA,CAAY,QAAc,EAAA,WAAA,EAAiB,KAAyB,EAAA;AACzE,EAAA,IAAG,CAAC,WAAa,EAAA;AACb,IAAM,MAAA,IAAI,MAAM,uBAAuB,CAAA,CAAA;AAAA,GAC3C;AACA,EAAG,IAAA,CAAC,YAAY,IAAM,EAAA;AAClB,IAAA,MAAM,IAAI,KAAM,CAAA,CAAA,uBAAA,EAA0B,KAAK,SAAU,CAAA,WAAW,CAAC,CAAE,CAAA,CAAA,CAAA;AAAA,GAC3E;AACA,EAAA,IAAG,WAAY,CAAA,IAAA,CAAK,OAAQ,CAAA,GAAG,KAAI,CAAG,EAAA;AAElC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAyB,sBAAA,EAAA,WAAA,CAAY,IAAI,CAAE,CAAA,CAAA,CAAA;AAAA,GAC/D;AACA,EAAA,IAAG,CAAC,KAAS,IAAA,CAAC,MAAM,MAAU,IAAA,KAAA,CAAM,SAAQ,CAAI,EAAA;AAC5C,IAAM,MAAA,IAAI,MAAM,wBAAwB,CAAA,CAAA;AAAA,GAC5C;AACA,EAAA,MAAM,WAAW,EAAC,CAAA;AAClB,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AACnC,IAAA,MAAM,GAAM,GAAA,KAAA,CAAM,KAAM,CAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAC5B,IAAA,MAAM,GAAM,GAAA,QAAA,CAAS,GAAI,CAAA,QAAA,EAAU,GAAG,CAAA,CAAA;AAKtC,IAAI,IAAA,GAAA,IAAO,IAAI,MAAQ,EAAA;AACnB,MAAA,IAAG,gBAAiB,CAAA,OAAA,CAAQ,GAAI,CAAA,MAAM,KAAK,CAAG,EAAA;AAC1C,QAAA,QAAA,CAAS,IAAK,CAAA,CAAA,EAAA,EAAK,GAAI,CAAA,IAAI,CAAI,EAAA,CAAA,CAAA,CAAA;AAAA,OACnC;AAAA,KACJ;AAAA,GACJ;AAEA,EAAG,IAAA,WAAA,CAAY,SAAS,MAAQ,EAAA;AAC5B,IAAA,QAAA,CAAS,IAAK,CAAA,CAAA,EAAA,EAAK,WAAY,CAAA,IAAI,CAAI,EAAA,CAAA,CAAA,CAAA;AAAA,GAC3C;AAEA,EAAO,OAAA,QAAA,CAAS,SAAS,CAAI,GAAA,CAAA,CAAA,EAAI,SAAS,IAAK,CAAA,EAAE,CAAC,CAAK,CAAA,GAAA,GAAA,CAAA;AAC3D,CAAA;AAWA,SAAS,iBAAkB,CAAA,YAAA,EAA2B,aAAsB,EAAA,YAAA,EAAsB,MAAoB,OAAiC,EAAA;AACnJ,EAAM,MAAA,YAAA,GAAe,IAAIX,yBAAA,CAAa,YAAY,CAAA,CAAA;AAClD,EAAA,OAAO,QAAS,CAAA,YAAY,CAAE,CAAA,GAAA,CAAI,SAAU,OAAc,EAAA;AACtD,IAAA,IAAI,QAAW,GAAA,KAAA,CAAA;AACf,IAAI,IAAA,OAAO,YAAY,QAAY,IAAA,OAAA,CAAQ,UAAU,OAAO,OAAA,CAAQ,WAAW,QAAU,EAAA;AACrF,MAAA,MAAM,YAAY,OAAQ,CAAA,MAAA,CAAA;AAG1B,MAAM,MAAA,KAAA,GAAQ,SAAU,CAAA,KAAA,CAAM,eAAe,CAAA,CAAA;AAC7C,MAAI,IAAA,KAAA,IAAS,KAAM,CAAA,MAAA,GAAS,CAAG,EAAA;AAC3B,QAAA,OAAA,CAAQ,SAAS,CAAG,EAAAY,8BAAA,CAAgB,SAAS,CAAI,CAAA,EAAA,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,OAC7D;AAGA,MAAI,IAAA,sBAAA,CAAuB,IAAK,CAAA,SAAS,CAAG,EAAA;AACxC,QAAQ,OAAA,CAAA,MAAA,GAAS,CAAG,EAAAC,8BAAA,CAAgB,SAAS,CAAA,UAAA,CAAA,CAAA;AAC7C,QAAA,OAAO,OAAQ,CAAA,IAAA,CAAA;AACf,QAAA,OAAO,OAAQ,CAAA,WAAA,CAAA;AAAA,OACnB;AAKA,MAAI,IAAA,kBAAA,CAAmB,IAAK,CAAA,SAAS,CAAG,EAAA;AACpC,QAAQ,OAAA,CAAA,MAAA,GAAS,CAAG,EAAAA,8BAAA,CAAgB,SAAS,CAAA,UAAA,CAAA,CAAA;AAC7C,QAAA,OAAO,OAAQ,CAAA,IAAA,CAAA;AACf,QAAA,OAAO,OAAQ,CAAA,WAAA,CAAA;AAAA,OAKV,MAAA,IAAA,qBAAA,CAAsB,IAAK,CAAA,SAAS,CAAG,EAAA;AAC5C,QAAA,IAAI,QAAQ,IAAM,EAAA;AACd,UAAA,SAAA,CAAU,QAAQ,IAAI,CAAA,CAAA;AACtB,UAAA,MAAM,SAAS,kBAAmB,CAAA,aAAA,EAAe,MAAM,OAAQ,CAAA,IAAA,CAAK,UAAU,OAAO,CAAA,CAAA;AACrF,UAAA,IAAG,WAAW,IAAM,EAAA;AAChB,YAAA,OAAA,CAAQ,KAAQ,GAAA,QAAA,CAAA;AAAA,WACpB,MAAA,IACQ,OAAO,MAAA,KAAW,QAAU,EAAA;AAChC,YAAA,OAAA,CAAQ,KAAQ,GAAA,MAAA,CAAA;AAAA,WAEf,MAAA;AACD,YAAQ,OAAA,CAAA,KAAA,GAAQ,IAAK,CAAA,SAAA,CAAU,MAAM,CAAA,CAAA;AAAA,WACzC;AACA,UAAA,OAAO,OAAQ,CAAA,IAAA,CAAA;AAAA,SAEd,MAAA;AACD,UAAM,MAAA,IAAI,MAAM,+BAA+B,CAAA,CAAA;AAAA,SACnD;AAAA,OAIK,MAAA,IAAA,uBAAA,CAAwB,IAAK,CAAA,SAAS,CAAG,EAAA;AAC9C,QAAA,MAAM,IAAO,GAAA,WAAA,CAAY,YAAc,EAAA,OAAA,EAAS,KAAK,IAAI,CAAA,CAAA;AACzD,QAAA,MAAM,cAAiB,GAAA,EAAA,CAAG,KAAM,CAAA,IAAA,EAAM,MAAM,CAAC,CAAA,CAAA;AAE7C,QAAI,IAAA,cAAA,CAAe,WAAW,CAAG,EAAA;AAC7B,UAAA,MAAM,IAAI,KAAM,CAAA,CAAA,0BAAA,EAA6B,IAAI,CAAA,UAAA,EAAa,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,SAEpE,MAAA;AACD,UAAM,MAAA,SAAA,GAAY,eAAe,CAAC,CAAA,CAAA;AAClC,UAAA,IAAG,CAAC,KAAA,CAAM,OAAQ,CAAA,SAAS,CAAG,EAAA;AAC1B,YAAM,MAAA,IAAI,MAAM,CAA0B,uBAAA,EAAA,IAAI,aAAa,IAAI,CAAA,kBAAA,EAAqB,SAAS,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,WAE/F,MAAA;AACD,YAAQ,OAAA,CAAA,MAAA,GAAS,CAAG,EAAAA,8BAAA,CAAgB,SAAS,CAAA,KAAA,CAAA,CAAA;AAC7C,YAAA,OAAO,OAAQ,CAAA,WAAA,CAAA;AACf,YAAA,OAAO,OAAQ,CAAA,IAAA,CAAA;AACf,YAAQ,OAAA,CAAA,KAAA,GAAQ,SAAU,CAAA,GAAA,CAAK,CAAa,SAAA,KAAA;AAExC,cAAM,MAAA,SAAA,GAAY,iBAAkB,CAAA,YAAA,EAAc,aAAe,EAAA,OAAA,CAAQ,KAAM,CAAA,CAAC,CAAE,CAAA,KAAA,CAAM,CAAC,CAAA,EAAG,SAAS,CAAA,CAAA;AACrG,cAAO,OAAA;AAAA,gBACH,MAAA,EAAQ,CAAG,EAAAA,8BAAA,CAAgB,SAAS,CAAA,KAAA,CAAA;AAAA,gBACpC,KAAO,EAAA,SAAA,CAAU,KAAQ,GAAA,SAAA,CAAU,QAAQ,EAAC;AAAA,eAChD,CAAA;AAAA,aACH,CAAA,CAAA;AACD,YAAW,QAAA,GAAA,IAAA,CAAA;AAAA,WACf;AAAA,SACJ;AAAA,OAIK,MAAA,IAAA,kBAAA,CAAmB,IAAK,CAAA,SAAS,CAAG,EAAA;AACzC,QAAA,MAAM,IAAO,GAAA,WAAA,CAAY,YAAc,EAAA,OAAA,EAAS,KAAK,IAAI,CAAA,CAAA;AACzD,QAAA,MAAM,cAAiB,GAAA,EAAA,CAAG,KAAM,CAAA,IAAA,EAAM,MAAM,CAAC,CAAA,CAAA;AAE7C,QAAI,IAAA,cAAA,CAAe,WAAW,CAAG,EAAA;AAC7B,UAAA,MAAM,IAAI,KAAM,CAAA,CAAA,0BAAA,EAA6B,IAAI,CAAA,UAAA,EAAa,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,SAEpE,MAAA;AACD,UAAM,MAAA,SAAA,GAAY,eAAe,CAAC,CAAA,CAAA;AAClC,UAAA,IAAG,CAAC,KAAA,CAAM,OAAQ,CAAA,SAAS,CAAG,EAAA;AAC1B,YAAM,MAAA,IAAI,MAAM,CAA0B,uBAAA,EAAA,IAAI,aAAa,IAAI,CAAA,kBAAA,EAAqB,SAAS,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,WAE/F,MAAA;AACD,YAAQ,OAAA,CAAA,MAAA,GAAS,CAAG,EAAAA,8BAAA,CAAgB,SAAS,CAAA,KAAA,CAAA,CAAA;AAC7C,YAAM,MAAA,OAAA,GAAU,UAAW,CAAA,OAAA,CAAQ,WAAW,CAAA,CAAA;AAC9C,YAAA,OAAA,CAAQ,IAAO,GAAA,QAAA,CAAS,SAAU,CAAA,GAAA,CAAK,CAAa,SAAA,KAAA;AAChD,cAAA,OAAO,OAAU,GAAA,OAAA,CAAQ,SAAW,EAAA,OAAA,CAAQ,MAAM,CAAI,GAAA,SAAA,CAAA;AAAA,aACzD,CAAG,EAAA,OAAA,EAAS,OAAO,CAAA,CAAA;AACpB,YAAA,OAAO,OAAQ,CAAA,WAAA,CAAA;AACf,YAAA,OAAO,OAAQ,CAAA,IAAA,CAAA;AACf,YAAA,OAAO,OAAQ,CAAA,SAAA,CAAA;AACf,YAAA,OAAO,OAAQ,CAAA,MAAA,CAAA;AACf,YAAA,OAAO,OAAQ,CAAA,IAAA,CAAA;AACf,YAAA,OAAO,OAAQ,CAAA,KAAA,CAAA;AACf,YAAA,OAAO,OAAQ,CAAA,KAAA,CAAA;AACf,YAAW,QAAA,GAAA,IAAA,CAAA;AAAA,WACf;AAAA,SACJ;AAAA,OAKK,MAAA,IAAA,sBAAA,CAAuB,IAAK,CAAA,SAAS,CAC1C,IAAA,2BAAA,CAA4B,IAAK,CAAA,SAAS,CAC1C,IAAA,gCAAA,CAAiC,IAAK,CAAA,SAAS,CAAG,EAAA;AAClD,QAAG,IAAA,OAAO,SAAS,QAAU,EAAA;AACzB,UAAA,MAAM,IAAO,GAAA,WAAA,CAAY,YAAc,EAAA,OAAA,EAAS,KAAK,IAAI,CAAA,CAAA;AACzD,UAAA,MAAM,cAAiB,GAAA,EAAA,CAAG,KAAM,CAAA,IAAA,EAAM,MAAM,CAAC,CAAA,CAAA;AAC7C,UAAI,IAAA,cAAA,CAAe,WAAW,CAAG,EAAA;AAC7B,YAAA,MAAM,IAAI,KAAM,CAAA,CAAA,0BAAA,EAA6B,IAAI,CAAA,UAAA,EAAa,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,WAEpE,MAAA;AAED,YAAM,MAAA,aAAA,GAAgB,eAAe,CAAC,CAAA,CAAA;AACtC,YAAM,MAAA,IAAA,GAAQC,sBAAkB,CAAA,eAAA,CAAgB,OAAQ,CAAA,WAAW,IAAI,IAAO,GAAA,YAAA,CAAa,mBAAoB,CAAA,OAAA,CAAQ,WAAW,CAAA,CAAA;AAElI,YAAM,MAAA,OAAA,GAAU,WAAW,IAAQ,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA,GAAW,QAAQ,WAAW,CAAA,CAAA;AACjF,YAAQ,OAAA,CAAA,KAAA,GAAQ,UAAU,OAAQ,CAAA,aAAA,EAAe,QAAQ,MAAM,CAAA,GAAI,IAAK,CAAA,SAAA,CAAU,aAAa,CAAA,CAAA;AAAA,WACnG;AAAA,SAEC,MAAA;AAED,UAAA,MAAM,aAAgB,GAAA,IAAA,CAAA;AACtB,UAAM,MAAA,IAAA,GAAQA,sBAAkB,CAAA,eAAA,CAAgB,OAAQ,CAAA,WAAW,IAAI,IAAO,GAAA,YAAA,CAAa,mBAAoB,CAAA,OAAA,CAAQ,WAAW,CAAA,CAAA;AAElI,UAAM,MAAA,OAAA,GAAU,WAAW,IAAQ,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA,GAAW,QAAQ,WAAW,CAAA,CAAA;AACjF,UAAQ,OAAA,CAAA,KAAA,GAAQ,UAAU,OAAQ,CAAA,aAAA,EAAe,QAAQ,MAAM,CAAA,GAAI,IAAK,CAAA,SAAA,CAAU,aAAa,CAAA,CAAA;AAAA,SACnG;AAAA,OAKK,MAAA,IAAA,yBAAA,CAA0B,IAAK,CAAA,SAAS,CAAG,EAAA;AAChD,QAAA,IAAI,QAAQ,SAAW,EAAA;AACnB,UAAA,SAAA,CAAU,QAAQ,SAAS,CAAA,CAAA;AAC3B,UAAQ,OAAA,CAAA,MAAA,GAAS,CAAC,CAAC,kBAAA,CAAmB,eAAe,IAAM,EAAA,OAAA,CAAQ,SAAU,CAAA,QAAA,EAAU,OAAO,CAAA,CAAA;AAAA,SAE7F,MAAA;AACD,UAAA,MAAM,IAAO,GAAA,WAAA,CAAY,YAAc,EAAA,OAAA,EAAS,KAAK,IAAI,CAAA,CAAA;AACzD,UAAA,MAAM,cAAiB,GAAA,EAAA,CAAG,KAAM,CAAA,IAAA,EAAM,MAAM,CAAC,CAAA,CAAA;AAC7C,UAAI,IAAA,cAAA,IAAkB,eAAe,MAAQ,EAAA;AACzC,YAAG,IAAA,cAAA,CAAe,WAAW,CAAG,EAAA;AAC5B,cAAA,OAAA,CAAQ,MAAS,GAAA,CAAC,CAAC,cAAA,CAAe,CAAC,CAAA,CAAA;AAAA,aAElC,MAAA;AACD,cAAA,MAAM,IAAI,KAAM,CAAA,CAAA,gCAAA,EAAmC,IAAI,CAAA,UAAA,EAAa,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,aAC/E;AAAA,WAEC,MAAA;AACD,YAAA,OAAA,CAAQ,MAAS,GAAA,KAAA,CAAA;AAAA,WACrB;AAAA,SACJ;AACA,QAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA,CAAQ,MAAS,GAAA,OAAA,CAAQ,WAAW,OAAQ,CAAA,SAAA,CAAA;AAC5D,QAAA,OAAO,OAAQ,CAAA,SAAA,CAAA;AACf,QAAA,OAAO,OAAQ,CAAA,YAAA,CAAA;AACf,QAAA,OAAO,OAAQ,CAAA,YAAA,CAAA;AAAA,OAIV,MAAA,IAAA,oBAAA,CAAqB,IAAK,CAAA,SAAS,CAAG,EAAA;AAC3C,QAAA,IAAI,QAAQ,SAAW,EAAA;AACnB,UAAA,SAAA,CAAU,QAAQ,SAAS,CAAA,CAAA;AAC3B,UAAM,MAAA,MAAA,GAAS,CAAC,CAAC,kBAAA,CAAmB,eAAe,IAAM,EAAA,OAAA,CAAQ,SAAU,CAAA,QAAA,EAAU,OAAO,CAAA,CAAA;AAC5F,UAAA,IAAG,CAAC,MAAQ,EAAA;AACR,YAAA,OAAO,OAAQ,CAAA,KAAA,CAAA;AACf,YAAW,QAAA,GAAA,IAAA,CAAA;AAAA,WACf;AAAA,SACJ;AACA,QAAA,OAAO,OAAQ,CAAA,SAAA,CAAA;AACf,QAAA,OAAO,OAAQ,CAAA,YAAA,CAAA;AAAA,OAIV,MAAA,IAAA,sBAAA,CAAuB,IAAK,CAAA,SAAS,CAAG,EAAA;AAC7C,QAAA,MAAM,IAAO,GAAA,WAAA,CAAY,YAAc,EAAA,OAAA,EAAS,KAAK,IAAI,CAAA,CAAA;AACzD,QAAA,MAAM,cAAiB,GAAA,EAAA,CAAG,KAAM,CAAA,IAAA,EAAM,MAAM,CAAC,CAAA,CAAA;AAC7C,QAAI,IAAA,cAAA,IAAkB,eAAe,MAAQ,EAAA;AACzC,UAAG,IAAA,cAAA,CAAe,WAAW,CAAG,EAAA;AAC5B,YAAA,OAAA,CAAQ,OAAU,GAAA,IAAA,CAAA;AAClB,YAAA,OAAA,CAAQ,WAAW,EAAC,CAAA;AAAA,WAEnB,MAAA;AACD,YAAA,MAAM,IAAI,KAAM,CAAA,CAAA,gCAAA,EAAmC,IAAI,CAAA,UAAA,EAAa,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,WAC/E;AAAA,SAEC,MAAA;AACD,UAAA,OAAA,CAAQ,OAAU,GAAA,KAAA,CAAA;AAClB,UAAA,OAAA,CAAQ,WAAW,EAAC,CAAA;AAAA,SACxB;AACA,QAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA,CAAQ,OAAU,GAAA,OAAA,CAAQ,WAAW,OAAQ,CAAA,QAAA,CAAA;AAAA,OACjE;AAAA,KACJ;AACA,IAAK,IAAA,CAAA,MAAA,CAAO,SAAS,QAAQ,CAAA,CAAA;AAAA,GAChC,CAAA,CAAA;AACL,CAAA;AAMO,MAAM,uBAAwB,CAAA;AAAA,EACjC,YAAA,CAAA;AAAA,EACA,aAAA,CAAA;AAAA,EACA,aAAA,CAAA;AAAA,EAEA,WAAA,CAAY,YAA4B,EAAA,aAAA,EAAsB,kBAA6B,EAAA;AACvF,IAAA,IAAA,CAAK,YAAe,GAAA,YAAA,CAAA;AACpB,IAAA,IAAA,CAAK,aAAgB,GAAA,aAAA,CAAA;AACrB,IAAA,IAAA,CAAK,aAAgB,GAAA,2BAAA,CAA4B,IAAK,CAAA,YAAA,EAAa,kBAAkB,CAAA,CAAA;AAAA,GACzF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,WAAW,YAA8B,EAAA;AACrC,IAAA,MAAM,eAAe,IAAIC,yBAAA,CAAa,EAAE,MAAA,EAAQ,MAAM,CAAA,CAAA;AACtD,IAAa,YAAA,CAAA,WAAA,CAAYC,gCAAkB,CAAA,KAAA,EAAO,uBAAuB,CAAA,CAAA;AACzE,IAAa,YAAA,CAAA,WAAA,CAAYH,8BAAgB,CAAA,KAAA,EAAO,gBAAgB,CAAA,CAAA;AAChE,IAAa,YAAA,CAAA,WAAA,CAAYd,gCAAkB,CAAA,KAAA,EAAO,kBAAkB,CAAA,CAAA;AACpE,IAAM,MAAA,OAAA,GAAU,IAAIkB,oBAAA,CAAQ,YAAY,CAAA,CAAA;AACxC,IAAA,MAAM,UAAa,GAAA,IAAIC,uBAAW,CAAA,OAAA,EAAS,YAAY,CAAA,CAAA;AACvD,IAAI,IAAA;AACA,MAAA,UAAA,CAAW,SAAS,YAAY,CAAA,CAAA;AAChC,MAAO,OAAA,YAAA,CAAA;AAAA,aAEL,GAAK,EAAA;AACP,MAAM,MAAA,IAAI,KAAM,CAAA,CAAA,6BAAA,EAAgC,GAAG,CAAA,EAAA,EAAK,IAAK,CAAA,SAAA,CAAU,YAAc,EAAA,IAAA,EAAM,CAAC,CAAC,CAAE,CAAA,CAAA,CAAA;AAAA,KACnG;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,8BAA8B,YAAwC,EAAA;AACxE,IAAA,MAAM,eAAmB,GAAA,YAAA,CAAqB,KAAM,CAAA,CAAC,CAAE,CAAA,WAAA,CAAA;AACvD,IAAA,IAAG,CAAC,eAAiB,EAAA;AACjB,MAAM,MAAA,IAAI,MAAM,2BAA2B,CAAA,CAAA;AAAA,KAC/C;AACA,IAAA,MAAM,QAAW,GAAA,IAAI,gCAAiC,CAAA,IAAA,CAAK,cAAc,eAAe,CAAA,CAAA;AACxF,IAAA,MAAM,SAAS,UAAW,EAAA,CAAA;AAC1B,IAAO,OAAA,QAAA,CAAS,QAAQ,YAAY,CAAA,CAAA;AAAA,GACxC;AAAA,EAEA,mBAAmB,UAAoB,EAAA;AACnC,IAAA,MAAM,eAAe,IAAIH,yBAAA,CAAa,EAAE,MAAA,EAAQ,MAAM,CAAA,CAAA;AACtD,IAAa,YAAA,CAAA,WAAA,CAAYC,gCAAkB,CAAA,KAAA,EAAO,uBAAuB,CAAA,CAAA;AACzE,IAAa,YAAA,CAAA,WAAA,CAAYH,8BAAgB,CAAA,KAAA,EAAO,gBAAgB,CAAA,CAAA;AAChE,IAAa,YAAA,CAAA,WAAA,CAAYD,8BAAgB,CAAA,KAAA,EAAO,gBAAgB,CAAA,CAAA;AAChE,IAAM,MAAA,OAAA,GAAU,IAAIK,oBAAA,CAAQ,YAAY,CAAA,CAAA;AACxC,IAAA,MAAM,UAAa,GAAA,IAAIC,uBAAW,CAAA,OAAA,EAAS,YAAY,CAAA,CAAA;AACvD,IAAI,IAAA;AACA,MAAO,OAAA,UAAA,CAAW,SAAS,UAAU,CAAA,CAAA;AAAA,aAEnC,GAAK,EAAA;AACP,MAAM,MAAA,IAAI,KAAM,CAAA,CAAA,6BAAA,EAAgC,GAAG,CAAA,EAAA,EAAK,IAAK,CAAA,SAAA,CAAU,UAAY,EAAA,IAAA,EAAM,CAAC,CAAC,CAAE,CAAA,CAAA,CAAA;AAAA,KACjG;AAAA,GACJ;AAAA,EAEA,MAAM,QAAA,CAAS,YAAsB,EAAA,IAAA,EAAoB,OAA0C,EAAA;AAC/F,IAAA,MAAM,OAAU,GAAA,IAAID,oBAAQ,CAAA,IAAA,CAAK,YAAY,CAAA,CAAA;AAC7C,IAAA,MAAM,UAAa,GAAA,IAAIC,uBAAW,CAAA,OAAA,EAAS,KAAK,YAAY,CAAA,CAAA;AAC5D,IAAM,MAAA,YAAA,GAAe,UAAW,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAC7C,IAAA,IAAI,aAAa,qBAAsB,EAAA,KAAM,IAAK,CAAA,aAAA,CAAc,uBAAyB,EAAA;AACrF,MAAA,MAAM,IAAI,KAAM,CAAA,CAAA,+BAAA,EAAkC,KAAK,aAAc,CAAA,qBAAA,EAAuB,CAAI,EAAA,CAAA,CAAA,CAAA;AAAA,KACpG;AACA,IAAM,MAAA,iBAAA,GAAoB,IAAK,CAAA,UAAA,CAAW,YAAY,CAAA,CAAA;AACtD,IAAA,MAAM,cAAiB,GAAA,MAAM,IAAK,CAAA,6BAAA,CAA8B,iBAAiB,CAAA,CAAA;AACjF,IAAM,MAAA,UAAA,GAAa,kBAAkB,IAAK,CAAA,YAAA,EAAc,KAAK,aAAe,EAAA,cAAA,EAAgB,MAAM,OAAO,CAAA,CAAA;AACzG,IAAO,OAAA,IAAA,CAAK,mBAAmB,UAAU,CAAA,CAAA;AAAA,GAC7C;AACJ;;ACtagB,SAAA,UAAA,CAAW,EAAe,EAAA,KAAA,EAAc,OAAa,EAAA;AACjE,EAAA,EAAA,CAAG,UAAU,KAAO,EAAA,CAAA,GAAA,EAAMJ,sBAAU,CAAA,YAAA,CAAa,QAAQ,MAAM,CAAC,CAAI,CAAA,EAAA,OAAA,CAAQ,OAAO,CAAI,CAAA,EAAA,OAAA,CAAQ,IAAI,CAAA,CAAA,CAAA,GAAM,EAAE,CAAE,CAAA,CAAA,CAAA;AACjH,CAAA;AAEO,MAAM,WAAc,GAAA,SAAA,CAAA;AAEX,SAAA,YAAA,CAAa,EAAe,EAAA,KAAA,EAAc,aAAgC,EAAA;AACtF,EAAA,EAAA,CAAG,SAAU,CAAA,KAAA,EAAO,CAAkC,+BAAA,EAAAD,8BAAA,CAAgB,SAAS,CAAI,EAAA,CAAA,CAAA,CAAA;AACnF,EAAA,EAAA,CAAG,SAAU,CAAA,KAAA,EAAO,CAAkC,+BAAA,EAAAD,8BAAA,CAAgB,SAAS,CAAI,EAAA,CAAA,CAAA,CAAA;AACnF,EAAA,EAAA,CAAG,UAAU,KAAO,EAAA,CAAA,kCAAA,EAAqC,aAAc,CAAA,YAAA,EAAc,CAAI,EAAA,CAAA,CAAA,CAAA;AACzF,EAAG,EAAA,CAAA,SAAA,CAAU,OAAO,yCAA2C,CAAA,CAAA;AAC/D,EAAA,EAAA,CAAG,SAAU,CAAA,KAAA,EAAO,CAAgD,6CAAA,EAAA,WAAW,CAAa,WAAA,CAAA,CAAA,CAAA;AAC5F,EAAA,EAAA,CAAG,SAAU,CAAA,KAAA,EAAO,CAA+B,4BAAA,EAAA,WAAW,CAAsB,oBAAA,CAAA,CAAA,CAAA;AACxF,CAAA;AACgB,SAAA,WAAA,CAAY,EAAe,EAAA,KAAA,EAAc,aAAgC,EAAA;AACrF,EAAA,EAAA,CAAG,UAAU,KAAO,EAAA,CAAA,8CAAA,EAAiD,aAAc,CAAA,OAAA,EAAS,CAA4E,0EAAA,CAAA,CAAA,CAAA;AACxK,EAAG,EAAA,CAAA,SAAA,CAAU,OAAO,CAA6B,0BAAA,EAAAC,8BAAA,CAAgB,SAAS,CAAuB,oBAAA,EAAAA,8BAAA,CAAgB,SAAS,CAAoC,kCAAA,CAAA,CAAA,CAAA;AAC9J,EAAG,EAAA,CAAA,SAAA,CAAU,OAAO,uCAAuC,CAAA,CAAA;AAC3D,EAAG,EAAA,CAAA,SAAA,CAAU,OAAO,yBAAyB,CAAA,CAAA;AAC7C,EAAG,EAAA,CAAA,SAAA,CAAU,OAAO,4BAA4B,CAAA,CAAA;AAChD,EAAG,EAAA,CAAA,SAAA,CAAU,OAAO,4BAA4B,CAAA,CAAA;AACpD,CAAA;AAEgB,SAAA,WAAA,CAAY,IAAe,KAAc,EAAA;AACrD,EAAG,EAAA,CAAA,SAAA,CAAU,OAAO,yCAAyC,CAAA,CAAA;AAC7D,EAAG,EAAA,CAAA,SAAA,CAAU,OAAO,GAAG,CAAA,CAAA;AAC3B,CAAA;AAGgB,SAAA,sBAAA,CAAuB,IAAe,KAAc,EAAA;AAChE,EAAG,EAAA,CAAA,SAAA,CAAU,OAAO,oBAAoB,CAAA,CAAA;AAC5C,CAAA;AAIgB,SAAA,uBAAA,CAAwB,IAAe,KAAc,EAAA;AACjE,EAAG,EAAA,CAAA,SAAA,CAAU,OAAO,OAAO,CAAA,CAAA;AAC3B,EAAG,EAAA,CAAA,SAAA,CAAU,OAAO,oCAAoC,CAAA,CAAA;AAC5D,CAAA;AAGgB,SAAA,kBAAA,CAAmB,IAAe,KAAc,EAAA;AAC5D,EAAG,EAAA,CAAA,SAAA,CAAU,OAAO,gCAAgC,CAAA,CAAA;AACxD,CAAA;AAGgB,SAAA,mBAAA,CAAoB,IAAe,KAAc,EAAA;AAC7D,EAAG,EAAA,CAAA,SAAA,CAAU,OAAO,gCAAgC,CAAA,CAAA;AACxD,CAAA;AAGO,SAAS,kBAAmB,CAAA,EAAA,EAAe,KAAc,EAAA,IAAA,EAAa,iBAAe,KAAO,EAAA;AAC/F,EAAA,EAAA,CAAG,UAAU,KAAO,EAAA,CAAA,iDAAA,EAAoD,IAAI,CAAA,GAAA,EAAM,cAAc,CAAK,GAAA,CAAA,CAAA,CAAA;AACzG,CAAA;AAGgB,SAAA,mBAAA,CAAoB,IAAe,KAAc,EAAA;AAC7D,EAAG,EAAA,CAAA,SAAA,CAAU,OAAO,qBAAqB,CAAA,CAAA;AAC7C,CAAA;AAEO,SAAS,kBAAkB,MAAwB,EAAA;AACtD,EAAM,MAAA,EAAA,GAAKC,sBAAU,CAAA,YAAA,CAAa,MAAM,CAAA,CAAA;AACxC,EAAM,MAAA,IAAA,GAAOA,sBAAU,CAAA,YAAA,CAAa,MAAM,CAAA,CAAA;AAE1C,EAAI,IAAA,EAAA,KAAOD,+BAAgB,SAAW,EAAA;AAClC,IAAA,OAAO,eAAe,IAAI,CAAA,CAAA,CAAA;AAAA,GAC9B,MAAA,IACS,EAAO,KAAAD,8BAAA,CAAgB,SAAW,EAAA;AACvC,IAAA,OAAO,eAAe,IAAI,CAAA,CAAA,CAAA;AAAA,GAC9B,MAAA,IACS,EAAO,KAAAb,gCAAA,CAAkB,SAAW,EAAA;AACzC,IAAO,OAAA,CAAA,YAAA,EAAe,KAAK,SAAU,CAAA,CAAA,EAAG,KAAK,MAAS,GAAA,YAAA,CAAa,MAAM,CAAC,CAAA,CAAA,CAAA;AAAA,GAEzE,MAAA;AACD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAuB,oBAAA,EAAA,MAAM,CAAE,CAAA,CAAA,CAAA;AAAA,GACnD;AACJ,CAAA;AAQgB,SAAA,cAAA,CAAe,gBAAwB,EAAA,IAAA,GAAK,KAAc,EAAA;AACtE,EAAG,IAAA,CAAC,iBAAiB,MAAQ,EAAA;AACzB,IAAM,MAAA,IAAI,MAAM,sBAAsB,CAAA,CAAA;AAAA,GAC1C;AACA,EAAA,MAAM,OAAO,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,SAAA,CAAU,gBAAgB,CAAC,CAAA,CAAA;AACxD,EAAA,OAAO,IAAK,CAAA,WAAA,CAAA;AACZ,EAAA,IAAG,CAAC,IAAM,EAAA;AACN,IAAA,OAAO,IAAK,CAAA,KAAA,CAAA;AAAA,GAEX,MAAA;AACD,IAAA,IAAG,KAAK,KAAO,EAAA;AACX,MAAK,IAAA,CAAA,KAAA,GAAQ,KAAK,KAAM,CAAA,GAAA,CAAI,CAAC,CAAY,KAAA,cAAA,CAAe,CAAE,EAAA,IAAI,CAAC,CAAA,CAAA;AAAA,KACnE;AAAA,GACJ;AAEA,EAAA,MAAM,EAAK,GAAAe,sBAAA,CAAU,YAAa,CAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAC7C,EAAA,MAAM,IAAO,GAAAA,sBAAA,CAAU,YAAa,CAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAE/C,EAAI,IAAA,EAAA,KAAOf,iCAAkB,SAAW,EAAA;AACpC,IAAA,IAAA,CAAK,MAAS,GAAA,CAAA,EAAGa,8BAAgB,CAAA,SAAS,CAAI,CAAA,EAAA,IAAA,CAAK,SAAU,CAAA,CAAA,EAAG,IAAK,CAAA,MAAA,GAAS,YAAa,CAAA,MAAM,CAAC,CAAA,CAAA,CAAA;AAAA,GACtG;AAEA,EAAO,OAAA,IAAA,CAAA;AACX,CAAA;AAYO,MAAe,uBAAiD,CAAA;AAAA,EAEnE,IAAA,CAAA;AAAA,EAEA,YAAY,IAAc,EAAA;AACtB,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AAAA,GAChB;AAAA,EAEA,MAAmB,GAAA;AACf,IAAA,OAAO,IAAK,CAAA,IAAA,CAAA;AAAA,GAChB;AAAA,EAEA,KAAA,CAAM,EAAe,EAAA,KAAA,EAAa,gBAAwB,EAAA;AACtD,IAAW,UAAA,CAAA,EAAA,EAAI,OAAO,gBAAgB,CAAA,CAAA;AACtC,IAAA,kBAAA,CAAmB,IAAG,KAAK,CAAA,CAAA;AAAA,GAC/B;AAAA;AAAA,EAKA,IAAA,CAAK,IAAe,KAAc,EAAA;AAC9B,IAAA,mBAAA,CAAoB,IAAG,KAAK,CAAA,CAAA;AAAA,GAChC;AACJ,CAAA;AAMO,MAAe,+BAA+B,uBAAwB,CAAA;AAAA,EAEzE,YAAY,IAAc,EAAA;AACtB,IAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,GACd;AAAA,EAIA,QAAA,CAAS,EAAe,EAAA,KAAA,EAAc,gBAAwB,EAAA;AAC1D,IAAM,MAAA,IAAA,GAAO,IAAK,CAAA,OAAA,CAAQ,gBAAgB,CAAA,CAAA;AAC1C,IAAG,IAAA,IAAA,CAAK,QAAU,EAAA;AACd,MAAA,IAAA,CAAK,QAAQ,EAAC,CAAA;AAAA,KAClB;AACA,IAAA,sBAAA,CAAuB,IAAG,KAAK,CAAA,CAAA;AAC/B,IAAA,EAAA,CAAG,SAAU,CAAA,KAAA,EAAO,CAAU,OAAA,EAAA,IAAA,CAAK,SAAU,CAAA,IAAI,CAAC,CAAA,IAAA,EAAO,iBAAkB,CAAA,IAAA,CAAK,MAAM,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAC1F,IAAA,uBAAA,CAAwB,IAAG,KAAK,CAAA,CAAA;AAAA,GACpC;AACJ,CAAA;AAOO,MAAM,oBAAoB,sBAAuB,CAAA;AAAA,EACpD,YAAY,IAAc,EAAA;AACtB,IAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,GACd;AAAA,EACA,QAAQ,gBAA8B,EAAA;AAClC,IAAA,OAAO,eAAe,gBAAgB,CAAA,CAAA;AAAA,GAC1C;AACJ,CAAA;AAKO,MAAM,MAAgC,CAAA;AAAA;AAAA,EAEzC,KAAA,CAAM,EAAgB,EAAA,KAAA,EAAe,gBAA+B,EAAA;AAAA,GACpE;AAAA;AAAA,EAEA,QAAA,CAAS,EAAgB,EAAA,KAAA,EAAe,gBAA+B,EAAA;AAAA,GACvE;AAAA;AAAA,EAEA,IAAA,CAAK,EAAgB,EAAA,KAAA,EAAe,gBAA+B,EAAA;AAAA,GACnE;AACJ;;AC7LO,MAAM,eAAe,uBAAwB,CAAA;AAAA,EAChD,OAAO,IAAA,GAAO,CAAG,EAAAb,gCAAA,CAAkB,SAAS,CAAA,iBAAA,CAAA,CAAA;AAAA,EAC5C,WAAc,GAAA;AACV,IAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAAA,GACf;AAAA,EAEA,KAAA,CAAM,EAAe,EAAA,KAAA,EAAa,gBAAkC,EAAA;AAChE,IAAW,UAAA,CAAA,EAAA,EAAI,OAAO,gBAAgB,CAAA,CAAA;AACtC,IAAA,kBAAA,CAAmB,IAAG,KAAK,CAAA,CAAA;AAC3B,IAAmB,kBAAA,CAAA,EAAA,EAAG,KAAM,EAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAAA,GACrD;AAAA,EAEA,QAAA,CAAS,EAAe,EAAA,KAAA,EAAc,gBAAyC,EAAA;AAC3E,IAAM,MAAA,KAAA,GAAQ,eAAe,gBAAgB,CAAA,CAAA;AAC7C,IAAA,OAAQ,KAAc,CAAA,SAAA,CAAA;AACtB,IAAA,OAAQ,KAAc,CAAA,YAAA,CAAA;AACtB,IAAA,MAAM,OAAO,EAAC,MAAA,EAAQ,CAAG,EAAAc,8BAAA,CAAgB,SAAS,CAAY,UAAA,CAAA,EAAA,CAAA;AAC9D,IAAA,sBAAA,CAAuB,IAAI,KAAK,CAAA,CAAA;AAChC,IAAA,IAAG,iBAAiB,SAAW,EAAA;AAC3B,MAAA,EAAA,CAAG,SAAU,CAAA,KAAA,EAAO,CAAmC,gCAAA,EAAA,gBAAA,CAAiB,YAAY,CAAwB,sBAAA,CAAA,CAAA,CAAA;AAAA,KAE3G,MAAA;AACD,MAAG,EAAA,CAAA,SAAA,CAAU,OAAO,8BAA8B,CAAA,CAAA;AAAA,KACtD;AACA,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,cAAc,CAAA,CAAA;AAClC,IAAA,EAAA,CAAG,SAAU,CAAA,KAAA,EAAO,CAAU,OAAA,EAAA,IAAA,CAAK,SAAU,CAAA,KAAK,CAAC,CAAA,IAAA,EAAO,iBAAkB,CAAA,KAAA,CAAM,MAAM,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAC5F,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,GAAG,CAAA,CAAA;AACvB,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,QAAQ,CAAA,CAAA;AAC5B,IAAA,EAAA,CAAG,SAAU,CAAA,KAAA,EAAO,CAAU,OAAA,EAAA,IAAA,CAAK,SAAU,CAAA,IAAI,CAAC,CAAA,IAAA,EAAO,iBAAkB,CAAA,IAAA,CAAK,MAAM,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAC1F,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,GAAG,CAAA,CAAA;AACvB,IAAA,uBAAA,CAAwB,IAAI,KAAK,CAAA,CAAA;AACjC,IAAA,OAAO,gBAAiB,CAAA,SAAA,CAAA;AAAA,GAC5B;AAAA,EAEA,IAAA,CAAK,IAAe,KAAc,EAAA;AAC9B,IAAA,mBAAA,CAAoB,IAAG,KAAK,CAAA,CAAA;AAC5B,IAAA,mBAAA,CAAoB,IAAG,KAAK,CAAA,CAAA;AAAA,GAChC;AACJ;;ACvCO,MAAM,oBAAoB,uBAAwB,CAAA;AAAA,EACrD,OAAO,IAAA,GAAO,CAAG,EAAAd,gCAAA,CAAkB,SAAS,CAAA,sBAAA,CAAA,CAAA;AAAA,EAC5C,WAAc,GAAA;AACV,IAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAAA,GACf;AAAA,EACA,QAAA,CAAS,EAAe,EAAA,KAAA,EAAc,gBAA8C,EAAA;AAChF,IAAM,MAAA,KAAA,GAAQ,cAAe,CAAA,gBAAA,EAAkB,IAAI,CAAA,CAAA;AACnD,IAAA,OAAQ,KAAc,CAAA,SAAA,CAAA;AACtB,IAAA,OAAQ,KAAc,CAAA,YAAA,CAAA;AACtB,IAAA,OAAQ,KAAc,CAAA,YAAA,CAAA;AACtB,IAAA,KAAA,CAAM,MAAS,GAAA,IAAA,CAAA;AACf,IAAA,sBAAA,CAAuB,IAAG,KAAK,CAAA,CAAA;AAC/B,IAAA,IAAG,iBAAiB,SAAW,EAAA;AAC3B,MAAA,EAAA,CAAG,SAAU,CAAA,KAAA,EAAO,CAAmC,gCAAA,EAAA,gBAAA,CAAiB,YAAY,CAAwB,sBAAA,CAAA,CAAA,CAAA;AAAA,KAE3G,MAAA;AACD,MAAmB,kBAAA,CAAA,EAAA,EAAG,KAAM,EAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AACjD,MAAG,EAAA,CAAA,SAAA,CAAU,OAAO,6CAA6C,CAAA,CAAA;AACjE,MAAA,mBAAA,CAAoB,IAAG,KAAK,CAAA,CAAA;AAAA,KAChC;AACA,IAAA,EAAA,CAAG,SAAU,CAAA,KAAA,EAAO,CAAmB,gBAAA,EAAA,IAAA,CAAK,SAAU,CAAA,KAAK,CAAC,CAAA,IAAA,EAAO,iBAAkB,CAAA,gBAAA,CAAiB,MAAM,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAChH,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,uDAAuD,CAAA,CAAA;AAC3E,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,iBAAiB,CAAA,CAAA;AACrC,IAAA,uBAAA,CAAwB,IAAG,KAAK,CAAA,CAAA;AAChC,IAAA,OAAO,gBAAiB,CAAA,SAAA,CAAA;AACxB,IAAA,OAAQ,gBAAyB,CAAA,QAAA,CAAA;AACjC,IAAA,OAAQ,gBAAyB,CAAA,SAAA,CAAA;AAAA,GAErC;AACJ;;AClCO,MAAM,2BAA2B,sBAAuB,CAAA;AAAA,EAC3D,OAAO,IAAA,GAAO,CAAG,EAAAA,gCAAA,CAAkB,SAAS,CAAA,mBAAA,CAAA,CAAA;AAAA,EAC5C,WAAc,GAAA;AACV,IAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAAA,GACf;AAAA,EACA,QAAQ,gBAAsC,EAAA;AAC1C,IAAO,OAAA;AAAA,MACH,MAAA,EAAQ,CAAG,EAAAa,8BAAA,CAAgB,SAAS,CAAA,SAAA,CAAA;AAAA,MACpC,MAAM,gBAAiB,CAAA,IAAA;AAAA,MACvB,OAAO,EAAC;AAAA,KACZ,CAAA;AAAA,GACJ;AACJ;;ACXO,MAAM,0BAA0B,uBAAwB,CAAA;AAAA,EAC3D,OAAO,IAAA,GAAO,CAAG,EAAAb,gCAAA,CAAkB,SAAS,CAAA,4BAAA,CAAA,CAAA;AAAA,EAC5C,WAAc,GAAA;AACV,IAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,GACd;AAAA,EACA,QAAA,CAAS,EAAe,EAAA,KAAA,EAAc,gBAA+C,EAAA;AACjF,IAAM,MAAA,KAAA,GAAQ,eAAe,gBAAgB,CAAA,CAAA;AAC7C,IAAA,sBAAA,CAAuB,IAAG,KAAK,CAAA,CAAA;AAC/B,IAAG,IAAA,gBAAA,CAAiB,SAAS,MAAQ,EAAA;AACjC,MAAmB,kBAAA,CAAA,EAAA,EAAG,KAAM,EAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAAA,KACrD;AACA,IAAA,EAAA,CAAG,SAAU,CAAA,KAAA,EAAO,CAAgC,6BAAA,EAAA,gBAAA,CAAiB,WAAW,CAAK,GAAA,CAAA,CAAA,CAAA;AACrF,IAAA,EAAA,CAAG,SAAU,CAAA,KAAA,EAAO,CAAwD,qDAAA,EAAA,gBAAA,CAAiB,MAAM,CAAqD,mDAAA,CAAA,CAAA,CAAA;AACxJ,IAAG,IAAA,gBAAA,CAAiB,SAAS,MAAQ,EAAA;AACjC,MAAA,mBAAA,CAAoB,IAAG,KAAK,CAAA,CAAA;AAAA,KAChC;AACA,IAAA,EAAA,CAAG,UAAU,KAAO,EAAA,CAAA,qBAAA,EAAwB,KAAK,SAAU,CAAA,KAAK,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AACpE,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,wBAAwB,CAAA,CAAA;AAC5C,IAAA,EAAA,CAAG,UAAU,KAAO,EAAA,CAAA,mBAAA,EAAsB,kBAAkB,KAAM,CAAA,MAAM,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAC5E,IAAA,uBAAA,CAAwB,IAAG,KAAK,CAAA,CAAA;AAAA,GACpC;AACJ;;ACrBO,MAAM,gBAAgB,uBAAwB,CAAA;AAAA,EACjD,OAAO,IAAA,GAAO,CAAG,EAAAA,gCAAA,CAAkB,SAAS,CAAA,kBAAA,CAAA,CAAA;AAAA,EAC5C,WAAc,GAAA;AACV,IAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,GACd;AAAA,EACA,QAAA,CAAS,EAAe,EAAA,KAAA,EAAc,gBAAqC,EAAA;AACvE,IAAM,MAAA,KAAA,GAAQ,eAAe,gBAAgB,CAAA,CAAA;AAC7C,IAAA,sBAAA,CAAuB,IAAG,KAAK,CAAA,CAAA;AAC/B,IAAA,EAAA,CAAG,SAAU,CAAA,KAAA,EAAO,CAAkC,+BAAA,EAAA,gBAAA,CAAiB,IAAI,CAAyB,uBAAA,CAAA,CAAA,CAAA;AACpG,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,6CAA6C,CAAA,CAAA;AACjE,IAAA,EAAA,CAAG,UAAU,KAAO,EAAA,CAAA,oBAAA,EAAuB,KAAK,SAAU,CAAA,KAAK,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AACnE,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,uBAAuB,CAAA,CAAA;AAC3C,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,CAAkB,eAAA,EAAA,IAAA,CAAK,UAAU,gBAAiB,CAAA,IAAA,CAAK,QAAQ,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AACvF,IAAA,EAAA,CAAG,UAAU,KAAO,EAAA,CAAA,kBAAA,EAAqB,kBAAkB,KAAM,CAAA,MAAM,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAC3E,IAAA,uBAAA,CAAwB,IAAG,KAAK,CAAA,CAAA;AAAA,GACpC;AACJ;;ACjBO,MAAM,aAAa,uBAAwB,CAAA;AAAA,EAC9C,OAAO,IAAA,GAAO,CAAG,EAAAA,gCAAA,CAAkB,SAAS,CAAA,eAAA,CAAA,CAAA;AAAA,EAC5C,WAAc,GAAA;AACV,IAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,GACd;AAAA,EACA,QAAA,CAAS,EAAe,EAAA,KAAA,EAAc,gBAAkC,EAAA;AACpE,IAAA,sBAAA,CAAuB,IAAG,KAAK,CAAA,CAAA;AAC/B,IAAmB,kBAAA,CAAA,EAAA,EAAG,KAAM,EAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AACjD,IAAA,EAAA,CAAG,UAAU,KAAO,EAAA,CAAA,gBAAA,EAAmB,KAAK,SAAU,CAAA,gBAAgB,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAC1E,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,uEAAuE,CAAA,CAAA;AAC3F,IAAA,mBAAA,CAAoB,IAAG,KAAK,CAAA,CAAA;AAC5B,IAAG,EAAA,CAAA,SAAA,CAAU,KAAO,EAAA,CAAA,kBAAA,EAAqBc,8BAAgB,CAAA,SAAS,CAA2B,wBAAA,EAAA,iBAAA,CAAkBA,8BAAgB,CAAA,SAAA,GAAY,OAAO,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AACtJ,IAAA,uBAAA,CAAwB,IAAG,KAAK,CAAA,CAAA;AAChC,IAAA,OAAO,gBAAiB,CAAA,KAAA,CAAA;AAAA,GAC5B;AACJ;;ACbO,MAAM,kBAAkB,uBAAwB,CAAA;AAAA,EACnD,OAAO,IAAA,GAAO,CAAG,EAAAd,gCAAA,CAAkB,SAAS,CAAA,oBAAA,CAAA,CAAA;AAAA,EAC5C,WAAc,GAAA;AACV,IAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAAA,GACf;AAAA,EAEA,KAAA,CAAM,EAAe,EAAA,KAAA,EAAa,gBAAkC,EAAA;AAChE,IAAW,UAAA,CAAA,EAAA,EAAI,OAAO,gBAAgB,CAAA,CAAA;AACtC,IAAA,kBAAA,CAAmB,IAAG,KAAK,CAAA,CAAA;AAC3B,IAAmB,kBAAA,CAAA,EAAA,EAAG,KAAM,EAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAAA,GACrD;AAAA,EAEA,QAAS,CAAA,EAAA,EAAe,KAAc,EAAA,gBAAA,EAAuC,IAAyB,EAAA;AAClG,IAAG,IAAA,gBAAA,EAAkB,KAAQ,GAAA,CAAC,CAAG,EAAA;AAC7B,MAAA,MAAM,KAAQ,GAAA,cAAA,CAAe,gBAAkB,EAAA,KAAA,GAAQ,CAAC,CAAC,CAAA,CAAA;AACzD,MAAA,sBAAA,CAAuB,IAAI,KAAK,CAAA,CAAA;AAChC,MAAA,EAAA,CAAG,SAAU,CAAA,KAAA,EAAO,CAAkB,eAAA,EAAA,IAAA,CAAK,SAAU,CAAA,KAAK,CAAC,CAAA,IAAA,EAAO,iBAAkB,CAAA,gBAAA,CAAiB,MAAM,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAC/G,MAAG,EAAA,CAAA,SAAA,CAAU,OAAO,8CAA8C,CAAA,CAAA;AAClE,MAAG,EAAA,CAAA,SAAA,CAAU,OAAO,2BAA2B,CAAA,CAAA;AAC/C,MAAA,IAAG,iBAAiB,KAAQ,GAAA,CAAC,CAAE,CAAA,KAAA,GAAQ,CAAC,CAAG,EAAA;AACvC,QAAK,IAAA,CAAA,EAAA,EAAI,QAAM,CAAG,EAAA,gBAAA,CAAiB,MAAM,CAAC,CAAA,CAAE,KAAM,CAAA,CAAC,CAAC,CAAA,CAAA;AACpD,QAAA,OAAO,gBAAiB,CAAA,KAAA,CAAA;AAAA,OAC5B;AACA,MAAG,EAAA,CAAA,SAAA,CAAU,OAAO,qBAAqB,CAAA,CAAA;AACzC,MAAG,EAAA,CAAA,SAAA,CAAU,OAAO,KAAK,CAAA,CAAA;AACzB,MAAG,EAAA,CAAA,SAAA,CAAU,OAAO,gBAAgB,CAAA,CAAA;AACpC,MAAA,uBAAA,CAAwB,IAAI,KAAK,CAAA,CAAA;AAAA,KACrC;AAAA,GACJ;AAAA,EAEA,IAAA,CAAK,IAAe,KAAc,EAAA;AAC9B,IAAA,mBAAA,CAAoB,IAAG,KAAK,CAAA,CAAA;AAC5B,IAAA,mBAAA,CAAoB,IAAG,KAAK,CAAA,CAAA;AAAA,GAChC;AACJ;;ACjCO,MAAM,iBAAiB,uBAAwB,CAAA;AAAA,EAClD,OAAO,IAAA,GAAO,CAAG,EAAAA,gCAAA,CAAkB,SAAS,CAAA,mBAAA,CAAA,CAAA;AAAA,EAC5C,WAAc,GAAA;AACV,IAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAAA,GACf;AAAA,EAEA,KAAA,CAAM,EAAe,EAAA,KAAA,EAAa,gBAAsC,EAAA;AACpE,IAAW,UAAA,CAAA,EAAA,EAAI,OAAO,gBAAgB,CAAA,CAAA;AACtC,IAAA,kBAAA,CAAmB,IAAG,KAAK,CAAA,CAAA;AAC3B,IAAA,kBAAA,CAAmB,EAAG,EAAA,KAAA,EAAM,gBAAiB,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA,GAC3D;AAAA,EAEA,QAAS,CAAA,EAAA,EAAe,KAAc,EAAA,gBAAA,EAAsC,IAAyB,EAAA;AACjG,IAAM,MAAA,KAAA,GAAQ,eAAe,gBAAgB,CAAA,CAAA;AAC7C,IAAA,OAAO,KAAM,CAAA,KAAA,CAAA;AACb,IAAA,OAAO,KAAM,CAAA,QAAA,CAAA;AACb,IAAA,OAAO,KAAM,CAAA,QAAA,CAAA;AACb,IAAA,sBAAA,CAAuB,IAAI,KAAK,CAAA,CAAA;AAChC,IAAA,EAAA,CAAG,SAAU,CAAA,KAAA,EAAO,CAAkB,eAAA,EAAA,IAAA,CAAK,SAAU,CAAA,KAAK,CAAC,CAAA,IAAA,EAAO,iBAAkB,CAAA,gBAAA,CAAiB,MAAM,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAC/G,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,+FAA+F,CAAA,CAAA;AACnH,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,qDAAqD,CAAA,CAAA;AACzE,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,eAAe,CAAA,CAAA;AACnC,IAAA,IAAA,CAAK,EAAI,EAAA,KAAA,GAAM,CAAG,EAAA,EAAC,MAAQ,EAAA,CAAA,EAAGc,8BAAgB,CAAA,SAAS,CAAc,UAAA,CAAA,EAAA,KAAA,EAAO,gBAAiB,CAAA,QAAA,EAAS,CAAA,CAAA;AACtG,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,+DAA+D,CAAA,CAAA;AACnF,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,+DAA+D,CAAA,CAAA;AACnF,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,gBAAgB,CAAA,CAAA;AACpC,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,GAAG,CAAA,CAAA;AACvB,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,QAAQ,CAAA,CAAA;AAC5B,IAAA,IAAA,CAAK,EAAI,EAAA,KAAA,GAAM,CAAG,EAAA,EAAC,MAAQ,EAAA,CAAA,EAAGA,8BAAgB,CAAA,SAAS,CAAc,UAAA,CAAA,EAAA,KAAA,EAAO,gBAAiB,CAAA,QAAA,EAAS,CAAA,CAAA;AACtG,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,+DAA+D,CAAA,CAAA;AACnF,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,+DAA+D,CAAA,CAAA;AACnF,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,gBAAgB,CAAA,CAAA;AACpC,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,GAAG,CAAA,CAAA;AACvB,IAAA,uBAAA,CAAwB,IAAI,KAAK,CAAA,CAAA;AACjC,IAAA,OAAO,gBAAiB,CAAA,KAAA,CAAA;AACxB,IAAA,OAAQ,gBAAyB,CAAA,QAAA,CAAA;AACjC,IAAA,OAAQ,gBAAyB,CAAA,QAAA,CAAA;AAAA,GACrC;AAAA,EAEA,IAAA,CAAK,IAAe,KAAc,EAAA;AAC9B,IAAA,mBAAA,CAAoB,IAAG,KAAK,CAAA,CAAA;AAC5B,IAAA,mBAAA,CAAoB,IAAG,KAAK,CAAA,CAAA;AAAA,GAChC;AACJ;;AC7CO,MAAM,iBAAiB,uBAAwB,CAAA;AAAA,EAClD,OAAO,IAAA,GAAO,CAAG,EAAAd,gCAAA,CAAkB,SAAS,CAAA,mBAAA,CAAA,CAAA;AAAA,EAC5C,WAAc,GAAA;AACV,IAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,GACd;AAAA,EACA,QAAA,CAAS,EAAe,EAAA,KAAA,EAAc,gBAAsC,EAAA;AACxE,IAAM,MAAA,KAAA,GAAQ,eAAe,gBAAgB,CAAA,CAAA;AAC7C,IAAA,sBAAA,CAAuB,IAAG,KAAK,CAAA,CAAA;AAC/B,IAAG,IAAA,gBAAA,CAAiB,SAAS,MAAQ,EAAA;AACjC,MAAmB,kBAAA,CAAA,EAAA,EAAG,KAAM,EAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAAA,KACrD;AACA,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,6DAA6D,CAAA,CAAA;AACjF,IAAG,IAAA,gBAAA,CAAiB,SAAS,MAAQ,EAAA;AACjC,MAAA,mBAAA,CAAoB,IAAG,KAAK,CAAA,CAAA;AAAA,KAChC;AACA,IAAA,EAAA,CAAG,UAAU,KAAO,EAAA,CAAA,qBAAA,EAAwB,KAAK,SAAU,CAAA,KAAK,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AACpE,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,wBAAwB,CAAA,CAAA;AAC5C,IAAA,EAAA,CAAG,UAAU,KAAO,EAAA,CAAA,mBAAA,EAAsB,kBAAkB,KAAM,CAAA,MAAM,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAC5E,IAAA,uBAAA,CAAwB,IAAG,KAAK,CAAA,CAAA;AAAA,GACpC;AACJ;;ACrBO,MAAM,aAAa,uBAAwB,CAAA;AAAA,EAC9C,OAAO,IAAA,GAAO,CAAG,EAAAA,gCAAA,CAAkB,SAAS,CAAA,eAAA,CAAA,CAAA;AAAA,EAC5C,WAAc,GAAA;AACV,IAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAAA,GACf;AAAA,EAEA,KAAA,CAAM,EAAe,EAAA,KAAA,EAAa,gBAAkC,EAAA;AAChE,IAAW,UAAA,CAAA,EAAA,EAAI,OAAO,gBAAgB,CAAA,CAAA;AACtC,IAAmB,kBAAA,CAAA,EAAA,EAAG,KAAM,EAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAAA,GACrD;AAAA;AAAA,EAGA,QAAA,CAAS,EAAe,EAAA,KAAA,EAAc,gBAAkC,EAAA;AAAA,GACxE;AAAA,EAEA,IAAA,CAAK,IAAe,KAAc,EAAA;AAC9B,IAAA,mBAAA,CAAoB,IAAG,KAAK,CAAA,CAAA;AAAA,GAChC;AACJ;;ACjBO,MAAM,qBAAqB,uBAAwB,CAAA;AAAA,EACtD,OAAO,IAAA,GAAO,CAAG,EAAAA,gCAAA,CAAkB,SAAS,CAAA,uBAAA,CAAA,CAAA;AAAA,EAC5C,WAAc,GAAA;AACV,IAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,GACd;AAAA,EACA,QAAA,CAAS,EAAe,EAAA,KAAA,EAAc,gBAA0C,EAAA;AAC5E,IAAM,MAAA,KAAA,GAAQ,eAAe,gBAAgB,CAAA,CAAA;AAC7C,IAAA,sBAAA,CAAuB,IAAG,KAAK,CAAA,CAAA;AAC/B,IAAG,IAAA,gBAAA,CAAiB,SAAS,MAAQ,EAAA;AACjC,MAAmB,kBAAA,CAAA,EAAA,EAAG,KAAM,EAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAAA,KACrD;AACA,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,6DAA6D,CAAA,CAAA;AACjF,IAAG,IAAA,gBAAA,CAAiB,SAAS,MAAQ,EAAA;AACjC,MAAA,mBAAA,CAAoB,IAAG,KAAK,CAAA,CAAA;AAAA,KAChC;AACA,IAAA,EAAA,CAAG,UAAU,KAAO,EAAA,CAAA,qBAAA,EAAwB,KAAK,SAAU,CAAA,KAAK,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AACpE,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,wBAAwB,CAAA,CAAA;AAC5C,IAAA,EAAA,CAAG,UAAU,KAAO,EAAA,CAAA,mBAAA,EAAsB,kBAAkB,KAAM,CAAA,MAAM,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAC5E,IAAA,uBAAA,CAAwB,IAAG,KAAK,CAAA,CAAA;AAAA,GACpC;AACJ;;ACPA,MAAM,iBAA8C,EACpD,CAAA;AAGA,cAAA,CAAe,kBAAmB,CAAA,IAAI,CAAI,GAAA,IAAI,kBAAmB,EAAA,CAAA;AACjE,cAAA,CAAe,QAAS,CAAA,IAAI,CAAI,GAAA,IAAI,QAAS,EAAA,CAAA;AAC7C,cAAA,CAAe,YAAa,CAAA,IAAI,CAAI,GAAA,IAAI,YAAa,EAAA,CAAA;AACrD,cAAA,CAAe,iBAAkB,CAAA,IAAI,CAAI,GAAA,IAAI,iBAAkB,EAAA,CAAA;AAC/D,cAAA,CAAe,OAAQ,CAAA,IAAI,CAAI,GAAA,IAAI,OAAQ,EAAA,CAAA;AAC3C,cAAA,CAAe,WAAY,CAAA,IAAI,CAAI,GAAA,IAAI,WAAY,EAAA,CAAA;AACnD,cAAA,CAAe,IAAK,CAAA,IAAI,CAAI,GAAA,IAAI,IAAK,EAAA,CAAA;AACrC,cAAA,CAAe,IAAK,CAAA,IAAI,CAAI,GAAA,IAAI,IAAK,EAAA,CAAA;AACrC,cAAA,CAAe,MAAO,CAAA,IAAI,CAAI,GAAA,IAAI,MAAO,EAAA,CAAA;AACzC,cAAA,CAAe,QAAS,CAAA,IAAI,CAAI,GAAA,IAAI,QAAS,EAAA,CAAA;AAC7C,cAAA,CAAe,SAAU,CAAA,IAAI,CAAI,GAAA,IAAI,SAAU,EAAA,CAAA;AAG/C,cAAA,CAAe,GAAGA,gCAAkB,CAAA,SAAS,CAAO,KAAA,CAAA,CAAA,GAAI,IAAI,MAAO,EAAA,CAAA;AACnE,cAAA,CAAe,GAAGc,8BAAgB,CAAA,SAAS,CAAW,SAAA,CAAA,CAAA,GAAI,IAAI,MAAO,EAAA,CAAA;AAGrE,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,YAAY,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAChF,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,OAAO,CAAI,GAAA,IAAI,YAAY,IAAI,CAAA,CAAA;AAC1E,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,YAAY,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAChF,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,UAAU,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAC9E,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,YAAY,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAChF,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,OAAO,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAC3E,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,aAAa,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AACjF,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,YAAY,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAChF,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,OAAO,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAC3E,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,SAAS,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAC7E,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,aAAa,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AACjF,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,UAAU,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAC9E,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,gBAAgB,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AACpF,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,YAAY,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAChF,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,YAAY,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAChF,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,OAAO,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAC3E,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,QAAQ,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAC5E,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,OAAO,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAC3E,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,OAAO,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAC3E,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,QAAQ,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAC5E,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,YAAY,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAChF,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,YAAY,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAChF,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,WAAW,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAC/E,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,WAAW,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAC/E,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,aAAa,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AACjF,cAAA,CAAe,GAAGA,8BAAgB,CAAA,SAAS,YAAY,CAAI,GAAA,IAAI,YAAY,KAAK,CAAA,CAAA;AAOzE,SAAS,YAAY,GAA4B,EAAA;AACpD,EAAM,MAAA,QAAA,GAAW,eAAe,GAAG,CAAA,CAAA;AACnC,EAAA,IAAG,CAAC,QAAU,EAAA;AACV,IAAA,MAAM,IAAI,KAAA,CAAM,CAA8B,2BAAA,EAAA,GAAG,CAAE,CAAA,CAAA,CAAA;AAAA,GACvD;AACA,EAAO,OAAA,QAAA,CAAA;AACX;;ACxEO,MAAM,kBAAqB,GAAA,08IAAA;;ACqB3B,MAAM,gCAAiC,CAAA;AAAA,EAC1C,YAAA,CAAA;AAAA,EACA,aAAA,CAAA;AAAA,EAEA,WAAA,CAAY,cAA2B,kBAA6B,EAAA;AAChE,IAAA,IAAA,CAAK,YAAe,GAAA,YAAA,CAAA;AACpB,IAAA,IAAA,CAAK,aAAgB,GAAA,2BAAA,CAA4B,IAAK,CAAA,YAAA,EAAa,kBAAkB,CAAA,CAAA;AAAA,GACzF;AAAA,EAEA,aAAc,CAAA,EAAA,EAAgB,YAAsB,EAAA,UAAA,EAAoB,IAAc,EAAA;AAClF,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,qBAAsB,CAAA,IAAA,CAAK,eAAe,YAAc,EAAA,UAAA,EAAY,IAAI,CAAC,CAAA,CAAA;AAAA,GAC7F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,2BAA4C,GAAA;AACxC,IAAA,MAAM,eAAe,IAAIE,yBAAA,CAAa,EAAE,MAAA,EAAQ,MAAM,CAAA,CAAA;AACtD,IAAa,YAAA,CAAA,WAAA,CAAYC,gCAAkB,CAAA,KAAA,EAAO,uBAAuB,CAAA,CAAA;AACzE,IAAa,YAAA,CAAA,WAAA,CAAYH,8BAAgB,CAAA,KAAA,EAAO,gBAAgB,CAAA,CAAA;AAChE,IAAa,YAAA,CAAA,WAAA,CAAYd,gCAAkB,CAAA,KAAA,EAAO,kBAAkB,CAAA,CAAA;AACpE,IAAO,OAAA,YAAA,CAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,yBAA0C,GAAA;AACtC,IAAA,MAAM,eAAe,IAAIgB,yBAAA,CAAa,EAAE,MAAA,EAAQ,MAAM,CAAA,CAAA;AACtD,IAAa,YAAA,CAAA,WAAA,CAAYC,gCAAkB,CAAA,KAAA,EAAO,uBAAuB,CAAA,CAAA;AACzE,IAAa,YAAA,CAAA,WAAA,CAAYH,8BAAgB,CAAA,KAAA,EAAO,gBAAgB,CAAA,CAAA;AAChE,IAAa,YAAA,CAAA,WAAA,CAAYD,8BAAgB,CAAA,KAAA,EAAO,gBAAgB,CAAA,CAAA;AAChE,IAAO,OAAA,YAAA,CAAA;AAAA,GACX;AAAA,EAEA,kBAAA,CAAmB,cAA4B,SAAmB,EAAA;AAE9D,IAAM,MAAA,SAAA,GAAY,IAAIV,uBAAA,CAAQ,iBAAkB,EAAA,CAAA;AAChD,IAAA,MAAM,UAAa,GAAA;AAAA,MACf,UAAA,EAAY,IAAIiB,uBAAA,CAAW,SAAS,CAAA;AAAA,KACxC,CAAA;AACA,IAAa,YAAA,CAAA,MAAA,CAAO,WAAW,UAAU,CAAA,CAAA;AAAA,GAC7C;AAAA,EAEA,kBAAA,CAAmB,cAA4B,SAAmB,EAAA;AAC9D,IAAM,MAAA,OAAA,GAAU,IAAIF,oBAAA,CAAQ,YAAY,CAAA,CAAA;AACxC,IAAA,MAAM,WAAW,OAAQ,CAAA,WAAA;AAAA,MAAY,IAAA,CAAK,cAAc,YAAa,EAAA;AAAA,MACjE,IAAA,CAAK,cAAc,OAAQ,EAAA;AAAA,MAAG,IAAK,CAAA,aAAA,CAAc,YAAa,EAAA,GAAI,QAAW,GAAA,KAAA,CAAA;AAAA,MAC7E,EAAC,QAAA,EAAU,QAAU,EAAA,qBAAA,EAAuB,IAAI,EAAA;AAAA,KAAC,CAAA;AACrD,IAAcG,gBAAA,CAAA,CAAA,EAAG,SAAS,CAAe,YAAA,CAAA,EAAA,IAAA,CAAK,UAAU,QAAU,EAAA,IAAA,EAAM,CAAC,CAAC,CAAA,CAAA;AAAA,GAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,OAAO,IAAA,CAAK,EAAgB,EAAA,KAAA,EAAe,YAAmB,EAAA;AAC1D,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,CAAuB,oBAAA,EAAAN,sBAAA,CAAU,aAAa,YAAa,CAAA,MAAM,CAAC,CAAE,CAAA,CAAA,CAAA;AACxF,IAAA,QAAA,CAAS,YAAY,CAAA,CAAE,OAAQ,CAAA,SAAU,OAAc,EAAA;AACnD,MAAI,IAAA,OAAO,YAAY,QAAY,IAAA,OAAA,CAAQ,UAAU,OAAO,OAAA,CAAQ,WAAW,QAAU,EAAA;AACrF,QAAA,MAAM,YAAY,OAAQ,CAAA,MAAA,CAAA;AAE1B,QAAM,MAAA,QAAA,GAAW,YAAY,SAAS,CAAA,CAAA;AACtC,QAAA,MAAM,cAAc,KAAQ,GAAA,CAAA,CAAA;AAE5B,QAAA,IAAA,CAAK,OAAO,MAAM;AACd,UAAS,QAAA,CAAA,KAAA,CAAM,EAAI,EAAA,WAAA,EAAa,OAAO,CAAA,CAAA;AACvC,UAAA,QAAA,CAAS,QAAS,CAAA,EAAA,EAAI,WAAa,EAAA,OAAA,EAAS,iCAAiC,IAAI,CAAA,CAAA;AAAA,SACpF,CAAA,CAAA;AAED,QAAA,IAAA,CAAK,MAAM,MAAM;AACb,UAAS,QAAA,CAAA,IAAA,CAAK,EAAI,EAAA,WAAA,EAAa,OAAO,CAAA,CAAA;AAAA,SACzC,CAAA,CAAA;AAAA,OACL;AAAA,KACH,CAAA,CAAA;AACD,IAAG,EAAA,CAAA,SAAA,CAAU,OAAO,CAAqB,kBAAA,EAAAA,sBAAA,CAAU,aAAa,YAAa,CAAA,MAAM,CAAC,CAAE,CAAA,CAAA,CAAA;AAAA,GAC1F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,gBAAA,CAAiB,cAAmB,SAAyB,EAAA;AACzD,IAAM,MAAA,EAAA,GAAK,IAAIK,uBAAA,CAAW,SAAS,CAAA,CAAA;AAEnC,IAAA,EAAA,CAAG,SAAS,UAAU,CAAA,CAAA;AACtB,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,mBAAmB,CAAA,CAAA;AACnC,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,oCAAsC,CAAA,CAAA;AACtD,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,0CAA4C,CAAA,CAAA;AAC5D,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,iCAAiC,CAAA,CAAA;AACjD,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,wFAA0F,CAAA,CAAA;AAC1G,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,+CAA+C,CAAA,CAAA;AAC/D,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,GAAG,CAAA,CAAA;AACnB,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,QAAQ,CAAA,CAAA;AACxB,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,0DAA4D,CAAA,CAAA;AAC5E,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,GAAG,CAAA,CAAA;AACnB,IAAA,EAAA,CAAG,SAAU,EAAA,CAAA;AAEb,IAAA,EAAA,CAAG,SAAS,cAAc,CAAA,CAAA;AAC1B,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,kCAAkC,CAAA,CAAA;AAClD,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,EAAE,CAAA,CAAA;AAElB,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,YAAY,CAAA,CAAA;AAC5B,IAAa,YAAA,CAAA,EAAA,EAAI,CAAG,EAAA,IAAA,CAAK,aAAa,CAAA,CAAA;AACtC,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,EAAE,CAAA,CAAA;AAElB,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,cAAc,CAAA,CAAA;AAC9B,IAAY,WAAA,CAAA,EAAA,EAAI,CAAG,EAAA,IAAA,CAAK,aAAa,CAAA,CAAA;AAErC,IAAiC,gCAAA,CAAA,IAAA,CAAK,EAAI,EAAA,CAAA,EAAG,YAAY,CAAA,CAAA;AAEzD,IAAA,WAAA,CAAY,IAAI,CAAC,CAAA,CAAA;AACjB,IAAA,EAAA,CAAG,SAAU,EAAA,CAAA;AAAA,GACjB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,SAAmB,EAAA;AAC3B,IAAA,aAAA,CAAc,CAAG,EAAA,SAAS,CAAI,CAAA,EAAA,WAAW,CAAE,CAAA,CAAA,CAAA;AAC3C,IAAA,MAAM,aAAgB,GAAA,MAAA,CAAO,IAAK,CAAA,kBAAA,EAAoB,QAAQ,CAAA,CAAA;AAC9D,IAAM,MAAA,CAAA,GAAI,IAAIE,eAAS,EAAA,CAAA;AACvB,IAAA,CAAA,CAAE,KAAK,aAAa,CAAA,CAAA;AACpB,IAAA,CAAA,CAAE,KAAK,IAAI,CAAA,CAAA;AACX,IAAE,CAAA,CAAA,IAAA;AAAA,MACEC,eAAI,CAAE,CAAA;AAAA,QACF,KAAO,EAAA,CAAA;AAAA,QACP,CAAG,EAAA,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA;AAAA,OACjC,CAAA;AAAA,KACL,CAAA;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,SAAmB,EAAA;AAC7B,IAAA,MAAM,WAAc,GAAA;AAAA,MAChB,MAAQ,EAAA,WAAA;AAAA,MACR,SAAW,EAAA,OAAA;AAAA,MACX,aAAe,EAAA,6CAAA;AAAA,MACf,SAAW,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,KAAO,EAAA,KAAA;AAAA,OACX;AAAA,MACA,UAAY,EAAA;AAAA,QACR,gBAAA;AAAA,QACA,UAAA;AAAA,QACA,cAAA;AAAA,OACJ;AAAA,MACA,cAAgB,EAAA;AAAA,QACZ,OAAS,EAAA,QAAA;AAAA,QACT,UAAY,EAAA,QAAA;AAAA,OAChB;AAAA,MACA,iBAAmB,EAAA;AAAA,QACf,aAAe,EAAA,SAAA;AAAA,QACf,SAAW,EAAA,SAAA;AAAA,QACX,YAAc,EAAA,QAAA;AAAA,QACd,iBAAmB,EAAA,QAAA;AAAA,OACvB;AAAA,MACA,SAAY,EAAA;AAAA,QACR,OAAU,EAAA,8BAAA;AAAA,OACd;AAAA,KACJ,CAAA;AAEA,IAAcF,gBAAA,CAAA,CAAA,EAAG,SAAS,CAAgB,aAAA,CAAA,EAAA,IAAA,CAAK,UAAU,WAAa,EAAA,IAAA,EAAM,CAAC,CAAC,CAAA,CAAA;AAAA,GAClF;AAAA,EAEA,OAAA,CAAQ,YAA8B,EAAA,SAAA,EAAmB,OAA8B,EAAA;AAEnF,IAAA,aAAA,CAAc,SAAS,CAAA,CAAA;AAGvB,IAAK,IAAA,CAAA,kBAAA,CAAmB,IAAK,CAAA,YAAA,EAAc,SAAS,CAAA,CAAA;AAGpD,IAAK,IAAA,CAAA,kBAAA,CAAmB,IAAK,CAAA,YAAA,EAAc,SAAS,CAAA,CAAA;AACpD,IAAA,IAAA,CAAK,kBAAmB,CAAA,IAAA,CAAK,2BAA4B,EAAA,EAAG,SAAS,CAAA,CAAA;AACrE,IAAA,IAAA,CAAK,kBAAmB,CAAA,IAAA,CAAK,yBAA0B,EAAA,EAAG,SAAS,CAAA,CAAA;AAGnE,IAAA,MAAM,oBAAoB,YAAa,CAAA,YAAA,CAAa,SAAS,YAAa,CAAA,MAAA,KAAW,YAAY,CAAA,CAAA;AAGjG,IAAK,IAAA,CAAA,eAAA,CAAgB,mBAAmB,SAAS,CAAA,CAAA;AAGjD,IAAI,IAAA,CAAC,SAAS,eAAiB,EAAA;AAC3B,MAAA,IAAA,CAAK,YAAY,SAAS,CAAA,CAAA;AAAA,KAC9B;AAGA,IAAI,IAAA,CAAC,SAAS,aAAe,EAAA;AACzB,MAAA,IAAA,CAAK,cAAc,SAAS,CAAA,CAAA;AAC5B,MAAK,IAAA,CAAA,gBAAA,CAAiB,mBAAmB,SAAS,CAAA,CAAA;AAAA,KACtD;AAAA,GACJ;AAAA,EAEA,eAAA,CAAgB,cAAmB,SAAmB,EAAA;AAClD,IAAM,MAAA,EAAA,GAAK,IAAID,uBAAA,CAAW,SAAS,CAAA,CAAA;AAEnC,IAAA,EAAA,CAAG,SAAS,aAAa,CAAA,CAAA;AACzB,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,kCAAkC,CAAA,CAAA;AAClD,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,EAAE,CAAA,CAAA;AAElB,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,YAAY,CAAA,CAAA;AAC5B,IAAA,EAAA,CAAG,UAAU,CAAG,EAAA,CAAA,kCAAA,EAAqC,KAAK,aAAc,CAAA,YAAA,EAAc,CAAI,EAAA,CAAA,CAAA,CAAA;AAC1F,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,4BAA8B,CAAA,CAAA;AAC9C,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,4BAA8B,CAAA,CAAA;AAC9C,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,gEAAkE,CAAA,CAAA;AAElF,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,EAAE,CAAA,CAAA;AAElB,IAAA,MAAM,eAAkB,GAAA,YAAA,CAAA;AAExB,IAAA,MAAM,gBAAoB,QAAS,CAAA,eAAe,EAAE,MAAO,CAAA,SAAU,KAAK,CAAG,EAAA;AACzE,MAAA,IAAI,KAAK,CAAE,CAAA,MAAA,KAAW,CAAG,EAAApB,gCAAA,CAAkB,SAAS,CAAsB,kBAAA,CAAA,EAAA;AACtE,QAAA,GAAA,CAAI,IAAK,CAAA;AAAA,UACL,MAAM,CAAE,CAAA,IAAA;AAAA,UACR,MAAM,CAAE,CAAA,IAAA;AAAA,SACX,CAAA,CAAA;AAAA,OACL;AACA,MAAO,OAAA,GAAA,CAAA;AAAA,KACX,EAAG,EAAE,CAAA,CAAA;AAEL,IAAA,MAAM,mBAAuB,QAAS,CAAA,eAAe,EAAE,MAAO,CAAA,SAAU,KAAK,CAAG,EAAA;AAC5E,MAAI,IAAA,CAAA,IAAK,EAAE,MAAW,KAAA,CAAA,EAAGA,iCAAkB,SAAS,CAAA,sBAAA,CAAA,IAA4B,EAAE,SAAW,EAAA;AACzF,QAAA,GAAA,CAAI,IAAK,CAAA;AAAA,UACL,MAAM,CAAE,CAAA,YAAA;AAAA,UACR,MAAM,CAAE,CAAA,SAAA;AAAA,SACX,CAAA,CAAA;AAAA,OACL;AACA,MAAO,OAAA,GAAA,CAAA;AAAA,KACX,EAAG,EAAE,CAAA,CAAA;AAEL,IAAA,MAAM,cAAkB,QAAS,CAAA,eAAe,EAAE,MAAO,CAAA,SAAU,KAAK,CAAG,EAAA;AACvE,MAAI,IAAA,CAAA,IAAK,EAAE,MAAW,KAAA,CAAA,EAAGA,iCAAkB,SAAS,CAAA,iBAAA,CAAA,IAAuB,EAAE,SAAW,EAAA;AACpF,QAAA,GAAA,CAAI,IAAK,CAAA;AAAA,UACL,MAAM,CAAE,CAAA,YAAA;AAAA,UACR,MAAM,CAAE,CAAA,SAAA;AAAA,SACX,CAAA,CAAA;AAAA,OACL;AACA,MAAO,OAAA,GAAA,CAAA;AAAA,KACX,EAAG,EAAE,CAAA,CAAA;AAEL,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,aAAa,CAAA,CAAA;AAC7B,IAAc,aAAA,CAAA,OAAA,CAAQ,CAAC,GAAa,KAAA;AAChC,MAAK,IAAA,CAAA,aAAA,CAAc,IAAI,CAAG,EAAA,GAAA,CAAI,IAAI,CAAI,CAAA,EAAA,KAAA,EAAO,GAAI,CAAA,IAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,KACjE,CAAA,CAAA;AACD,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,EAAE,CAAA,CAAA;AAElB,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,iBAAiB,CAAA,CAAA;AACjC,IAAiB,gBAAA,CAAA,OAAA,CAAQ,CAAC,GAAa,KAAA;AACnC,MAAK,IAAA,CAAA,aAAA,CAAc,IAAI,CAAG,EAAA,GAAA,CAAI,IAAI,CAAI,CAAA,EAAA,SAAA,EAAW,GAAI,CAAA,IAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,KACrE,CAAA,CAAA;AACD,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,EAAE,CAAA,CAAA;AAElB,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,YAAY,CAAA,CAAA;AAC5B,IAAY,WAAA,CAAA,OAAA,CAAQ,CAAC,GAAa,KAAA;AAC9B,MAAK,IAAA,CAAA,aAAA,CAAc,IAAI,CAAG,EAAA,GAAA,CAAI,IAAI,CAAI,CAAA,EAAA,SAAA,EAAW,GAAI,CAAA,IAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,KACrE,CAAA,CAAA;AACD,IAAG,EAAA,CAAA,SAAA,CAAU,GAAG,EAAE,CAAA,CAAA;AAElB,IAAA,EAAA,CAAG,SAAU,EAAA,CAAA;AAAA,GACjB;AACJ;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../src/drafting/Boolean/index.ts","../src/drafting/DateTime/index.ts","../src/drafting/Double/format.ts","../src/drafting/Double/index.ts","../src/drafting/Integer/format.ts","../src/drafting/Integer/index.ts","../src/drafting/Long/index.ts","../src/drafting/MonetaryAmount/currencycode.ts","../src/drafting/MonetaryAmount/index.ts","../src/drafting/String/index.ts","../src/drafting/index.ts","../src/TemplateMarkNodes.ts","../src/utils.ts","../src/TypeScriptCompilationContext.ts","../src/runtime/declarations.ts","../src/TypeScriptToJavaScriptCompiler.ts","../src/model-gen/org.accordproject.templatemark@0.5.0.ts","../src/TemplateMarkToJavaScriptCompiler.ts","../src/TypeScriptRuntime.ts","../src/TemplateMarkInterpreter.ts"],"sourcesContent":["/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for Boolean\n * @param {Boolean} value the Boolean\n * @returns {string} the text\n */\nexport default function booleanDrafter(value:boolean) : string {\n if (value) {\n return 'true';\n } else {\n return 'false';\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\ndayjs.extend(utc);\n\n/**\n * Creates a drafter for DateTime\n * @param {string} value the DateTime\n * @param {object} format the the format\n * @returns {string} the text\n */\nexport default function dateTimeDrafter(value:string,format:string) : string {\n const f = format ? format : 'MM/DD/YYYY';\n return dayjs.utc(value).format(f);\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for Double\n * @param {number} value - the double\n * @returns {string} the text\n */\nexport function draftDoubleIEEE(value:number) : string {\n if (Math.floor(value) === value) {\n return (new Number(value)).toFixed(1); // Make sure there is always decimal point\n } else {\n return '' + value;\n }\n}\n\n/**\n * Creates a drafter for a formatted Double\n * @param {number} value - the Double\n * @param {string} format - the format\n * @returns {object} the parser\n */\nexport function draftDoubleFormat(value:number,format:string) : string {\n return format.replace(/0(.)0((.)(0+))?/gi, function(_a,sep1,_b,sep2,digits){\n const len = digits ? digits.length : 0;\n const vs = value.toFixed(len);\n let res = '';\n if (sep2) {\n const d = vs.substring(vs.length - len);\n res += sep2 + d;\n }\n let i = vs.substring(0,vs.length - (len === 0 ? 0 : len+1));\n while (i.length > 3) {\n res = sep1 + i.substring(i.length - 3) + res;\n i = i.substring(0, i.length - 3);\n }\n return i + res;\n });\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { draftDoubleIEEE } from './format';\nimport { draftDoubleFormat } from './format';\n\n/**\n * Creates a drafter for a double\n * @param {number} value - the Double\n * @param {string} format - the format\n * @returns {string} the text\n */\nexport default function doubleDrafter(value:number,format:string) : string {\n if (format) {\n return draftDoubleFormat(value,format);\n } else {\n return draftDoubleIEEE(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for Integer\n * @param {number} value - the integer\n * @returns {string} the text\n */\nexport function draftInteger(value:number) : string {\n return '' + value;\n}\n\n/**\n * Creates a drafter for a formatted Integer\n * @param {number} value - the Integer\n * @param {string} format - the format\n * @returns {object} the parser\n */\nexport function draftIntegerFormat(value:number,format:string) : string {\n return format.replace(/0(.)0/gi, function(_a,sep1){\n const vs = value.toFixed(0);\n let res = '';\n let i = vs.substring(0,vs.length);\n while (i.length > 3) {\n res = sep1 + i.substring(i.length - 3) + res;\n i = i.substring(0, i.length - 3);\n }\n return i + res;\n });\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'use strict';\n\nimport { draftInteger } from './format';\nimport { draftIntegerFormat } from './format';\n\n/**\n * Creates a drafter for an Integer\n * @param {number} value - the integer\n * @param {string} format - the format\n * @returns {string} the text\n */\nexport default function integerDrafter(value:number,format:string) : string {\n if (format) {\n return draftIntegerFormat(value,format);\n } else {\n return draftInteger(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { draftInteger as draftLong } from '../Integer/format';\nimport { draftIntegerFormat as draftLongFormat } from '../Integer/format';\n\n/**\n * Creates a drafter for a long\n * @param {number} value - the Long\n * @param {string} format - the format\n * @returns {string} the text\n */\nexport default function longDrafter(value:number,format:string) : string {\n if (format) {\n return draftLongFormat(value,format);\n } else {\n return draftLong(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport enum CurrencyCode {\n 'USD' = '$',\n 'EUR'= '€',\n 'JPY'= '¥',\n 'GBP'= '£',\n 'AUD'= 'A$',\n 'CAD'= 'C$',\n 'CHF'= 'CHF',\n 'CNY'= '元',\n 'HKD'= 'HK$',\n 'NZD'= 'NZ$',\n 'KRW'= '₩',\n 'SGD'= 'S$',\n 'MXN'= 'MEX$',\n 'INR'= '₹',\n 'RUB'= '₽',\n 'ZAR'= 'R',\n 'TRY'= '₺',\n 'BRL'= 'R$',\n 'TWD'= 'NT$',\n 'PLN'= 'zł',\n 'THB'= '฿',\n 'IDR'= 'Rp',\n 'HUF'= 'Ft',\n 'CZK'= 'Kč',\n 'ILS'= '₪',\n 'CLP'= 'CLP$',\n 'PHP'= '₱',\n 'AED'= 'د.إ',\n 'COP'= 'COL$',\n 'SAR'= '﷼',\n 'MYR'= 'RM',\n 'RON'= 'L',\n 'BGN'= 'лв.'\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { draftDoubleIEEE } from '../Double/format';\nimport { draftDoubleFormat } from '../Double/format';\nimport { CurrencyCode } from './currencycode';\n\ntype MonetaryAmount = {\n doubleValue: number;\n currencyCode: string;\n};\n\n/**\n * Creates a drafter for monetary amount with no format\n * @param {object} value the monetary amount\n * @returns {string} the text\n */\nfunction monetaryAmountDefaultDrafter(value:MonetaryAmount) {\n return '' + draftDoubleIEEE(value.doubleValue) + ' ' + value.currencyCode;\n}\n\n/**\n * Symbol from a currency code\n * @param {string} c - the currency code\n * @returns {string} the symbol\n */\nfunction codeSymbol(c:string) : string {\n const index: number = Object.keys(CurrencyCode).indexOf(c);\n if(index >=0) {\n return Object.values(CurrencyCode)[index];\n }\n else {\n return c;\n }\n}\n\n/**\n * Creates a drafter for monetary amount with a given format\n * @param {object} value the monetary amount\n * @param {string} format the format\n * @returns {string} the text\n */\nfunction monetaryAmountFormatDrafter(value:MonetaryAmount,format:string) : string {\n return draftDoubleFormat(value.doubleValue,\n format\n .replace(/K/gi,codeSymbol(value.currencyCode))\n .replace(/CCC/gi,value.currencyCode));\n}\n\n/**\n * Creates a drafter for a monetary amount\n * @param {object} value the monetary amount\n * @param {string} format the format\n * @returns {string} the text\n */\nexport default function monetaryAmountDrafter(value:MonetaryAmount,format:string) : string {\n if (format) {\n return monetaryAmountFormatDrafter(value,format);\n } else {\n return monetaryAmountDefaultDrafter(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for String\n * @param {object} value the String\n * @returns {string} the text\n */\nexport default function stringDrafter(value:string) : string {\n return value;\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport booleanDrafter from './Boolean';\nimport dateTimeDrafter from './DateTime';\nimport doubleDrafter from './Double';\nimport integerDrafter from './Integer';\nimport longDrafter from './Long';\nimport monetaryAmountDrafter from './MonetaryAmount';\nimport stringDrafter from './String';\n\nexport function getDrafter(typeName: string) : ((value:any, format:string) => string)|null {\n switch(typeName) {\n case 'Boolean': return booleanDrafter;\n case 'DateTime': return dateTimeDrafter;\n case 'Double': return doubleDrafter;\n case 'Integer': return integerDrafter;\n case 'Long': return longDrafter;\n case 'org.accordproject.money@0.3.0.MonetaryAmount': return monetaryAmountDrafter;\n case 'String': return stringDrafter;\n default: return null;\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\n\n// use to create agreementmark from templatemark\nexport const TEMPLATEMARK_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.(\\w+)Definition$/;\nexport const FORMULA_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.FormulaDefinition$/;\nexport const VARIABLE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.VariableDefinition$/;\nexport const CONDITIONAL_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ConditionalDefinition$/;\nexport const ENUM_VARIABLE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.EnumVariableDefinition$/;\nexport const FORMATTED_VARIABLE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.FormattedVariableDefinition$/;\nexport const WITH_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.WithDefinition$/;\nexport const LISTBLOCK_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ListBlockDefinition$/;\nexport const JOIN_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.JoinDefinition$/;\nexport const OPTIONAL_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.OptionalDefinition$/;\nexport const CLAUSE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ClauseDefinition$/;\nexport const CONTRACT_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ContractDefinition$/;\n\nexport type TemplateData = Record<string, unknown>;\n\n/**\n * TemplateMark nodes that implicity change the data access scope\n * by specifying the name of a property on the node.\n */\nexport const NAVIGATION_NODES = [\n `${TemplateMarkModel.NAMESPACE}.ListBlockDefinition`,\n `${TemplateMarkModel.NAMESPACE}.WithDefinition`,\n `${TemplateMarkModel.NAMESPACE}.JoinDefinition`,\n `${TemplateMarkModel.NAMESPACE}.OptionalDefinition`,\n `${TemplateMarkModel.NAMESPACE}.ClauseDefinition`\n];","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ClassDeclaration, Introspector, ModelManager, Property } from '@accordproject/concerto-core';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\nimport { templatemarkutil } from '@accordproject/markdown-template';\n\nimport { existsSync, mkdirSync, rmSync } from 'fs';\nimport traverse from 'traverse';\n\nexport function ensureDirSync(path:string) {\n !existsSync(path) && mkdirSync(path, { recursive: true });\n}\n\nexport function removeSync(path:string) {\n rmSync(path, { recursive: true, force: true });\n}\n\nexport function writeFunctionToString(templateClass:ClassDeclaration, functionName: string, returnType: string, code: string): string {\n let result = '';\n result += '/// ---cut---\\n';\n result += `export function ${functionName}(data:TemplateModel.I${templateClass.getName()}, library:any, options:GenerationOptions) : ${returnType} {\\n`;\n result += ' const now = dayjs(options?.now);\\n';\n result += ' const locale = options?.locale;\\n';\n templateClass.getProperties().forEach((p: Property) => {\n result += ` const ${p.getName()} = data.${p.getName()};\\n`;\n });\n result += ' ' + code.trim() + '\\n';\n result += '}\\n';\n result += '\\n';\n\n return result;\n}\n\nexport function nameUserCode(templateMarkDom: any) {\n return traverse(templateMarkDom).map(function (x) {\n if (x && ((x.$class === `${TemplateMarkModel.NAMESPACE}.ConditionalDefinition` && x.condition) ||\n (`${TemplateMarkModel.NAMESPACE}.ClauseDefinition` && x.condition))) {\n x.functionName = `condition_${this.path.join('_')}`;\n }\n this.update(x);\n });\n}\n\nexport function getTemplateClassDeclaration(modelManager: ModelManager, templateConceptFqn?: string) : ClassDeclaration {\n const introspector = new Introspector(modelManager);\n try {\n return templatemarkutil.findTemplateConcept(introspector, 'clause', templateConceptFqn);\n }\n catch(err) {\n console.log(err);\n throw err;\n }\n}\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ClassDeclaration, ModelManager } from '@accordproject/concerto-core';\nimport { CodeGen } from '@accordproject/concerto-codegen';\nimport { InMemoryWriter } from '@accordproject/concerto-util';\nimport { getTemplateClassDeclaration } from './utils';\n\n/**\n * This class creates the typescript types\n * required to compile Typescript expressions (used in\n * formulae, conditions and clauses) to JavaScript. It uses\n * these to create a compilation context for '@typescript/twoslash'\n * which is used to compile the typescript code.\n */\nexport class TypeScriptCompilationContext {\n\n modelManager:ModelManager;\n templateClass:ClassDeclaration;\n\n constructor(modelManager:ModelManager,templateConceptFqn?: string) {\n this.modelManager = modelManager;\n this.templateClass = getTemplateClassDeclaration(this.modelManager, templateConceptFqn);\n }\n\n getTypeScriptFiles() : Record<string,string> {\n const result:Record<string,string> = {};\n\n const visitor = new CodeGen.TypescriptVisitor();\n const writer = new InMemoryWriter();\n\n const params = {\n fileWriter: writer\n };\n this.modelManager.accept(visitor, params);\n writer.getFilesInMemory().forEach( (value, key) => {\n result[key] = value;\n });\n return result;\n }\n\n getCompilationContext() : string {\n const files = this.getTypeScriptFiles();\n\n let result = '';\n\n Object.keys(files).forEach( key => {\n const content = files[key];\n result += `\n// @filename: ${key}\n${content}\n`;\n });\n\n result += `\n// @filename: code.ts\nimport * as TemplateModel from './${this.templateClass.getNamespace()}';\nimport dayjs from 'dayjs';\nimport jp from 'jsonpath';\n\ntype GenerationOptions = {\n now?:string,\n locale?:string\n}\n`;\n return result;\n }\n}","\n/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable quotes */\n// file generated by ./scripts/updateRuntimeDependencies.js\n\n\nexport const DAYJS_BASE64 = 'Ly8vIDxyZWZlcmVuY2UgcGF0aD0iLi9sb2NhbGUvaW5kZXguZC50cyIgLz4KCmV4cG9ydCA9IGRheWpzOwoKZGVjbGFyZSBmdW5jdGlvbiBkYXlqcyAoZGF0ZT86IGRheWpzLkNvbmZpZ1R5cGUpOiBkYXlqcy5EYXlqcwoKZGVjbGFyZSBmdW5jdGlvbiBkYXlqcyAoZGF0ZT86IGRheWpzLkNvbmZpZ1R5cGUsIGZvcm1hdD86IGRheWpzLk9wdGlvblR5cGUsIHN0cmljdD86IGJvb2xlYW4pOiBkYXlqcy5EYXlqcwoKZGVjbGFyZSBmdW5jdGlvbiBkYXlqcyAoZGF0ZT86IGRheWpzLkNvbmZpZ1R5cGUsIGZvcm1hdD86IGRheWpzLk9wdGlvblR5cGUsIGxvY2FsZT86IHN0cmluZywgc3RyaWN0PzogYm9vbGVhbik6IGRheWpzLkRheWpzCgpkZWNsYXJlIG5hbWVzcGFjZSBkYXlqcyB7CiAgaW50ZXJmYWNlIENvbmZpZ1R5cGVNYXAgewogICAgZGVmYXVsdDogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSB8IERheWpzIHwgbnVsbCB8IHVuZGVmaW5lZAogIH0KCiAgZXhwb3J0IHR5cGUgQ29uZmlnVHlwZSA9IENvbmZpZ1R5cGVNYXBba2V5b2YgQ29uZmlnVHlwZU1hcF0KCiAgZXhwb3J0IGludGVyZmFjZSBGb3JtYXRPYmplY3QgeyBsb2NhbGU/OiBzdHJpbmcsIGZvcm1hdD86IHN0cmluZywgdXRjPzogYm9vbGVhbiB9CgogIGV4cG9ydCB0eXBlIE9wdGlvblR5cGUgPSBGb3JtYXRPYmplY3QgfCBzdHJpbmcgfCBzdHJpbmdbXQoKICBleHBvcnQgdHlwZSBVbml0VHlwZVNob3J0ID0gJ2QnIHwgJ0QnIHwgJ00nIHwgJ3knIHwgJ2gnIHwgJ20nIHwgJ3MnIHwgJ21zJwoKICBleHBvcnQgdHlwZSBVbml0VHlwZUxvbmcgPSAnbWlsbGlzZWNvbmQnIHwgJ3NlY29uZCcgfCAnbWludXRlJyB8ICdob3VyJyB8ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJyB8ICdkYXRlJwoKICBleHBvcnQgdHlwZSBVbml0VHlwZUxvbmdQbHVyYWwgPSAnbWlsbGlzZWNvbmRzJyB8ICdzZWNvbmRzJyB8ICdtaW51dGVzJyB8ICdob3VycycgfCAnZGF5cycgfCAnbW9udGhzJyB8ICd5ZWFycycgfCAnZGF0ZXMnCiAgCiAgZXhwb3J0IHR5cGUgVW5pdFR5cGUgPSBVbml0VHlwZUxvbmcgfCBVbml0VHlwZUxvbmdQbHVyYWwgfCBVbml0VHlwZVNob3J0OwoKICBleHBvcnQgdHlwZSBPcFVuaXRUeXBlID0gVW5pdFR5cGUgfCAid2VlayIgfCAid2Vla3MiIHwgJ3cnOwogIGV4cG9ydCB0eXBlIFFVbml0VHlwZSA9IFVuaXRUeXBlIHwgInF1YXJ0ZXIiIHwgInF1YXJ0ZXJzIiB8ICdRJzsKICBleHBvcnQgdHlwZSBNYW5pcHVsYXRlVHlwZSA9IEV4Y2x1ZGU8T3BVbml0VHlwZSwgJ2RhdGUnIHwgJ2RhdGVzJz47CiAgY2xhc3MgRGF5anMgewogICAgY29uc3RydWN0b3IgKGNvbmZpZz86IENvbmZpZ1R5cGUpCiAgICAvKioKICAgICAqIEFsbCBEYXkuanMgb2JqZWN0cyBhcmUgaW1tdXRhYmxlLiBTdGlsbCwgYGRheWpzI2Nsb25lYCBjYW4gY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGlmIHlvdSBuZWVkIG9uZS4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5jbG9uZSgpLy8gPT4gRGF5anMKICAgICAqIGRheWpzKGRheWpzKCcyMDE5LTAxLTI1JykpIC8vIHBhc3NpbmcgYSBEYXlqcyBvYmplY3QgdG8gYSBjb25zdHJ1Y3RvciB3aWxsIGFsc28gY2xvbmUgaXQKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vcGFyc2UvZGF5anMtY2xvbmUKICAgICAqLwogICAgY2xvbmUoKTogRGF5anMKICAgIC8qKgogICAgICogVGhpcyByZXR1cm5zIGEgYGJvb2xlYW5gIGluZGljYXRpbmcgd2hldGhlciB0aGUgRGF5LmpzIG9iamVjdCBjb250YWlucyBhIHZhbGlkIGRhdGUgb3Igbm90LgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmlzVmFsaWQoKS8vID0+IGJvb2xlYW4KICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vcGFyc2UvaXMtdmFsaWQKICAgICAqLwogICAgaXNWYWxpZCgpOiBib29sZWFuCiAgICAvKioKICAgICAqIEdldCB0aGUgeWVhci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS55ZWFyKCkvLyA9PiAyMDIwCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQveWVhcgogICAgICovCiAgICB5ZWFyKCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHllYXIuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkueWVhcigyMDAwKS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQveWVhcgogICAgICovCiAgICB5ZWFyKHZhbHVlOiBudW1iZXIpOiBEYXlqcwogICAgLyoqCiAgICAgKiBHZXQgdGhlIG1vbnRoLgogICAgICoKICAgICAqIE1vbnRocyBhcmUgemVybyBpbmRleGVkLCBzbyBKYW51YXJ5IGlzIG1vbnRoIDAuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkubW9udGgoKS8vID0+IDAtMTEKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9tb250aAogICAgICovCiAgICBtb250aCgpOiBudW1iZXIKICAgIC8qKgogICAgICogU2V0IHRoZSBtb250aC4KICAgICAqCiAgICAgKiBNb250aHMgYXJlIHplcm8gaW5kZXhlZCwgc28gSmFudWFyeSBpcyBtb250aCAwLgogICAgICoKICAgICAqIEFjY2VwdHMgbnVtYmVycyBmcm9tIDAgdG8gMTEuIElmIHRoZSByYW5nZSBpcyBleGNlZWRlZCwgaXQgd2lsbCBidWJibGUgdXAgdG8gdGhlIG5leHQgeWVhci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5tb250aCgwKS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvbW9udGgKICAgICAqLwogICAgbW9udGgodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgZGF0ZSBvZiB0aGUgbW9udGguCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuZGF0ZSgpLy8gPT4gMS0zMQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L2RhdGUKICAgICAqLwogICAgZGF0ZSgpOiBudW1iZXIKICAgIC8qKgogICAgICogU2V0IHRoZSBkYXRlIG9mIHRoZSBtb250aC4KICAgICAqCiAgICAgKiBBY2NlcHRzIG51bWJlcnMgZnJvbSAxIHRvIDMxLiBJZiB0aGUgcmFuZ2UgaXMgZXhjZWVkZWQsIGl0IHdpbGwgYnViYmxlIHVwIHRvIHRoZSBuZXh0IG1vbnRocy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5kYXRlKDEpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9kYXRlCiAgICAgKi8KICAgIGRhdGUodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgZGF5IG9mIHRoZSB3ZWVrLgogICAgICoKICAgICAqIFJldHVybnMgbnVtYmVycyBmcm9tIDAgKFN1bmRheSkgdG8gNiAoU2F0dXJkYXkpLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmRheSgpLy8gMC02CiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvZGF5CiAgICAgKi8KICAgIGRheSgpOiBudW1iZXIKICAgIC8qKgogICAgICogU2V0IHRoZSBkYXkgb2YgdGhlIHdlZWsuCiAgICAgKgogICAgICogQWNjZXB0cyBudW1iZXJzIGZyb20gMCAoU3VuZGF5KSB0byA2IChTYXR1cmRheSkuIElmIHRoZSByYW5nZSBpcyBleGNlZWRlZCwgaXQgd2lsbCBidWJibGUgdXAgdG8gbmV4dCB3ZWVrcy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5kYXkoMCkvLyA9PiBEYXlqcwogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L2RheQogICAgICovCiAgICBkYXkodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgaG91ci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5ob3VyKCkvLyA9PiAwLTIzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvaG91cgogICAgICovCiAgICBob3VyKCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGhvdXIuCiAgICAgKgogICAgICogQWNjZXB0cyBudW1iZXJzIGZyb20gMCB0byAyMy4gSWYgdGhlIHJhbmdlIGlzIGV4Y2VlZGVkLCBpdCB3aWxsIGJ1YmJsZSB1cCB0byB0aGUgbmV4dCBkYXkuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuaG91cigxMikvLyA9PiBEYXlqcwogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L2hvdXIKICAgICAqLwogICAgaG91cih2YWx1ZTogbnVtYmVyKTogRGF5anMKICAgIC8qKgogICAgICogR2V0IHRoZSBtaW51dGVzLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLm1pbnV0ZSgpLy8gPT4gMC01OQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L21pbnV0ZQogICAgICovCiAgICBtaW51dGUoKTogbnVtYmVyCiAgICAvKioKICAgICAqIFNldCB0aGUgbWludXRlcy4KICAgICAqCiAgICAgKiBBY2NlcHRzIG51bWJlcnMgZnJvbSAwIHRvIDU5LiBJZiB0aGUgcmFuZ2UgaXMgZXhjZWVkZWQsIGl0IHdpbGwgYnViYmxlIHVwIHRvIHRoZSBuZXh0IGhvdXIuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkubWludXRlKDU5KS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvbWludXRlCiAgICAgKi8KICAgIG1pbnV0ZSh2YWx1ZTogbnVtYmVyKTogRGF5anMKICAgIC8qKgogICAgICogR2V0IHRoZSBzZWNvbmRzLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLnNlY29uZCgpLy8gPT4gMC01OQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L3NlY29uZAogICAgICovCiAgICBzZWNvbmQoKTogbnVtYmVyCiAgICAvKioKICAgICAqIFNldCB0aGUgc2Vjb25kcy4KICAgICAqCiAgICAgKiBBY2NlcHRzIG51bWJlcnMgZnJvbSAwIHRvIDU5LiBJZiB0aGUgcmFuZ2UgaXMgZXhjZWVkZWQsIGl0IHdpbGwgYnViYmxlIHVwIHRvIHRoZSBuZXh0IG1pbnV0ZXMuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuc2Vjb25kKDEpLy8gRGF5anMKICAgICAqIGBgYAogICAgICovCiAgICBzZWNvbmQodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgbWlsbGlzZWNvbmRzLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLm1pbGxpc2Vjb25kKCkvLyA9PiAwLTk5OQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L21pbGxpc2Vjb25kCiAgICAgKi8KICAgIG1pbGxpc2Vjb25kKCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBTZXQgdGhlIG1pbGxpc2Vjb25kcy4KICAgICAqCiAgICAgKiBBY2NlcHRzIG51bWJlcnMgZnJvbSAwIHRvIDk5OS4gSWYgdGhlIHJhbmdlIGlzIGV4Y2VlZGVkLCBpdCB3aWxsIGJ1YmJsZSB1cCB0byB0aGUgbmV4dCBzZWNvbmRzLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLm1pbGxpc2Vjb25kKDEpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9taWxsaXNlY29uZAogICAgICovCiAgICBtaWxsaXNlY29uZCh2YWx1ZTogbnVtYmVyKTogRGF5anMKICAgIC8qKgogICAgICogR2VuZXJpYyBzZXR0ZXIsIGFjY2VwdGluZyB1bml0IGFzIGZpcnN0IGFyZ3VtZW50LCBhbmQgdmFsdWUgYXMgc2Vjb25kLCByZXR1cm5zIGEgbmV3IGluc3RhbmNlIHdpdGggdGhlIGFwcGxpZWQgY2hhbmdlcy4KICAgICAqCiAgICAgKiBJbiBnZW5lcmFsOgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLnNldCh1bml0LCB2YWx1ZSkgPT09IGRheWpzKClbdW5pdF0odmFsdWUpCiAgICAgKiBgYGAKICAgICAqIFVuaXRzIGFyZSBjYXNlIGluc2Vuc2l0aXZlLCBhbmQgc3VwcG9ydCBwbHVyYWwgYW5kIHNob3J0IGZvcm1zLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLnNldCgnZGF0ZScsIDEpCiAgICAgKiBkYXlqcygpLnNldCgnbW9udGgnLCAzKSAvLyBBcHJpbAogICAgICogZGF5anMoKS5zZXQoJ3NlY29uZCcsIDMwKQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L3NldAogICAgICovCiAgICBzZXQodW5pdDogVW5pdFR5cGUsIHZhbHVlOiBudW1iZXIpOiBEYXlqcwogICAgLyoqCiAgICAgKiBTdHJpbmcgZ2V0dGVyLCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGluZm9ybWF0aW9uIGdldHRpbmcgZnJvbSBEYXkuanMgb2JqZWN0LgogICAgICoKICAgICAqIEluIGdlbmVyYWw6CiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuZ2V0KHVuaXQpID09PSBkYXlqcygpW3VuaXRdKCkKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuZ2V0KCd5ZWFyJykKICAgICAqIGRheWpzKCkuZ2V0KCdtb250aCcpIC8vIHN0YXJ0IDAKICAgICAqIGRheWpzKCkuZ2V0KCdkYXRlJykKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9nZXQKICAgICAqLwogICAgZ2V0KHVuaXQ6IFVuaXRUeXBlKTogbnVtYmVyCiAgICAvKioKICAgICAqIFJldHVybnMgYSBjbG9uZWQgRGF5LmpzIG9iamVjdCB3aXRoIGEgc3BlY2lmaWVkIGFtb3VudCBvZiB0aW1lIGFkZGVkLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmFkZCg3LCAnZGF5JykvLyA9PiBEYXlqcwogICAgICogYGBgCiAgICAgKiBVbml0cyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSwgYW5kIHN1cHBvcnQgcGx1cmFsIGFuZCBzaG9ydCBmb3Jtcy4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9tYW5pcHVsYXRlL2FkZAogICAgICovCiAgICBhZGQodmFsdWU6IG51bWJlciwgdW5pdD86IE1hbmlwdWxhdGVUeXBlKTogRGF5anMKICAgIC8qKgogICAgICogUmV0dXJucyBhIGNsb25lZCBEYXkuanMgb2JqZWN0IHdpdGggYSBzcGVjaWZpZWQgYW1vdW50IG9mIHRpbWUgc3VidHJhY3RlZC4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5zdWJ0cmFjdCg3LCAneWVhcicpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vbWFuaXB1bGF0ZS9zdWJ0cmFjdAogICAgICovCiAgICBzdWJ0cmFjdCh2YWx1ZTogbnVtYmVyLCB1bml0PzogTWFuaXB1bGF0ZVR5cGUpOiBEYXlqcwogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgY2xvbmVkIERheS5qcyBvYmplY3QgYW5kIHNldCBpdCB0byB0aGUgc3RhcnQgb2YgYSB1bml0IG9mIHRpbWUuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuc3RhcnRPZigneWVhcicpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vbWFuaXB1bGF0ZS9zdGFydC1vZgogICAgICovCiAgICBzdGFydE9mKHVuaXQ6IE9wVW5pdFR5cGUpOiBEYXlqcwogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgY2xvbmVkIERheS5qcyBvYmplY3QgYW5kIHNldCBpdCB0byB0aGUgZW5kIG9mIGEgdW5pdCBvZiB0aW1lLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmVuZE9mKCdtb250aCcpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vbWFuaXB1bGF0ZS9lbmQtb2YKICAgICAqLwogICAgZW5kT2YodW5pdDogT3BVbml0VHlwZSk6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgZm9ybWF0dGVkIGRhdGUgYWNjb3JkaW5nIHRvIHRoZSBzdHJpbmcgb2YgdG9rZW5zIHBhc3NlZCBpbi4KICAgICAqCiAgICAgKiBUbyBlc2NhcGUgY2hhcmFjdGVycywgd3JhcCB0aGVtIGluIHNxdWFyZSBicmFja2V0cyAoZS5nLiBbTU1dKS4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5mb3JtYXQoKS8vID0+IGN1cnJlbnQgZGF0ZSBpbiBJU084NjAxLCB3aXRob3V0IGZyYWN0aW9uIHNlY29uZHMgZS5nLiAnMjAyMC0wNC0wMlQwODowMjoxNy0wNTowMCcKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykuZm9ybWF0KCdbWVlZWWVzY2FwZV0gWVlZWS1NTS1ERFRISDptbTpzc1pbWl0nKS8vICdZWVlZZXNjYXBlIDIwMTktMDEtMjVUMDA6MDA6MDAtMDI6MDBaJwogICAgICogZGF5anMoJzIwMTktMDEtMjUnKS5mb3JtYXQoJ0REL01NL1lZWVknKSAvLyAnMjUvMDEvMjAxOScKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZGlzcGxheS9mb3JtYXQKICAgICAqLwogICAgZm9ybWF0KHRlbXBsYXRlPzogc3RyaW5nKTogc3RyaW5nCiAgICAvKioKICAgICAqIFRoaXMgaW5kaWNhdGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGRhdGUtdGltZSBpbiB0aGUgc3BlY2lmaWVkIHVuaXQuCiAgICAgKgogICAgICogVG8gZ2V0IHRoZSBkaWZmZXJlbmNlIGluIG1pbGxpc2Vjb25kcywgdXNlIGBkYXlqcyNkaWZmYAogICAgICogYGBgCiAgICAgKiBjb25zdCBkYXRlMSA9IGRheWpzKCcyMDE5LTAxLTI1JykKICAgICAqIGNvbnN0IGRhdGUyID0gZGF5anMoJzIwMTgtMDYtMDUnKQogICAgICogZGF0ZTEuZGlmZihkYXRlMikgLy8gMjAyMTQwMDAwMDAgZGVmYXVsdCBtaWxsaXNlY29uZHMKICAgICAqIGRhdGUxLmRpZmYoKSAvLyBtaWxsaXNlY29uZHMgdG8gY3VycmVudCB0aW1lCiAgICAgKiBgYGAKICAgICAqCiAgICAgKiBUbyBnZXQgdGhlIGRpZmZlcmVuY2UgaW4gYW5vdGhlciB1bml0IG9mIG1lYXN1cmVtZW50LCBwYXNzIHRoYXQgbWVhc3VyZW1lbnQgYXMgdGhlIHNlY29uZCBhcmd1bWVudC4KICAgICAqIGBgYAogICAgICogY29uc3QgZGF0ZTEgPSBkYXlqcygnMjAxOS0wMS0yNScpCiAgICAgKiBkYXRlMS5kaWZmKCcyMDE4LTA2LTA1JywgJ21vbnRoJykgLy8gNwogICAgICogYGBgCiAgICAgKiBVbml0cyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSwgYW5kIHN1cHBvcnQgcGx1cmFsIGFuZCBzaG9ydCBmb3Jtcy4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L2RpZmZlcmVuY2UKICAgICAqLwogICAgZGlmZihkYXRlPzogQ29uZmlnVHlwZSwgdW5pdD86IFFVbml0VHlwZSB8IE9wVW5pdFR5cGUsIGZsb2F0PzogYm9vbGVhbik6IG51bWJlcgogICAgLyoqCiAgICAgKiBUaGlzIHJldHVybnMgdGhlIG51bWJlciBvZiAqKm1pbGxpc2Vjb25kcyoqIHNpbmNlIHRoZSBVbml4IEVwb2NoIG9mIHRoZSBEYXkuanMgb2JqZWN0LgogICAgICogYGBgCiAgICAgKiBkYXlqcygnMjAxOS0wMS0yNScpLnZhbHVlT2YoKSAvLyAxNTQ4MzgxNjAwMDAwCiAgICAgKiArZGF5anMoMTU0ODM4MTYwMDAwMCkgLy8gMTU0ODM4MTYwMDAwMAogICAgICogYGBgCiAgICAgKiBUbyBnZXQgYSBVbml4IHRpbWVzdGFtcCAodGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCkgZnJvbSBhIERheS5qcyBvYmplY3QsIHlvdSBzaG91bGQgdXNlIFVuaXggVGltZXN0YW1wIGBkYXlqcyN1bml4KClgLgogICAgICoKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2Rpc3BsYXkvdW5peC10aW1lc3RhbXAtbWlsbGlzZWNvbmRzCiAgICAgKi8KICAgIHZhbHVlT2YoKTogbnVtYmVyCiAgICAvKioKICAgICAqIFRoaXMgcmV0dXJucyB0aGUgVW5peCB0aW1lc3RhbXAgKHRoZSBudW1iZXIgb2YgKipzZWNvbmRzKiogc2luY2UgdGhlIFVuaXggRXBvY2gpIG9mIHRoZSBEYXkuanMgb2JqZWN0LgogICAgICogYGBgCiAgICAgKiBkYXlqcygnMjAxOS0wMS0yNScpLnVuaXgoKSAvLyAxNTQ4MzgxNjAwCiAgICAgKiBgYGAKICAgICAqIFRoaXMgdmFsdWUgaXMgZmxvb3JlZCB0byB0aGUgbmVhcmVzdCBzZWNvbmQsIGFuZCBkb2VzIG5vdCBpbmNsdWRlIGEgbWlsbGlzZWNvbmRzIGNvbXBvbmVudC4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L3VuaXgtdGltZXN0YW1wCiAgICAgKi8KICAgIHVuaXgoKTogbnVtYmVyCiAgICAvKioKICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhlIGN1cnJlbnQgbW9udGguCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykuZGF5c0luTW9udGgoKSAvLyAzMQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L2RheXMtaW4tbW9udGgKICAgICAqLwogICAgZGF5c0luTW9udGgoKTogbnVtYmVyCiAgICAvKioKICAgICAqIFRvIGdldCBhIGNvcHkgb2YgdGhlIG5hdGl2ZSBgRGF0ZWAgb2JqZWN0IHBhcnNlZCBmcm9tIHRoZSBEYXkuanMgb2JqZWN0IHVzZSBgZGF5anMjdG9EYXRlYC4KICAgICAqIGBgYAogICAgICogZGF5anMoJzIwMTktMDEtMjUnKS50b0RhdGUoKS8vID0+IERhdGUKICAgICAqIGBgYAogICAgICovCiAgICB0b0RhdGUoKTogRGF0ZQogICAgLyoqCiAgICAgKiBUbyBzZXJpYWxpemUgYXMgYW4gSVNPIDg2MDEgc3RyaW5nLgogICAgICogYGBgCiAgICAgKiBkYXlqcygnMjAxOS0wMS0yNScpLnRvSlNPTigpIC8vICcyMDE5LTAxLTI1VDAyOjAwOjAwLjAwMFonCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2Rpc3BsYXkvYXMtanNvbgogICAgICovCiAgICB0b0pTT04oKTogc3RyaW5nCiAgICAvKioKICAgICAqIFRvIGZvcm1hdCBhcyBhbiBJU08gODYwMSBzdHJpbmcuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykudG9JU09TdHJpbmcoKSAvLyAnMjAxOS0wMS0yNVQwMjowMDowMC4wMDBaJwogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L2FzLWlzby1zdHJpbmcKICAgICAqLwogICAgdG9JU09TdHJpbmcoKTogc3RyaW5nCiAgICAvKioKICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykudG9TdHJpbmcoKSAvLyAnRnJpLCAyNSBKYW4gMjAxOSAwMjowMDowMCBHTVQnCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2Rpc3BsYXkvYXMtc3RyaW5nCiAgICAgKi8KICAgIHRvU3RyaW5nKCk6IHN0cmluZwogICAgLyoqCiAgICAgKiBHZXQgdGhlIFVUQyBvZmZzZXQgaW4gbWludXRlcy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS51dGNPZmZzZXQoKQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9tYW5pcHVsYXRlL3V0Yy1vZmZzZXQKICAgICAqLwogICAgdXRjT2Zmc2V0KCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBUaGlzIGluZGljYXRlcyB3aGV0aGVyIHRoZSBEYXkuanMgb2JqZWN0IGlzIGJlZm9yZSB0aGUgb3RoZXIgc3VwcGxpZWQgZGF0ZS10aW1lLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmlzQmVmb3JlKGRheWpzKCcyMDExLTAxLTAxJykpIC8vIGRlZmF1bHQgbWlsbGlzZWNvbmRzCiAgICAgKiBgYGAKICAgICAqIElmIHlvdSB3YW50IHRvIGxpbWl0IHRoZSBncmFudWxhcml0eSB0byBhIHVuaXQgb3RoZXIgdGhhbiBtaWxsaXNlY29uZHMsIHBhc3MgaXQgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuaXNCZWZvcmUoJzIwMTEtMDEtMDEnLCAneWVhcicpLy8gPT4gYm9vbGVhbgogICAgICogYGBgCiAgICAgKiBVbml0cyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSwgYW5kIHN1cHBvcnQgcGx1cmFsIGFuZCBzaG9ydCBmb3Jtcy4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9xdWVyeS9pcy1iZWZvcmUKICAgICAqLwogICAgaXNCZWZvcmUoZGF0ZTogQ29uZmlnVHlwZSwgdW5pdD86IE9wVW5pdFR5cGUpOiBib29sZWFuCiAgICAvKioKICAgICAqIFRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIERheS5qcyBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIG90aGVyIHN1cHBsaWVkIGRhdGUtdGltZS4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5pc1NhbWUoZGF5anMoJzIwMTEtMDEtMDEnKSkgLy8gZGVmYXVsdCBtaWxsaXNlY29uZHMKICAgICAqIGBgYAogICAgICogSWYgeW91IHdhbnQgdG8gbGltaXQgdGhlIGdyYW51bGFyaXR5IHRvIGEgdW5pdCBvdGhlciB0aGFuIG1pbGxpc2Vjb25kcywgcGFzcyBpdCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5pc1NhbWUoJzIwMTEtMDEtMDEnLCAneWVhcicpLy8gPT4gYm9vbGVhbgogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9xdWVyeS9pcy1zYW1lCiAgICAgKi8KICAgIGlzU2FtZShkYXRlOiBDb25maWdUeXBlLCB1bml0PzogT3BVbml0VHlwZSk6IGJvb2xlYW4KICAgIC8qKgogICAgICogVGhpcyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgRGF5LmpzIG9iamVjdCBpcyBhZnRlciB0aGUgb3RoZXIgc3VwcGxpZWQgZGF0ZS10aW1lLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmlzQWZ0ZXIoZGF5anMoJzIwMTEtMDEtMDEnKSkgLy8gZGVmYXVsdCBtaWxsaXNlY29uZHMKICAgICAqIGBgYAogICAgICogSWYgeW91IHdhbnQgdG8gbGltaXQgdGhlIGdyYW51bGFyaXR5IHRvIGEgdW5pdCBvdGhlciB0aGFuIG1pbGxpc2Vjb25kcywgcGFzcyBpdCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5pc0FmdGVyKCcyMDExLTAxLTAxJywgJ3llYXInKS8vID0+IGJvb2xlYW4KICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vcXVlcnkvaXMtYWZ0ZXIKICAgICAqLwogICAgaXNBZnRlcihkYXRlOiBDb25maWdUeXBlLCB1bml0PzogT3BVbml0VHlwZSk6IGJvb2xlYW4KCiAgICBsb2NhbGUoKTogc3RyaW5nCgogICAgbG9jYWxlKHByZXNldDogc3RyaW5nIHwgSUxvY2FsZSwgb2JqZWN0PzogUGFydGlhbDxJTG9jYWxlPik6IERheWpzCiAgfQoKICBleHBvcnQgdHlwZSBQbHVnaW5GdW5jPFQgPSB1bmtub3duPiA9IChvcHRpb246IFQsIGM6IHR5cGVvZiBEYXlqcywgZDogdHlwZW9mIGRheWpzKSA9PiB2b2lkCgogIGV4cG9ydCBmdW5jdGlvbiBleHRlbmQ8VCA9IHVua25vd24+KHBsdWdpbjogUGx1Z2luRnVuYzxUPiwgb3B0aW9uPzogVCk6IERheWpzCgogIGV4cG9ydCBmdW5jdGlvbiBsb2NhbGUocHJlc2V0Pzogc3RyaW5nIHwgSUxvY2FsZSwgb2JqZWN0PzogUGFydGlhbDxJTG9jYWxlPiwgaXNMb2NhbD86IGJvb2xlYW4pOiBzdHJpbmcKCiAgZXhwb3J0IGZ1bmN0aW9uIGlzRGF5anMoZDogYW55KTogZCBpcyBEYXlqcwoKICBleHBvcnQgZnVuY3Rpb24gdW5peCh0OiBudW1iZXIpOiBEYXlqcwoKICBjb25zdCBMcyA6IHsgW2tleTogc3RyaW5nXSA6ICBJTG9jYWxlIH0KfQo=';\nexport const JSONPATH_BASE64 = 'Ly8gVHlwZSBkZWZpbml0aW9ucyBmb3IganNvbnBhdGggMC4yLjExDQovLyBQcm9qZWN0OiBodHRwczovL3d3dy5ucG1qcy5vcmcvcGFja2FnZS9qc29ucGF0aA0KLy8gRGVmaW5pdGlvbnMgYnk6IEhpcm9raSBIb3JpdWNoaSA8aHR0cHM6Ly9naXRodWIuY29tL2hvcml1Y2hpPiwgSWthIDxodHRwczovL2dpdGh1Yi5jb20vaWthdHlhbmc+DQovLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQNCg0KdHlwZSBQYXRoQ29tcG9uZW50ID0gc3RyaW5nIHwgbnVtYmVyOw0KDQovKioNCiAqIEZpbmQgZWxlbWVudHMgaW4gYG9iamAgbWF0Y2hpbmcgYHBhdGhFeHByZXNzaW9uYC4gUmV0dXJucyBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0DQogKiBzYXRpc2Z5IHRoZSBwcm92aWRlZCBKU09OUGF0aCBleHByZXNzaW9uLG9yIGFuIGVtcHR5IGFycmF5IGlmIG5vbmUgd2VyZSBtYXRjaGVkLg0KICogUmV0dXJucyBvbmx5IGZpcnN0IGBjb3VudGAgZWxlbWVudHMgaWYgc3BlY2lmaWVkLg0KICovDQpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBxdWVyeShvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZywgY291bnQ/OiBudW1iZXIpOiBhbnlbXTsNCg0KLyoqDQogKiBGaW5kIHBhdGhzIHRvIGVsZW1lbnRzIGluIGBvYmpgIG1hdGNoaW5nIGBwYXRoRXhwcmVzc2lvbmAuIFJldHVybnMgYW4gYXJyYXkgb2YNCiAqIGVsZW1lbnQgcGF0aHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBKU09OUGF0aCBleHByZXNzaW9uLiBFYWNoIHBhdGggaXMgaXRzZWxmIGFuDQogKiBhcnJheSBvZiBrZXlzIHJlcHJlc2VudGluZyB0aGUgbG9jYXRpb24gd2l0aGluIGBvYmpgIG9mIHRoZSBtYXRjaGluZyBlbGVtZW50LiBSZXR1cm5zDQogKiBvbmx5IGZpcnN0IGBjb3VudGAgcGF0aHMgaWYgc3BlY2lmaWVkLg0KICovDQpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYXRocyhvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZywgY291bnQ/OiBudW1iZXIpOiBQYXRoQ29tcG9uZW50W11bXTsNCg0KLyoqDQogKiBGaW5kIGVsZW1lbnRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHBhdGhzIGluIGBvYmpgIG1hdGNoaW5nIGBwYXRoRXhwcmVzc2lvbmAuDQogKiBSZXR1cm5zIGFuIGFycmF5IG9mIG5vZGUgb2JqZWN0cyB3aGVyZSBlYWNoIG5vZGUgaGFzIGEgYHBhdGhgIGNvbnRhaW5pbmcgYW4gYXJyYXkgb2YNCiAqIGtleXMgcmVwcmVzZW50aW5nIHRoZSBsb2NhdGlvbiB3aXRoaW4gYG9iamAsIGFuZCBhIGB2YWx1ZWAgcG9pbnRpbmcgdG8gdGhlIG1hdGNoZWQNCiAqIGVsZW1lbnQuIFJldHVybnMgb25seSBmaXJzdCBgY291bnRgIG5vZGVzIGlmIHNwZWNpZmllZC4NCiAqLw0KZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbm9kZXMob2JqOiBhbnksIHBhdGhFeHByZXNzaW9uOiBzdHJpbmcsIGNvdW50PzogbnVtYmVyKTogeyBwYXRoOiBQYXRoQ29tcG9uZW50W107IHZhbHVlOiBhbnk7IH1bXTsNCg0KLyoqDQogKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBtYXRjaGluZyBgcGF0aEV4cHJlc3Npb25gLiBJZiBgbmV3VmFsdWVgIGlzDQogKiBwcm92aWRlZCwgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgYW5kIHJldHVybnMgdGhlIG5ldyB2YWx1ZS4NCiAqLw0KZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmFsdWUob2JqOiBhbnksIHBhdGhFeHByZXNzaW9uOiBzdHJpbmcpOiBhbnk7DQpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB2YWx1ZTxUPihvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZywgbmV3VmFsdWU6IFQpOiBUOw0KDQovKioNCiAqIFJldHVybnMgdGhlIHBhcmVudCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudC4NCiAqLw0KZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcGFyZW50KG9iajogYW55LCBwYXRoRXhwcmVzc2lvbjogc3RyaW5nKTogYW55Ow0KDQovKioNCiAqIFJ1bnMgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIGBmbmAgb24gZWFjaCBtYXRjaGluZyBlbGVtZW50LCBhbmQgcmVwbGFjZXMgZWFjaA0KICogbWF0Y2hpbmcgZWxlbWVudCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHRoZQ0KICogdmFsdWUgb2YgdGhlIG1hdGNoaW5nIGVsZW1lbnQgYXMgaXRzIG9ubHkgcGFyYW1ldGVyLiBSZXR1cm5zIG1hdGNoaW5nIG5vZGVzIHdpdGgNCiAqIHRoZWlyIHVwZGF0ZWQgdmFsdWVzLg0KICovDQpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseShvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZywgZm46ICh4OiBhbnkpID0+IGFueSk6IHsgcGF0aDogUGF0aENvbXBvbmVudFtdOyB2YWx1ZTogYW55OyB9W107DQoNCi8qKg0KICogUGFyc2UgdGhlIHByb3ZpZGVkIEpTT05QYXRoIGV4cHJlc3Npb24gaW50byBwYXRoIGNvbXBvbmVudHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQNCiAqIG9wZXJhdGlvbnMuDQogKi8NCmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHBhcnNlKHBhdGhFeHByZXNzaW9uOiBzdHJpbmcpOiBhbnlbXTsNCg0KLyoqDQogKiBSZXR1cm5zIGEgcGF0aCBleHByZXNzaW9uIGluIHN0cmluZyBmb3JtLCBnaXZlbiBhIHBhdGguIFRoZSBzdXBwbGllZCBwYXRoIG1heSBlaXRoZXINCiAqIGJlIGEgZmxhdCBhcnJheSBvZiBrZXlzLCBhcyByZXR1cm5lZCBieSBganAubm9kZXNgIGZvciBleGFtcGxlLCBvciBtYXkgYWx0ZXJuYXRpdmVseSBiZSBhDQogKiBmdWxseSBwYXJzZWQgcGF0aCBleHByZXNzaW9uIGluIHRoZSBmb3JtIG9mIGFuIGFycmF5IG9mIHBhdGggY29tcG9uZW50cyBhcyByZXR1cm5lZA0KICogYnkgYGpwLnBhcnNlYC4NCiAqLw0KZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc3RyaW5naWZ5KHBhdGg6IFBhdGhDb21wb25lbnRbXSk6IHN0cmluZzsNCg0KZXhwb3J0IGFzIG5hbWVzcGFjZSBqc29ucGF0aDsNCg==';\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createDefaultMapFromNodeModules, createDefaultMapFromCDN } from '@typescript/vfs';\nimport { twoslasher, TwoSlashOptions, TwoSlashReturn } from '@typescript/twoslash';\nimport { ModelManager } from '@accordproject/concerto-core';\nimport { TypeScriptCompilationContext } from './TypeScriptCompilationContext';\nimport { DAYJS_BASE64, JSONPATH_BASE64 } from './runtime/declarations';\nimport * as lzstring from 'lz-string';\n\n/**\n * Compiles user Typescript code to JavaScript. This uses the '@typescript/twoslash'\n * project which is maintained by the Typescript team and powers their web playground.\n * It uses the TypeScriptCompilationContext class to construct a payload for twoslash\n * that is composed of multiple TS files to compile, along with their 3rd-party module\n * dependencies.\n *\n * Note that the 'typescript' module is either dynamically loaded from node_modules (Node.js)\n * or from the CDN (browser). This module is used by twoslash.\n *\n * The 'updateRuntimeDependencies' script it used to package type declarations for 3rd-party\n * modules that we need to expose to user TS code: dayjs and jsonpath, these also need to be\n * added to the twoslash compilation context.\n */\nexport class TypeScriptToJavaScriptCompiler {\n context: string;\n fsMap: Map<string,string>|undefined;\n ts: any;\n\n constructor(modelManager: ModelManager, templateConceptFqn?: string) {\n this.context = new TypeScriptCompilationContext(modelManager, templateConceptFqn).getCompilationContext();\n }\n\n async initialize() {\n if(typeof window === 'undefined') {\n this.ts = await import ('typescript');\n this.fsMap = createDefaultMapFromNodeModules({\n target: this.ts.ScriptTarget.ES2020,\n });\n }\n else {\n this.ts = (await import('https://cdn.jsdelivr.net/npm/typescript@4.8.4/+esm')).default;\n if(!this.ts) {\n throw new Error('Failed to dynamically load typescript');\n }\n this.fsMap = await createDefaultMapFromCDN({ target: this.ts.ScriptTarget.ES2020 }, this.ts.version, false, this.ts);\n }\n this.fsMap.set('/node_modules/@types/dayjs/index.d.ts', Buffer.from(DAYJS_BASE64, 'base64').toString());\n this.fsMap.set('/node_modules/@types/jsonpath/index.d.ts', Buffer.from(JSONPATH_BASE64, 'base64').toString());\n }\n\n compile(typescript: string): TwoSlashReturn {\n if(!this.fsMap) {\n throw new Error('initialize must be awaited before compile is called.');\n }\n const twoSlashCode =`\n${this.context}\n${typescript}\n`;\n\n const options: TwoSlashOptions = {\n fsMap: this.fsMap,\n tsModule: this.ts,\n lzstringModule:lzstring,\n defaultOptions: {\n showEmit: true,\n noErrorValidation: true,\n showEmittedFile: 'code.js'\n }\n };\n const result = twoslasher(twoSlashCode, 'ts', options);\n return result;\n }\n}","/* eslint-disable @typescript-eslint/no-empty-interface */\n// Generated code for namespace: org.accordproject.templatemark@0.5.0\n\n// imports\n\n// Warning: Beware of circular dependencies when modifying these imports\n\n// Warning: Beware of circular dependencies when modifying these imports\n\n// Warning: Beware of circular dependencies when modifying these imports\nimport {IChild,INode} from './org.accordproject.commonmark@0.5.0';\nimport {IDecorator} from './concerto.metamodel@1.0.0';\nimport {IConcept} from './concerto@1.0.0';\n\n// interfaces\nexport enum CodeType {\n TYPESCRIPT = 'TYPESCRIPT',\n ES_2020 = 'ES_2020',\n}\n\nexport interface ICode extends IConcept {\n type: CodeType;\n contents: string;\n}\n\nexport interface IElementDefinition extends IChild {\n name: string;\n elementType?: string;\n decorators?: IDecorator[];\n}\n\nexport type ElementDefinitionUnion = IVariableDefinition | \nIFormulaDefinition | \nIBlockDefinition;\n\nexport interface IVariableDefinition extends IElementDefinition {\n identifiedBy?: string;\n}\n\nexport type VariableDefinitionUnion = IFormattedVariableDefinition | \nIEnumVariableDefinition;\n\nexport interface IFormattedVariableDefinition extends IVariableDefinition {\n format: string;\n}\n\nexport interface IEnumVariableDefinition extends IVariableDefinition {\n enumValues: string[];\n}\n\nexport interface IFormulaDefinition extends IElementDefinition {\n dependencies?: string[];\n code: ICode;\n}\n\nexport interface IBlockDefinition extends IElementDefinition {\n}\n\nexport type BlockDefinitionUnion = IClauseDefinition | \nIContractDefinition | \nIWithDefinition | \nIConditionalDefinition | \nIOptionalDefinition | \nIJoinDefinition | \nIListBlockDefinition | \nIForeachBlockDefinition | \nIWithBlockDefinition | \nIConditionalBlockDefinition | \nIOptionalBlockDefinition;\n\nexport interface IClauseDefinition extends IBlockDefinition {\n condition?: ICode;\n}\n\nexport interface IContractDefinition extends IBlockDefinition {\n}\n\nexport interface IWithDefinition extends IBlockDefinition {\n}\n\nexport interface IConditionalDefinition extends IBlockDefinition {\n whenTrue: IChild[];\n whenFalse: IChild[];\n condition?: ICode;\n dependencies?: string[];\n}\n\nexport interface IOptionalDefinition extends IBlockDefinition {\n whenSome: IChild[];\n whenNone: IChild[];\n}\n\nexport interface IJoinDefinition extends IBlockDefinition {\n separator?: string;\n locale?: string;\n type?: string;\n style?: string;\n}\n\nexport interface IListBlockDefinition extends IBlockDefinition {\n type: string;\n tight: string;\n start?: string;\n delimiter?: string;\n}\n\nexport interface IForeachBlockDefinition extends IBlockDefinition {\n}\n\nexport interface IWithBlockDefinition extends IBlockDefinition {\n}\n\nexport interface IConditionalBlockDefinition extends IBlockDefinition {\n whenTrue: IChild[];\n whenFalse: IChild[];\n condition?: ICode;\n}\n\nexport interface IOptionalBlockDefinition extends IBlockDefinition {\n whenSome: IChild[];\n whenNone: IChild[];\n}\n\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport traverse from 'traverse';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\nimport { ClassDeclaration, ModelManager } from '@accordproject/concerto-core';\nimport { TypeScriptToJavaScriptCompiler } from './TypeScriptToJavaScriptCompiler';\nimport { TwoSlashReturn } from '@typescript/twoslash';\nimport { CodeType, ICode } from './model-gen/org.accordproject.templatemark@0.5.0';\nimport { getTemplateClassDeclaration, nameUserCode, writeFunctionToString } from './utils';\n\nconst CODE_NODES = [\n `${TemplateMarkModel.NAMESPACE}.FormulaDefinition`,\n `${TemplateMarkModel.NAMESPACE}.ConditionalDefinition`,\n `${TemplateMarkModel.NAMESPACE}.ClauseDefinition`,\n];\n\nexport type CompilerError = {\n nodeId: string;\n code: string;\n errors:TwoSlashReturn['errors'];\n};\n\nfunction checkCode(code:ICode) {\n if(code.type !== CodeType.TYPESCRIPT) {\n throw new Error(`Cannot compile ${code.contents} as it is not Typescript.`);\n }\n}\n\n/**\n * Compiles all the Typescript nodes in a TemplateMark JSON\n * to ES_2020 and returns a modified TemplateMark JSON.\n */\nexport class TemplateMarkToJavaScriptCompiler {\n modelManager:ModelManager;\n compiler: TypeScriptToJavaScriptCompiler;\n templateClass: ClassDeclaration;\n\n constructor(modelManager: ModelManager, templateConceptFqn?: string) {\n this.modelManager = modelManager;\n this.compiler = new TypeScriptToJavaScriptCompiler(modelManager,templateConceptFqn);\n this.templateClass = getTemplateClassDeclaration(modelManager,templateConceptFqn);\n }\n\n async initialize() {\n await this.compiler.initialize();\n }\n\n compile(templateJson: any) : any {\n const namedTemplateMark = nameUserCode(templateJson);\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const that = this;\n const errors = Array<CompilerError>();\n const compiled = traverse(namedTemplateMark).map(function (x) {\n if (x && CODE_NODES.includes(x.$class)) {\n if (x.code) { // formula\n checkCode(x.code);\n const result = that.compiler.compile(writeFunctionToString(that.templateClass, x.name, 'any', x.code.contents));\n if(result.errors.length === 0) {\n x.code.contents = result.code;\n x.code.type = CodeType.ES_2020;\n this.update(x);\n }\n else {\n errors.push({\n nodeId: x.name,\n code: x.code.contents,\n errors: result.errors\n });\n }\n }\n else if (x.condition) { // condition or clause (boolean condition)\n checkCode(x.condition);\n const result = that.compiler.compile(writeFunctionToString(that.templateClass, x.functionName, 'boolean', x.condition.contents));\n if(result.errors.length === 0) {\n x.condition.contents = result.code;\n x.condition.type = CodeType.ES_2020;\n this.update(x);\n }\n else {\n errors.push({\n nodeId: x.functionName,\n code: x.condition.contents,\n errors: result.errors\n });\n }\n }\n }\n });\n\n if(errors.length === 0) {\n return compiled;\n }\n else {\n throw errors;\n }\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEBUG = false;\n\n// BEWARE adding imports to this file\n// as it is used by the static code generator\n\n/**\n * BEWARE - this type is duplicated in TypeScriptCompilationContext\n * for use by code generation\n */\nexport type GenerationOptions = {\n now?:string,\n locale?:string\n}\n\nexport function joinList(data:Array<string>, joinDef:any, options?:GenerationOptions) : string {\n if(joinDef.separator) {\n return data.join(joinDef.separator);\n }\n else {\n const formatter = new Intl.ListFormat( joinDef.locale ? joinDef.locale : options?.locale,\n {\n style: (joinDef.style as Intl.ListFormatStyle),\n type: (joinDef.type as Intl.ListFormatType)\n }\n );\n return formatter.format(data);\n }\n}\n\n/**\n * These utility functions are used by the typescript code that\n * is generated from TemplateMark. They manage a stack to improve\n * debuggability.\n */\n\nfunction dump(op:string, $data:any[]) {\n if(DEBUG) {\n console.log(`${op}: ${JSON.stringify($data)}`);\n }\n}\n\nexport function peek($data:any[]) : any {\n if($data.length <= 0) {\n throw new Error('Empty array');\n }\n const result = $data[$data.length-1];\n dump('peek', $data);\n return result;\n}\n\nexport function peekProperty($data:any[], propertyName:string, allowUndefined=false) : any {\n const head = peek($data);\n const result = head[propertyName];\n if(!allowUndefined && result === undefined) {\n throw new Error(`Undefined property ${propertyName}. Current stack is ${JSON.stringify($data)}`);\n }\n return result;\n}\n\nexport function push($data:any[], item:any) : number {\n const result = $data.push(item);\n dump('push', $data);\n return result;\n}\n\nexport function addChild($data:any[], item:any) {\n const node = peek($data);\n node.nodes ? node.nodes.push(item) : node.nodes = [item];\n}\n\nexport function pop($data:any[]) : any {\n if($data.length <= 0) {\n throw new Error('Empty array');\n }\n const result = $data.pop();\n dump('pop', $data);\n return result;\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport jp from 'jsonpath';\nimport traverse from 'traverse';\n\nimport { ClassDeclaration, Factory, Introspector, ModelManager, Serializer } from '@accordproject/concerto-core';\nimport { getDrafter } from './drafting';\nimport { TemplateMarkModel, CommonMarkModel, CiceroMarkModel, ConcertoMetaModel } from '@accordproject/markdown-common';\nimport { ModelUtil } from '@accordproject/concerto-core';\n\nimport {\n TEMPLATEMARK_RE,\n FORMULA_DEFINITION_RE,\n VARIABLE_DEFINITION_RE,\n CONDITIONAL_DEFINITION_RE,\n ENUM_VARIABLE_DEFINITION_RE,\n FORMATTED_VARIABLE_DEFINITION_RE,\n WITH_DEFINITION_RE,\n LISTBLOCK_DEFINITION_RE,\n JOIN_DEFINITION_RE,\n OPTIONAL_DEFINITION_RE,\n CLAUSE_DEFINITION_RE,\n CONTRACT_DEFINITION_RE,\n TemplateData,\n NAVIGATION_NODES\n} from './TemplateMarkNodes';\nimport { TemplateMarkToJavaScriptCompiler } from './TemplateMarkToJavaScriptCompiler';\nimport { CodeType, ICode } from './model-gen/org.accordproject.templatemark@0.5.0';\nimport { GenerationOptions, joinList } from './TypeScriptRuntime';\nimport dayjs from 'dayjs';\nimport { getTemplateClassDeclaration } from './utils';\n\nfunction checkCode(code:ICode) {\n if(code.type !== CodeType.ES_2020) {\n throw new Error(`Cannot run ${code.contents} as it is not ES_2020 JavaScript.`);\n }\n}\n\n/**\n * Evaluates a JS expression\n * @param {*} clauseLibrary the clause library\n * @param {*} data the contract data\n * @param {string} fn the JS function (including header)\n * @param {GenerationOptions} options the generation options\n * @returns {object} the result of evaluating the expression against the data\n */\nfunction evaluateJavaScript(clauseLibrary:object, data: TemplateData, fn: string, options?: GenerationOptions): object {\n if (!data || !fn) {\n throw new Error(`Cannot evaluate JS ${fn} against ${data}`);\n }\n const functionArgNames = new Array<string>();\n functionArgNames.push('data');\n functionArgNames.push('library');\n functionArgNames.push('options');\n functionArgNames.push('dayjs');\n functionArgNames.push('jp');\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const functionArgValues = new Array<any>();\n functionArgValues.push(data);\n functionArgValues.push(clauseLibrary);\n functionArgValues.push(options);\n functionArgValues.push(dayjs);\n functionArgValues.push(jp);\n\n // chop the function header and closing\n const expression = fn.substring(fn.indexOf('{') + 1, fn.lastIndexOf('}'));\n if(expression.trim().length === 0) {\n throw new Error('Empty expression');\n }\n try {\n const fun = new Function(...functionArgNames, expression); // SECURITY!\n const result = fun(...functionArgValues);\n return result;\n }\n catch(err) {\n throw new Error(`Caught error ${err} evaluating ${expression} with arguments ${functionArgValues}`);\n }\n}\n\n/**\n * Calculates a JSON path to use to retrieve data, based on a TemplatemMark tree.\n * For example, if we hit a VariableDefinition {{city}} that is nested inside a\n * WithDefinition {{#with address}} then the JSON path returned should be '$.address.city'.\n * Similarly ListBlockDefinition, JoinDefinition and OptionalDefinition also include\n * property names that must apply to their child nodes.\n * @param {*} rootData the root of the JSON document, typically this is a TemplateMark JSON\n * @param {*} currentNode the current TemplateMark node we are processing\n * @param {string[]} paths the traverse path to the current node\n * @returns {string} the JSON path to use to retrieve data\n */\nfunction getJsonPath(rootData:any, currentNode:any, paths:string[]) : string {\n if(!currentNode) {\n throw new Error('Node must be supplied');\n }\n if(!currentNode.name) {\n throw new Error(`Node must have a name: ${JSON.stringify(currentNode)}`);\n }\n if(currentNode.name.indexOf('.') >=0) {\n // prevent JSON path injection\n throw new Error(`Invalid name property ${currentNode.name}`);\n }\n if(!paths || !paths.length || paths.length <1 ) {\n throw new Error('Paths must be supplied');\n }\n const withPath = [];\n for (let n = 1; n < paths.length; n++) {\n const sub = paths.slice(0, n);\n const obj = traverse.get(rootData, sub);\n // HACK\n // if(obj===undefined) {\n // throw new Error(`Failed to find data with path ${sub} and data ${JSON.stringify(rootData, null, 2)}`);\n // }\n if (obj && obj.$class) {\n if(NAVIGATION_NODES.indexOf(obj.$class) >= 0) {\n withPath.push(`['${obj.name}']`);\n }\n }\n }\n\n if(currentNode.name !== 'this') {\n withPath.push(`['${currentNode.name}']`);\n }\n\n return withPath.length > 0 ? `$${withPath.join('')}` : '$';\n}\n\n/**\n * Generates an AgreementMark JSON document from a template plus data.\n * @param {ModelManager} modelManager - the template model\n * @param {*} clauseLibrary - the clause library\n * @param {*} templateMark - the TemplateMark JSON document\n * @param {*} data - the template data JSON\n * @param {[GenerationOptions]} options - the generation options\n * @returns {*} the AgreementMark JSON\n */\nfunction generateAgreement(modelManager:ModelManager, clauseLibrary:object, templateMark: object, data: TemplateData, options?:GenerationOptions): any {\n const introspector = new Introspector(modelManager);\n return traverse(templateMark).map(function (context: any) {\n let stopHere = false;\n if (typeof context === 'object' && context.$class && typeof context.$class === 'string') {\n const nodeClass = context.$class as string;\n\n // rewrite node types, mapping from TemplateMark namespace to CiceroMark\n const match = nodeClass.match(TEMPLATEMARK_RE);\n if (match && match.length > 1) {\n context.$class = `${CiceroMarkModel.NAMESPACE}.${match[3]}`;\n }\n\n // convert a contract node to a clause note HACK\n if (CONTRACT_DEFINITION_RE.test(nodeClass)) {\n context.$class = `${CommonMarkModel.NAMESPACE}.Paragraph`;\n delete context.name;\n delete context.elementType;\n }\n\n // convert a WithDefinition to a Paragraph in the output\n // not 100% sure we want to do that ... we may need to process\n // the child variable nodes and reparent them?\n if (WITH_DEFINITION_RE.test(nodeClass)) {\n context.$class = `${CommonMarkModel.NAMESPACE}.Paragraph`;\n delete context.name;\n delete context.elementType;\n }\n\n // add a 'value' property to FormulaDefinition\n // with the result of evaluating the JS code\n else if (FORMULA_DEFINITION_RE.test(nodeClass)) {\n if (context.code) {\n checkCode(context.code);\n const result = evaluateJavaScript(clauseLibrary, data, context.code.contents, options);\n if(result === null) {\n context.value = '<null>';\n }\n else if(typeof result === 'string') {\n context.value = result;\n }\n else {\n context.value = JSON.stringify(result);\n }\n delete context.code;\n }\n else {\n throw new Error('Formula node is missing code.');\n }\n }\n\n // evaluate lists, recursing on each list item\n else if (LISTBLOCK_DEFINITION_RE.test(nodeClass)) {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n\n if (variableValues.length === 0) {\n throw new Error(`No values found for path '${path}' in data ${data}.`);\n }\n else {\n const arrayData = variableValues[0];\n if(!Array.isArray(arrayData)) {\n throw new Error(`Values found for path '${path}' in data ${data} is not an array: ${arrayData}.`);\n }\n else {\n context.$class = `${CommonMarkModel.NAMESPACE}.List`;\n delete context.elementType;\n delete context.name;\n context.nodes = arrayData.map( arrayItem => {\n // arrayItem is now the data for the nested traversal\n const subResult = generateAgreement(modelManager, clauseLibrary, context.nodes[0].nodes[0], arrayItem);\n return {\n $class: `${CommonMarkModel.NAMESPACE}.Item`,\n nodes: subResult.nodes ? subResult.nodes : []\n };\n });\n stopHere = true; // do not process child nodes, we've already done it above...\n }\n }\n }\n\n // map over an array of items, joining them into a Text node\n else if (JOIN_DEFINITION_RE.test(nodeClass)) {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n\n if (variableValues.length === 0) {\n throw new Error(`No values found for path '${path}' in data ${data}.`);\n }\n else {\n const arrayData = variableValues[0];\n if(!Array.isArray(arrayData)) {\n throw new Error(`Values found for path '${path}' in data ${data} is not an array: ${arrayData}.`);\n }\n else {\n context.$class = `${CommonMarkModel.NAMESPACE}.Text`;\n const drafter = getDrafter(context.elementType);\n context.text = joinList(arrayData.map( arrayItem => {\n return drafter ? drafter(arrayItem, context.format) : arrayItem as string;\n }), context, options);\n delete context.elementType;\n delete context.name;\n delete context.separator;\n delete context.locale;\n delete context.type;\n delete context.style;\n delete context.nodes;\n stopHere = true; // do not process child nodes, we've already done it above...\n }\n }\n }\n\n // add a 'value' property to VariableDefinition\n // with the value of the variable from 'data'\n else if (VARIABLE_DEFINITION_RE.test(nodeClass) ||\n ENUM_VARIABLE_DEFINITION_RE.test(nodeClass) ||\n FORMATTED_VARIABLE_DEFINITION_RE.test(nodeClass)) {\n if(typeof data === 'object') {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n if (variableValues.length === 0) {\n throw new Error(`No values found for path '${path}' in data ${data}.`);\n }\n else {\n // convert the value to a string, optionally using the formatter\n const variableValue = variableValues[0];\n const type = (ModelUtil as any).isPrimitiveType(context.elementType) ? null : introspector.getClassDeclaration(context.elementType);\n // we want to draft Enums as strings, not objects\n const drafter = getDrafter(type && type.isEnum() ? 'String' : context.elementType);\n context.value = drafter ? drafter(variableValue, context.format) : JSON.stringify(variableValue) as string;\n }\n }\n else {\n // a list of enum values or primitives brings us here\n const variableValue = data;\n const type = (ModelUtil as any).isPrimitiveType(context.elementType) ? null : introspector.getClassDeclaration(context.elementType);\n // we want to draft Enums as strings, not objects\n const drafter = getDrafter(type && type.isEnum() ? 'String' : context.elementType);\n context.value = drafter ? drafter(variableValue, context.format) : JSON.stringify(variableValue) as string;\n }\n }\n\n // add a 'isTrue' property to ConditionDefinition\n // with the result of evaluating the JS code or a boolean property\n else if (CONDITIONAL_DEFINITION_RE.test(nodeClass)) {\n if (context.condition) {\n checkCode(context.condition);\n context.isTrue = !!evaluateJavaScript(clauseLibrary, data, context.condition.contents, options) as unknown as boolean;\n }\n else {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n if (variableValues && variableValues.length) {\n if(variableValues.length === 1) {\n context.isTrue = !!variableValues[0];\n }\n else {\n throw new Error(`Multiple values found for path '${path}' in data ${data}.`);\n }\n }\n else {\n context.isTrue = false;\n }\n }\n context.nodes = context.isTrue ? context.whenTrue : context.whenFalse;\n delete context.condition;\n delete context.dependencies;\n delete context.functionName;\n }\n\n // only include the children of a clause if its condition is true\n else if (CLAUSE_DEFINITION_RE.test(nodeClass)) {\n if (context.condition) {\n checkCode(context.condition);\n const result = !!evaluateJavaScript(clauseLibrary, data, context.condition.contents, options) as unknown as boolean;\n if(!result) {\n delete context.nodes;\n stopHere = true;\n }\n }\n delete context.condition;\n delete context.functionName;\n }\n\n // add a 'hasSome' property to OptionalDefinition\n else if (OPTIONAL_DEFINITION_RE.test(nodeClass)) {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n if (variableValues && variableValues.length) {\n if(variableValues.length === 1) {\n context.hasSome = true;\n context.whenNone = [];\n }\n else {\n throw new Error(`Multiple values found for path '${path}' in data ${data}.`);\n }\n }\n else {\n context.hasSome = false;\n context.whenSome = [];\n }\n context.nodes = context.hasSome ? context.whenSome : context.whenNone;\n }\n }\n this.update(context, stopHere);\n });\n}\n\n/**\n * A template engine: merges the markup and logic of a template with\n * JSON data to produce JSON data.\n */\nexport class TemplateMarkInterpreter {\n modelManager: ModelManager;\n templateClass: ClassDeclaration;\n clauseLibrary: object;\n\n constructor(modelManager: ModelManager, clauseLibrary:object, templateConceptFqn?: string) {\n this.modelManager = modelManager;\n this.clauseLibrary = clauseLibrary;\n this.templateClass = getTemplateClassDeclaration(this.modelManager,templateConceptFqn);\n }\n\n /**\n * Checks that a TemplateMark JSON document is valid with respect to the\n * TemplateMark model, as well as the template model.\n *\n * Checks:\n * 1. Variable names are valid properties in the template model\n * 2. Optional properties have guards\n * @param {*} templateMark the TemplateMark JSON object\n * @returns {*} TemplateMark JSON that has been typed checked and has type metadata added\n * @throws {Error} if the templateMark document is invalid\n */\n checkTypes(templateMark: object): object {\n const modelManager = new ModelManager({ strict: true });\n modelManager.addCTOModel(ConcertoMetaModel.MODEL, 'concertometamodel.cto');\n modelManager.addCTOModel(CommonMarkModel.MODEL, 'commonmark.cto');\n modelManager.addCTOModel(TemplateMarkModel.MODEL, 'templatemark.cto');\n const factory = new Factory(modelManager);\n const serializer = new Serializer(factory, modelManager);\n try {\n serializer.fromJSON(templateMark);\n return templateMark;\n }\n catch(err) {\n throw new Error(`Generated invalid agreement: ${err}: ${JSON.stringify(templateMark, null, 2)}`);\n }\n }\n\n /**\n * Compiles the code nodes containing TS to code nodes containing JS.\n * @param {*} templateMark the TemplateMark JSON object\n * @returns {*} TemplateMark JSON with JS nodes\n * @throws {Error} if the templateMark document is invalid\n */\n async compileTypeScriptToJavaScript(templateMark: object) : Promise<object> {\n const templateConcept = (templateMark as any).nodes[0].elementType;\n if(!templateConcept) {\n throw new Error('TemplateMark is not typed');\n }\n const compiler = new TemplateMarkToJavaScriptCompiler(this.modelManager, templateConcept);\n await compiler.initialize();\n return compiler.compile(templateMark);\n }\n\n validateCiceroMark(ciceroMark: object) {\n const modelManager = new ModelManager({ strict: true });\n modelManager.addCTOModel(ConcertoMetaModel.MODEL, 'concertometamodel.cto');\n modelManager.addCTOModel(CommonMarkModel.MODEL, 'commonmark.cto');\n modelManager.addCTOModel(CiceroMarkModel.MODEL, 'ciceromark.cto');\n const factory = new Factory(modelManager);\n const serializer = new Serializer(factory, modelManager);\n try {\n return serializer.fromJSON(ciceroMark);\n }\n catch(err) {\n throw new Error(`Generated invalid agreement: ${err}: ${JSON.stringify(ciceroMark, null, 2)}`);\n }\n }\n\n async generate(templateMark: object, data: TemplateData, options?:GenerationOptions): Promise<any> {\n const factory = new Factory(this.modelManager);\n const serializer = new Serializer(factory, this.modelManager);\n const templateData = serializer.fromJSON(data);\n if (templateData.getFullyQualifiedType() !== this.templateClass.getFullyQualifiedName()) {\n throw new Error(`Template data must be of type '${this.templateClass.getFullyQualifiedName()}'.`);\n }\n const typedTemplateMark = this.checkTypes(templateMark);\n const jsTemplateMark = await this.compileTypeScriptToJavaScript(typedTemplateMark);\n const ciceroMark = generateAgreement(this.modelManager, this.clauseLibrary, jsTemplateMark, data, options);\n return this.validateCiceroMark(ciceroMark);\n }\n}"],"names":["draftLongFormat","draftLong","CurrencyCode","TemplateMarkModel","existsSync","mkdirSync","rmSync","Introspector","templatemarkutil","CodeGen","InMemoryWriter","createDefaultMapFromNodeModules","createDefaultMapFromCDN","lzstring","twoslasher","CodeType","checkCode","CiceroMarkModel","CommonMarkModel","ModelUtil","ModelManager","ConcertoMetaModel","Factory","Serializer"],"mappings":"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"}