@ostack.tech/ui-kform-scaffolder 0.15.3 → 0.15.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ostack-ui-kform-scaffolder.js","names":[],"sources":["../src/configs/DefaultLocaleConfig.tsx","../src/configs/SerializationFormatConfig.tsx","../src/configs/UseTableValuesSerializerConfig.tsx","../src/scaffolding/scaffolders/scaffoldActions.ts","../src/scaffolding/scaffolders/scaffoldApi.ts","../src/scaffolding/scaffolders/scaffoldIssueMessages.ts","../src/scaffolding/scaffolders/scaffoldPageComponents.ts","../src/scaffolding/scaffolders/scaffoldSerializer.ts","../src/util/arrayify.ts","../src/SchematicKind.ts","../src/scaffolding/reactApp/util/reactAppLayout.ts","../src/scaffolding/scaffolders/scaffoldAppComponent.ts","../src/scaffolding/scaffolders/scaffoldAppContext.ts","../src/scaffolding/scaffolders/scaffoldExternalContexts.ts","../src/scaffolding/scaffolders/scaffoldGradleProject.ts","../src/scaffolding/templates/gradle/wrapper/gradle-wrapper.jar?url","../src/scaffolding/scaffolders/scaffoldGradleWrapper.ts","../src/scaffolding/scaffolders/scaffoldMain.ts","../src/scaffolding/scaffolders/scaffoldProjectMisc.ts","../src/scaffolding/scaffolders/scaffoldResponses.ts","../src/scaffolding/scaffolders/scaffoldStyles.ts","../src/scaffolding/scaffolders/scaffoldViteProject.ts","../src/SchematicBuilder.tsx"],"sourcesContent":["import { useConfig } from \"@ostack.tech/kform-scaffolder\";\n\nexport interface DefaultLocaleConfigProps {\n defaultValue?: string;\n disabled?: boolean;\n}\n\nexport const DEFAULT_LOCALE = \"en-US\";\n// eslint-disable-next-line react-refresh/only-export-components\nexport const LOCALES: string[] = JSON.parse(import.meta.env.VITE_LOCALES);\n\nexport function DefaultLocaleConfig({\n defaultValue = DEFAULT_LOCALE,\n disabled,\n}: DefaultLocaleConfigProps) {\n const [config, setConfig] = useConfig(\"defaultLocale\", defaultValue);\n return (\n <div className=\"builder-config-field\">\n <label>Default locale</label>\n <select\n value={config}\n onChange={(evt) => {\n setConfig(evt.target.value);\n }}\n disabled={disabled}\n >\n {LOCALES.map((locale) => (\n <option key={locale} value={locale}>\n {locale}\n </option>\n ))}\n </select>\n </div>\n );\n}\n","import { useConfig } from \"@ostack.tech/kform-scaffolder\";\nimport { useRef } from \"react\";\n\nexport type SerializationFormat = \"json\" | \"xml\";\n\nexport interface SerializationFormatConfigProps {\n defaultValue?: SerializationFormat;\n disabled?: boolean;\n}\n\nexport const DEFAULT_SERIALIZATION_FORMAT = \"json\";\n\nexport function SerializationFormatConfig({\n defaultValue = DEFAULT_SERIALIZATION_FORMAT,\n disabled,\n}: SerializationFormatConfigProps) {\n const [useTableValuesSerializerConfig, setUseTableValuesSerializerConfig] =\n useConfig(\"useTableValuesSerializer\", false);\n const lastUseTableValuesSerializerConfig = useRef(\n useTableValuesSerializerConfig,\n );\n const [config, setConfig] = useConfig(\"serializationFormat\", defaultValue);\n return (\n <div className=\"builder-config-field\">\n <label>Serialization format</label>\n <select\n value={config}\n onChange={(evt) => {\n setConfig(evt.target.value as SerializationFormat);\n if (evt.target.value === \"xml\") {\n lastUseTableValuesSerializerConfig.current =\n useTableValuesSerializerConfig;\n setUseTableValuesSerializerConfig(true);\n } else {\n setUseTableValuesSerializerConfig(\n lastUseTableValuesSerializerConfig.current,\n );\n }\n }}\n disabled={disabled}\n >\n <option value=\"json\">JSON</option>\n <option value=\"xml\">XML</option>\n </select>\n </div>\n );\n}\n","import {\n useConfig,\n UseTableValuesSerializerConfig as KFormUseTableValuesSerializerConfig,\n} from \"@ostack.tech/kform-scaffolder\";\n\nimport { DEFAULT_SERIALIZATION_FORMAT } from \"./SerializationFormatConfig.tsx\";\n\nexport interface UseTableValuesSerializerConfigProps {\n disabled?: boolean;\n}\n\nexport function UseTableValuesSerializerConfig({\n disabled,\n}: UseTableValuesSerializerConfigProps) {\n const [serializationFormatConfig] = useConfig(\n \"serializationFormat\",\n DEFAULT_SERIALIZATION_FORMAT,\n );\n return (\n <KFormUseTableValuesSerializerConfig\n disabled={disabled || serializationFormatConfig === \"xml\"}\n />\n );\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { camelCase, kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport loadTsxEjs from \"../templates/react-app/src/actions/Load.tsx.ejs?raw\";\nimport saveTsxEjs from \"../templates/react-app/src/actions/Save.tsx.ejs?raw\";\nimport submitTsxEjs from \"../templates/react-app/src/actions/Submit.tsx.ejs?raw\";\nimport validateTsxEjs from \"../templates/react-app/src/actions/Validate.tsx.ejs?raw\";\n\nexport function scaffoldActions(schematic: Schematic, data: ReactAppData) {\n const ejsData = {\n kmpModuleName: data.kmpModuleName ?? `${kebabCase(schematic.name!)}-shared`,\n serializationFormat: data.serializationFormat ?? \"json\",\n serializationMimeType: `application/${data.serializationFormat}`,\n formVar: camelCase(schematic.name!),\n formClass: schematic.name,\n useTableValuesSerializer: data.useTableValuesSerializer,\n };\n\n addEjsTemplateFile(data, \"actions/Load.tsx\", loadTsxEjs, ejsData);\n addEjsTemplateFile(data, \"actions/Save.tsx\", saveTsxEjs, ejsData);\n addEjsTemplateFile(data, \"actions/Submit.tsx\", submitTsxEjs, ejsData);\n addEjsTemplateFile(data, \"actions/Validate.tsx\", validateTsxEjs, ejsData);\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { camelCase, kebabCase } from \"change-case\";\n\nimport { DEFAULT_SERIALIZATION_FORMAT } from \"../../configs/SerializationFormatConfig.tsx\";\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport apiFetchTsEjs from \"../templates/react-app/src/api/apiFetch.ts.ejs?raw\";\nimport reportErrorTsEjs from \"../templates/react-app/src/api/reportError.ts.ejs?raw\";\nimport submitTsEjs from \"../templates/react-app/src/api/submit.ts.ejs?raw\";\n\nexport const DEFAULT_API_BASE_PATH = \"/api/\";\nexport const DEFAULT_REPORT_ERROR_API_ENDPOINT = \"report-error\";\nexport const DEFAULT_SUBMIT_API_ENDPOINT = \"submit\";\n\nexport function scaffoldApi(schematic: Schematic, data: ReactAppData) {\n const ejsData = {\n kmpModuleName: data.kmpModuleName ?? `${kebabCase(schematic.name!)}-shared`,\n serializationFormat:\n data.serializationFormat ?? DEFAULT_SERIALIZATION_FORMAT,\n serializationMimeType: `application/${data.serializationFormat}`,\n formVar: camelCase(schematic.name!),\n formClass: schematic.name,\n apiBasePath: data.apiBasePath ?? DEFAULT_API_BASE_PATH,\n reportErrorApiEndpoint:\n data.reportErrorApiEndpoint ?? DEFAULT_REPORT_ERROR_API_ENDPOINT,\n submitApiEndpoint: data.submitApiEndpoint ?? DEFAULT_SUBMIT_API_ENDPOINT,\n };\n\n addEjsTemplateFile(data, \"api/apiFetch.ts\", apiFetchTsEjs, ejsData);\n addEjsTemplateFile(data, \"api/reportError.ts\", reportErrorTsEjs, ejsData);\n addEjsTemplateFile(data, \"api/submit.ts\", submitTsEjs, ejsData);\n}\n","import {\n code,\n joinPaths,\n type Schematic,\n type TsFile,\n tsFile,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { constantCase, kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\n\nconst DEFAULT_SCAFFOLD_ISSUE_MESSAGES = true;\n\nexport function scaffoldIssueMessages(\n schematic: Schematic,\n data: ReactAppData,\n) {\n if (!shouldScaffoldIssueMessages(data)) {\n return;\n }\n\n const fileName = joinPaths(\n data.currentDir,\n `${schematic.name}IssueMessages.tsx`,\n );\n let file = data.files.get(fileName) as TsFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = tsFile()));\n }\n scaffoldIssueMessagesConstant(schematic, {\n kmpModuleName: `${kebabCase(data.rootSchematic.name!)}-shared`,\n ...data,\n currentFile: file,\n });\n}\n\nexport function shouldScaffoldIssueMessages(data: ReactAppData) {\n return data.scaffoldIssueMessages ?? DEFAULT_SCAFFOLD_ISSUE_MESSAGES;\n}\n\nfunction scaffoldIssueMessagesConstant(\n schematic: Schematic,\n data: ReactAppData,\n) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"IssueMessagesByCode\",\n isType: true,\n });\n data.currentFile.declarations.push(code`\n export const ${constantCase(schematic.name!)}_ISSUE_MESSAGES: Record<string, IssueMessagesByCode> = {};\n `);\n}\n","import {\n code,\n joinPaths,\n type Schematic,\n type TsFile,\n tsFile,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { kebabCase, sentenceCase } from \"change-case\";\n\nimport type { SchematicKind } from \"../../SchematicKind.ts\";\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport { reactAppLayout } from \"../reactApp/util/reactAppLayout.ts\";\nimport { scaffoldIssueMessages } from \"./scaffoldIssueMessages.ts\";\n\nexport function scaffoldPageComponents(\n schematic: Schematic,\n data: ReactAppData,\n) {\n const layout = reactAppLayout(schematic, {\n kmpModuleName: `${kebabCase(schematic.name!)}-shared`,\n ...data,\n });\n for (const annex of layout) {\n for (const formPage of annex.formPages) {\n scaffoldPageComponent(formPage.schematic, formPage.data);\n if (formPage.data.currentPath !== \"/\") {\n scaffoldIssueMessages(formPage.schematic, formPage.data);\n }\n }\n }\n}\n\nfunction scaffoldPageComponent(schematic: Schematic, data: ReactAppData) {\n const fileName = joinPaths(data.currentDir, `${schematic.name}.tsx`);\n let file = data.files.get(fileName) as TsFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = tsFile()));\n }\n scaffoldPageComponentDeclarations(schematic, {\n kmpModuleName: `${kebabCase(data.rootSchematic.name!)}-shared`,\n ...data,\n currentFile: file,\n });\n}\n\nfunction scaffoldPageComponentDeclarations(\n schematic: Schematic,\n data: ReactAppData,\n) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Grid\",\n });\n\n data.currentFile.declarations.push(code`\n export function ${schematic.name}() {\n return (\n <Grid container>\n ${schematic\n .children!.map(\n (child) =>\n code`\n <Grid xs={12}>\n ${scaffoldField(child, {\n ...data,\n currentPath: child.childName,\n })}\n </Grid>\n `,\n )\n .join(\"\\n\\n\")}\n </Grid>\n );\n }\n `);\n}\n\nexport function scaffoldField(schematic: Schematic, data: ReactAppData) {\n const schematicKind = data.schematicKinds.get(\n schematic.kind,\n ) as SchematicKind;\n if (!schematicKind) {\n throw new Error(`Unknown schematic kind ${schematic.kind}`);\n }\n\n if (schematicKind.scaffoldField) {\n return schematicKind.scaffoldField?.(schematic, data);\n }\n\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"ControlField\",\n });\n\n let controlModuleName: string | undefined;\n let controlName: string | undefined;\n if (schematicKind.control) {\n const controlSeparator = schematicKind.control.lastIndexOf(\".\");\n controlModuleName = schematicKind.control.slice(0, controlSeparator);\n controlName = schematicKind.control.slice(controlSeparator + 1);\n data.currentFile.imports.push({\n moduleName: controlModuleName,\n name: controlName,\n });\n }\n\n let control = schematicKind.scaffoldControl?.(schematic, data);\n if (!control) {\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n control = [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n `<${controlName!} />`,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n }\n\n return code`\n <ControlField path=\"${data.currentPath}\">\n ${control}\n </ControlField>\n `;\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { camelCase, constantCase } from \"change-case\";\n\nimport type { KtData } from \"../kotlin/KtData.ts\";\nimport jsonSerializerKt from \"../templates/shared/src/commonMain/kotlin/JsonSerializer.kt.ejs?raw\";\nimport xmlSerializerKt from \"../templates/shared/src/commonMain/kotlin/XmlSerializer.kt.ejs?raw\";\n\nexport const DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION = true;\n\nexport function scaffoldSerializer(schematic: Schematic, data: KtData): void {\n const ejsData = {\n filePackage: data.currentPackage,\n formVar: camelCase(schematic.name!),\n formClass: schematic.name,\n formConstant: constantCase(schematic.name!),\n includeSerializationFormatVersion:\n data.includeSerializationFormatVersion ??\n DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION,\n };\n\n addEjsTemplateFile(\n data,\n `${schematic.name}Serializer.kt`,\n data.serializationFormat === \"xml\" ? xmlSerializerKt : jsonSerializerKt,\n ejsData,\n );\n}\n","export function arrayify<T>(value: T | T[] | null | undefined): T[] {\n return value == null ? [] : Array.isArray(value) ? value : [value];\n}\n","import {\n annotate,\n anySchematicKind as kFormAnySchematicKind,\n bigDecimalSchematicKind as kFormBigDecimalSchematicKind,\n bigIntegerSchematicKind as kFormBigIntegerSchematicKind,\n booleanSchematicKind as kFormBooleanSchematicKind,\n byteSchematicKind as kFormByteSchematicKind,\n classSchematicKind as kFormClassSchematicKind,\n code,\n createSchematic,\n doubleSchematicKind as kFormDoubleSchematicKind,\n enumSchematicKind as kFormEnumSchematicKind,\n fileSchematicKind as kFormFileSchematicKind,\n floatSchematicKind as kFormFloatSchematicKind,\n intSchematicKind as kFormIntSchematicKind,\n joinPaths,\n ListableBuilderWithoutKindSelect,\n listSchematicKind as kFormListSchematicKind,\n localDateSchematicKind as kFormLocalDateSchematicKind,\n longSchematicKind as kFormLongSchematicKind,\n type Schematic,\n type SchematicKind as KFormSchematicKind,\n shortSchematicKind as kFormShortSchematicKind,\n stringSchematicKind as kFormStringSchematicKind,\n tableSchematicKind as kFormTableSchematicKind,\n} from \"@ostack.tech/kform-scaffolder\";\nimport {\n camelCase,\n capitalCase,\n constantCase,\n pascalCase,\n sentenceCase,\n} from \"change-case\";\n\nimport type { KtData } from \"./scaffolding/kotlin/KtData.ts\";\nimport type { ReactAppData } from \"./scaffolding/reactApp/ReactAppData.ts\";\nimport { scaffoldField } from \"./scaffolding/scaffolders/scaffoldPageComponents.ts\";\nimport { DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION } from \"./scaffolding/scaffolders/scaffoldSerializer.ts\";\nimport { arrayify } from \"./util/arrayify.ts\";\n\nexport interface SchematicKind extends KFormSchematicKind {\n // Override KForm data types with this package's\n defaultValue: string | ((schematic: Schematic, data: KtData) => string);\n propertyAnnotations?:\n | string\n | string[]\n | ((schematic: Schematic, data: KtData) => string | string[] | undefined);\n scaffoldModel?: (schematic: Schematic, data: KtData) => string;\n scaffoldType?: (schematic: Schematic, data: KtData) => string;\n scaffoldSchema?: (schematic: Schematic, data: KtData) => string;\n\n // New schematic properties\n control?: string;\n scaffoldControl?: (schematic: Schematic, data: ReactAppData) => string;\n scaffoldField?: (schematic: Schematic, data: ReactAppData) => string;\n}\n\nexport const anySchematicKind: SchematicKind = {\n ...kFormAnySchematicKind,\n};\nexport const bigDecimalSchematicKind: SchematicKind = {\n ...kFormBigDecimalSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const bigIntegerSchematicKind: SchematicKind = {\n ...kFormBigIntegerSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const booleanSchematicKind: SchematicKind = {\n ...kFormBooleanSchematicKind,\n control: \"@ostack.tech/ui-kform.CheckboxControl\",\n scaffoldControl: (schematic, data) =>\n data.omitLabel\n ? `<CheckboxControl />`\n : `<CheckboxControl>${sentenceCase(schematic.childName!)}</CheckboxControl>`,\n};\nexport const byteSchematicKind: SchematicKind = {\n ...kFormByteSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const classAnnexSchematicKind: SchematicKind = {\n ...kFormClassSchematicKind,\n defaultPackageSuffix: (childName) => `annexes.${childName.toLowerCase()}`,\n kind: \"Class (Annex)\",\n};\nexport const classFormPageSchematicKind: SchematicKind = {\n ...kFormClassSchematicKind,\n kind: \"Class (FormPage)\",\n nullable: false,\n};\nexport const classSchematicKind: SchematicKind = {\n ...kFormClassSchematicKind,\n nullable: false,\n scaffoldModel: (schematic, data) => {\n const baseModel = kFormClassSchematicKind.scaffoldModel!(schematic, data);\n if (data.currentPath !== \"/\") {\n return baseModel;\n }\n\n const classAnnotations: string[] = [];\n let versionProperty: string | null = null;\n\n if (data.serializationFormat === \"xml\") {\n data.currentFile.imports.add(\n \"nl.adaptivity.xmlutil.serialization.XmlSerialName\",\n );\n const namespace =\n data.xmlNamespace ??\n `http://${data\n .currentPackage!.split(\".\")\n .reverse()\n .join(\".\")}/schema/${new Date().getFullYear()}`;\n classAnnotations.push(\n `@XmlSerialName(\"${schematic.name}\", \"${namespace}\")`,\n );\n }\n\n if (\n data.includeSerializationFormatVersion ??\n DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION\n ) {\n data.currentFile.imports\n .add(\"kotlinx.serialization.EncodeDefault\")\n .add(\"kotlinx.serialization.ExperimentalSerializationApi\");\n const versionAnnotations = [\n \"@EncodeDefault\",\n \"@OptIn(ExperimentalSerializationApi::class)\",\n ];\n\n if (data.serializationFormat === \"xml\") {\n data.currentFile.imports.add(\n \"nl.adaptivity.xmlutil.serialization.XmlElement\",\n );\n versionAnnotations.push(\"@XmlElement(false)\");\n } else {\n data.currentFile.imports.add(\"kotlinx.serialization.SerialName\");\n versionAnnotations.push('@SerialName($$\"$version\")');\n }\n\n versionProperty = annotate(\n versionAnnotations,\n `internal var version = ${constantCase(schematic.name!)}_SERIALIZATION_VERSION`,\n );\n }\n\n return (\n annotate(classAnnotations, baseModel) +\n (versionProperty\n ? ` ${code`\n {\n ${versionProperty}\n }\n `}`\n : \"\")\n );\n },\n scaffoldField: (schematic, data) => {\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui\", name: \"FieldGroup\" },\n { moduleName: \"@ostack.tech/ui\", name: \"FieldGroupHeader\" },\n { moduleName: \"@ostack.tech/ui\", name: \"FieldGroupTitle\" },\n { moduleName: \"@ostack.tech/ui\", name: \"FieldGroupBody\" },\n { moduleName: \"@ostack.tech/ui\", name: \"Grid\" },\n );\n\n return code`\n <FieldGroup>\n <FieldGroupHeader>\n <FieldGroupTitle>${capitalCase(schematic.name!)}</FieldGroupTitle>\n </FieldGroupHeader>\n\n <FieldGroupBody>\n <Grid container>\n ${schematic\n .children!.map(\n (child) =>\n code`\n <Grid xs={12}>\n ${scaffoldField(child, {\n ...data,\n currentPath: joinPaths(\n data.currentPath,\n child.childName,\n ),\n })}\n </Grid>\n `,\n )\n .join(\"\\n\\n\")}\n </Grid>\n </FieldGroupBody>\n </FieldGroup>\n `;\n },\n};\nexport const doubleSchematicKind: SchematicKind = {\n ...kFormDoubleSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const enumSchematicKind: SchematicKind = {\n ...kFormEnumSchematicKind,\n kind: \"Enum\",\n internal: true,\n nullable: false,\n};\nexport const enumSelectSchematicKind: SchematicKind = {\n ...kFormEnumSchematicKind,\n kind: \"Enum (Select)\",\n control: \"@ostack.tech/ui-kform.SelectControl\",\n scaffoldControl: (schematic, data) => {\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n data.currentFile.imports.push({\n moduleName: data.kmpModuleName!,\n name: schematic.name!,\n });\n return [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n code`\n <SelectControl\n options={[\n ${schematic\n .children!.map(\n (child) =>\n `{ value: ${schematic.name}.${\n child.childName\n }, text: ${JSON.stringify(sentenceCase(child.childName!))} }`,\n )\n .join(\",\\n\")}\n ]}\n />\n `,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n },\n};\nexport const enumRadioGroupSchematicKind: SchematicKind = {\n ...kFormEnumSchematicKind,\n kind: \"Enum (RadioGroup)\",\n control: \"@ostack.tech/ui-kform.RadioGroupControl\",\n scaffoldControl: (schematic, data) => {\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n data.currentFile.imports.push({\n moduleName: data.kmpModuleName!,\n name: schematic.name!,\n });\n return [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n code`\n <RadioGroupControl\n options={[\n ${schematic\n .children!.map(\n (child) =>\n `{ value: ${schematic.name}.${\n child.childName\n }, text: ${JSON.stringify(sentenceCase(child.childName!))} }`,\n )\n .join(\",\\n\")}\n ]}\n />\n `,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n },\n};\nexport const fileSchematicKind: SchematicKind = {\n ...kFormFileSchematicKind,\n nullable: true,\n control: \"@ostack.tech/ui-kform.FileControl\",\n};\nexport const floatSchematicKind: SchematicKind = {\n ...kFormFloatSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const intSchematicKind: SchematicKind = {\n ...kFormIntSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const listCheckboxGroupSchematicKind: SchematicKind = {\n ...kFormListSchematicKind,\n kind: \"List<Enum> (CheckboxGroup)\",\n nullable: false,\n initChildren: (childName) => [\n createSchematic({\n kind: \"Enum\",\n name: pascalCase(childName),\n nullable: false,\n children: [],\n }),\n ],\n builder: ListableBuilderWithoutKindSelect,\n control: \"@ostack.tech/ui-kform.CheckboxGroupControl\",\n scaffoldControl: (schematic, data) => {\n const childSchematic = schematic.children![0];\n if (childSchematic.kind !== \"Enum\") {\n throw new Error(\"Invalid child kind.\");\n }\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n data.currentFile.imports.push({\n moduleName: data.kmpModuleName!,\n name: childSchematic.name!,\n });\n return [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n code`\n <CheckboxGroupControl\n options={[\n ${childSchematic\n .children!.map(\n (child) =>\n `{ value: ${childSchematic.name}.${\n child.childName\n }, text: ${JSON.stringify(sentenceCase(child.childName!))} }`,\n )\n .join(\",\\n\")}\n ]}\n />\n `,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n },\n};\nexport const listSelectMultipleSchematicKind: SchematicKind = {\n ...kFormListSchematicKind,\n kind: \"List<Enum> (SelectMultiple)\",\n nullable: false,\n initChildren: (childName) => [\n createSchematic({\n kind: \"Enum\",\n name: pascalCase(childName),\n nullable: false,\n children: [],\n }),\n ],\n builder: ListableBuilderWithoutKindSelect,\n control: \"@ostack.tech/ui-kform.SelectMultipleControl\",\n scaffoldControl: (schematic, data) => {\n const childSchematic = schematic.children![0];\n if (childSchematic.kind !== \"Enum\") {\n throw new Error(\"Invalid child kind.\");\n }\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n data.currentFile.imports.push({\n moduleName: data.kmpModuleName!,\n name: childSchematic.name!,\n });\n return [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n code`\n <SelectMultipleControl\n options={[\n ${childSchematic\n .children!.map(\n (child) =>\n `{ value: ${childSchematic.name}.${\n child.childName\n }, text: ${JSON.stringify(sentenceCase(child.childName!))} }`,\n )\n .join(\",\\n\")}\n ]}\n />\n `,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n },\n};\nexport const localDateSchematicKind: SchematicKind = {\n ...kFormLocalDateSchematicKind,\n nullable: true,\n control: \"@ostack.tech/ui-kform.DateControl\",\n};\nexport const longSchematicKind: SchematicKind = {\n ...kFormLongSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const shortSchematicKind: SchematicKind = {\n ...kFormShortSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const stringSchematicKind: SchematicKind = {\n ...kFormStringSchematicKind,\n control: \"@ostack.tech/ui-kform.TextControl\",\n};\nexport const tableAnnexesSchematicKind: SchematicKind = {\n ...kFormTableSchematicKind,\n kind: \"Table (Annexes)\",\n nullable: false,\n builder: ListableBuilderWithoutKindSelect,\n initChildren: (childName) => [\n createSchematic({\n kind: \"Class (Annex)\",\n packageSuffix: `annexes.${childName.toLowerCase()}`,\n name: pascalCase(childName),\n nullable: false,\n children: [],\n }),\n ],\n propertyAnnotations: (schematic, data) => {\n const annotations = arrayify(\n typeof kFormTableSchematicKind.propertyAnnotations === \"function\"\n ? kFormTableSchematicKind.propertyAnnotations?.(schematic, data)\n : kFormTableSchematicKind.propertyAnnotations,\n );\n if (data.serializationFormat === \"xml\") {\n data.currentFile.imports.add(\n \"nl.adaptivity.xmlutil.serialization.XmlChildrenName\",\n );\n annotations.push(\n `@XmlChildrenName(\"${camelCase(schematic.children![0].name!)}\")`,\n );\n }\n return annotations;\n },\n};\nexport const tableSchematicKind: SchematicKind = {\n ...kFormTableSchematicKind,\n nullable: false,\n builder: ListableBuilderWithoutKindSelect,\n initChildren: (childName) => [\n createSchematic({\n kind: \"Class\",\n name: `${pascalCase(childName)}Row`,\n nullable: false,\n children: [],\n }),\n ],\n propertyAnnotations: tableAnnexesSchematicKind.propertyAnnotations,\n control: \"@ostack.tech/ui-kform.TableControl\",\n scaffoldControl: (schematic, data) => {\n const rowSchematic = schematic.children![0];\n if (rowSchematic.kind !== \"Class\") {\n throw new Error(\"Table child schematic is not of Class kind.\");\n }\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui\", name: \"Label\" },\n {\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"tableControlIndexColumn\",\n },\n {\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"tableControlActionsColumn\",\n },\n {\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"TableControlAddRowTrigger\",\n },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"TableControlContent\" },\n );\n\n return code`\n <TableControl\n columns={[\n tableControlIndexColumn(),\n ${rowSchematic\n .children!.map(\n (child) => code`\n {\n label: ${JSON.stringify(sentenceCase(child.childName!))},\n render: () => (\n ${scaffoldField(child, {\n ...data,\n omitLabel: true,\n currentPath: child.childName!,\n })}\n )\n }\n `,\n )\n .join(\",\\n\")},\n tableControlActionsColumn()\n ]}\n >\n <Label>${sentenceCase(schematic.childName!)}</Label>\n <TableControlAddRowTrigger />\n <TableControlContent />\n </TableControl>\n `;\n },\n};\n\nexport const defaultSchematicKinds = [\n anySchematicKind,\n bigDecimalSchematicKind,\n bigIntegerSchematicKind,\n booleanSchematicKind,\n byteSchematicKind,\n classSchematicKind,\n classAnnexSchematicKind,\n classFormPageSchematicKind,\n doubleSchematicKind,\n enumSchematicKind,\n enumSelectSchematicKind,\n enumRadioGroupSchematicKind,\n fileSchematicKind,\n floatSchematicKind,\n intSchematicKind,\n listCheckboxGroupSchematicKind,\n listSelectMultipleSchematicKind,\n localDateSchematicKind,\n longSchematicKind,\n shortSchematicKind,\n stringSchematicKind,\n tableAnnexesSchematicKind,\n tableSchematicKind,\n];\n","import { joinPaths, type Schematic } from \"@ostack.tech/kform-scaffolder\";\nimport { camelCase } from \"change-case\";\n\nimport {\n classAnnexSchematicKind,\n classFormPageSchematicKind,\n tableAnnexesSchematicKind,\n} from \"../../../SchematicKind.ts\";\nimport type { ReactAppData } from \"../ReactAppData.ts\";\n\nexport interface LayoutAnnex {\n schematic: Schematic;\n data: ReactAppData;\n formPages: LayoutFormPage[];\n}\n\nexport interface LayoutFormPage {\n schematic: Schematic;\n data: ReactAppData;\n}\n\nexport function reactAppLayout(\n schematic: Schematic,\n data: ReactAppData,\n): LayoutAnnex[] {\n const annexes: LayoutAnnex[] = [];\n if (\n schematic.children?.every(\n (child) =>\n child.kind === classAnnexSchematicKind.kind ||\n child.kind === tableAnnexesSchematicKind.kind,\n )\n ) {\n for (const annex of schematic.children) {\n if (annex.kind === classAnnexSchematicKind.kind) {\n annexes.push(\n layoutAnnex(annex, {\n ...data,\n currentPath: joinPaths(data.currentPath, annex.childName),\n currentDir: joinPaths(\n data.currentDir,\n annex.packageSuffix?.replaceAll(\".\", \"/\"),\n ),\n }),\n );\n } else {\n annexes.push(\n layoutRepetitiveAnnex(annex, {\n ...data,\n currentPath: joinPaths(data.currentPath, annex.childName),\n }),\n );\n }\n }\n } else if (\n schematic.children?.every(\n (child) => child.kind === classFormPageSchematicKind.kind,\n )\n ) {\n annexes.push(layoutAnnex(schematic, data));\n } else if (\n schematic.children?.some(\n (child) =>\n child.kind === classAnnexSchematicKind.kind ||\n child.kind === tableAnnexesSchematicKind.kind ||\n child.kind === classFormPageSchematicKind.kind,\n )\n ) {\n throw new Error(\n \"Annexes/form pages cannot be mixed with other kinds of fields.\",\n );\n } else {\n annexes.push(layoutAnnex(schematic, data));\n }\n return annexes;\n}\n\nfunction layoutRepetitiveAnnex(\n schematic: Schematic,\n data: ReactAppData,\n): LayoutAnnex {\n const childSchematic = schematic.children![0];\n return layoutAnnex(childSchematic, {\n ...data,\n currentPath: joinPaths(data.currentPath, \"*\"),\n currentDir: joinPaths(\n data.currentDir,\n childSchematic.packageSuffix?.replaceAll(\".\", \"/\"),\n ),\n });\n}\n\nfunction layoutAnnex(schematic: Schematic, data: ReactAppData): LayoutAnnex {\n if (\n schematic.children?.some(\n (child) =>\n child.kind === classAnnexSchematicKind.kind ||\n child.kind === tableAnnexesSchematicKind.kind,\n )\n ) {\n throw new Error(\n \"Annexes must only appear at the top level of the schematic.\",\n );\n }\n\n let formPages: LayoutFormPage[];\n if (\n schematic.children?.every(\n (child) => child.kind === classFormPageSchematicKind.kind,\n )\n ) {\n formPages = schematic.children?.map((formPage) => ({\n schematic: formPage,\n data: {\n ...data,\n currentPath: joinPaths(\n data.currentPath,\n camelCase(formPage.childName!),\n ),\n currentDir: joinPaths(\n data.currentDir,\n formPage.packageSuffix?.replaceAll(\".\", \"/\"),\n ),\n },\n }));\n } else if (\n schematic.children?.some(\n (child) => child.kind === classFormPageSchematicKind.kind,\n )\n ) {\n throw new Error(\"Form pages cannot be mixed with other kinds of fields.\");\n } else {\n formPages = [{ schematic, data }];\n }\n\n return { schematic, data, formPages };\n}\n","import {\n code,\n joinPaths,\n type Schematic,\n type TsFile,\n tsFile,\n} from \"@ostack.tech/kform-scaffolder\";\nimport {\n capitalCase,\n constantCase,\n kebabCase,\n sentenceCase,\n} from \"change-case\";\n\nimport { DEFAULT_LOCALE } from \"../../configs/DefaultLocaleConfig.tsx\";\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport {\n type LayoutAnnex,\n type LayoutFormPage,\n reactAppLayout,\n} from \"../reactApp/util/reactAppLayout.ts\";\nimport {\n scaffoldIssueMessages,\n shouldScaffoldIssueMessages,\n} from \"./scaffoldIssueMessages.ts\";\n\nexport const DEFAULT_ACTIVE_PATH_SEARCH_PARAM = \"page\";\n\nexport function scaffoldAppComponent(schematic: Schematic, data: ReactAppData) {\n const fileName = joinPaths(data.currentDir, `${schematic.name}App.tsx`);\n let file = data.files.get(fileName) as TsFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = tsFile()));\n }\n scaffoldAppComponentFile(schematic, {\n kmpModuleName: `${kebabCase(schematic.name!)}-shared`,\n ...data,\n currentFile: file,\n });\n scaffoldIssueMessages(schematic, data);\n}\n\nfunction scaffoldAppComponentFile(schematic: Schematic, data: ReactAppData) {\n const localeVar = (data.defaultLocale ?? DEFAULT_LOCALE).replaceAll(\"-\", \"\");\n const activePathSearchParam =\n data.activePathSearchParam ?? DEFAULT_ACTIVE_PATH_SEARCH_PARAM;\n\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/kform\", name: \"ktMapToObject\" },\n { moduleName: \"@ostack.tech/ui\", name: \"useSearchParam\" },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"FormApp\" },\n { moduleName: \"@ostack.tech/ui-kform\", name: localeVar },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"IssuesPanel\" },\n { moduleName: \"react\", name: \"useMemo\" },\n { moduleName: data.kmpModuleName!, name: `${schematic.name}FormMode` },\n { moduleName: data.kmpModuleName!, name: `${schematic.name}Schema` },\n { moduleName: `./api/reportError.ts`, name: \"reportError\" },\n {\n moduleName: `./${schematic.name}Context.ts`,\n name: `use${schematic.name}Context`,\n },\n );\n\n let issueMessagesProp = \"\";\n if (shouldScaffoldIssueMessages(data)) {\n data.currentFile.imports.push({\n moduleName: `./${schematic.name}IssueMessages.tsx`,\n name: `${constantCase(schematic.name!)}_ISSUE_MESSAGES`,\n });\n issueMessagesProp = `\\nissueMessages={${constantCase(schematic.name!)}_ISSUE_MESSAGES}`;\n }\n\n data.currentFile.declarations.push(code`\n export function ${schematic.name}App() {\n const { externalContexts } = use${schematic.name}Context();\n const [activePath, setActivePath] = useSearchParam(\"${activePathSearchParam}\");\n\n return (\n <FormApp\n schema={${schematic.name}Schema.get()}\n initialValue={\n externalContexts.mode !== ${schematic.name}FormMode.NEW\n ? externalContexts.initialValue\n : undefined\n }\n externalContexts={useMemo(\n () => ktMapToObject(externalContexts.toMap()),\n [externalContexts],\n )}\n readOnly={externalContexts.mode === ${schematic.name}FormMode.READ}\n validationMode={\n externalContexts.mode === ${schematic.name}FormMode.READ\n ? \"manual\"\n : \"auto\"\n }\n formTitle=\"${capitalCase(schematic.name!)}\"\n activePath={activePath}\n onActivePathChange={setActivePath}${issueMessagesProp}\n defaultLocale={${localeVar}}\n reportError={reportError}\n >\n ${scaffoldAppLayout(schematic, data)}\n\n <IssuesPanel />\n </FormApp>\n );\n }\n `);\n}\n\nexport function scaffoldAppLayout(\n schematic: Schematic,\n data: ReactAppData,\n scaffoldTopBarFn: (\n data: ReactAppData,\n annexesManager?: string,\n ) => string = scaffoldTopBar,\n): string {\n const layout = reactAppLayout(schematic, data);\n\n if (layout.length === 1 && layout[0].data.currentPath === \"/\") {\n return code`\n ${scaffoldTopBarFn(data)}\n\n ${scaffoldFormPages(data, layout[0])}\n `;\n }\n\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui-kform\", name: \"Annexes\" },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"AnnexesManager\" },\n );\n\n return code`\n <Annexes>\n ${scaffoldTopBarFn(data, \"<AnnexesManager />\")}\n\n ${layout.map((annex) => scaffoldAnnex(data, annex)).join(\"\\n\\n\")}\n </Annexes>\n `;\n}\n\nfunction scaffoldTopBar(data: ReactAppData, annexesManager?: string) {\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui-kform\", name: \"TopBar\" },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"TopBarActions\" },\n { moduleName: \"./actions/Load.tsx\", name: \"Load\" },\n { moduleName: \"./actions/Save.tsx\", name: \"Save\" },\n { moduleName: \"./actions/Validate.tsx\", name: \"Validate\" },\n { moduleName: \"./actions/Submit.tsx\", name: \"Submit\" },\n );\n\n return code`\n <TopBar>${annexesManager ? `\\n ${annexesManager}\\n` : \"\"}\n <TopBarActions>\n <Load />\n <Save />\n <Validate />\n <Submit />\n </TopBarActions>\n </TopBar>\n `;\n}\n\nfunction scaffoldAnnex(data: ReactAppData, annex: LayoutAnnex): string {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"Annex\",\n });\n\n return code`\n <Annex path=\"${annex.data.currentPath}\" title=\"${sentenceCase(annex.schematic.name!)}\"${\n annex.formPages.length === 1 &&\n annex.schematic === annex.formPages[0].schematic\n ? \" documentTitle={null}\"\n : \"\"\n }>\n ${scaffoldFormPages(data, annex)}\n </Annex>\n `;\n}\n\nfunction scaffoldFormPages(data: ReactAppData, annex: LayoutAnnex) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"FormPages\",\n });\n\n let formPagesNavigation = \"\";\n if (annex.formPages.length > 1) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"FormPagesNavigation\",\n });\n formPagesNavigation = \"\\n <FormPagesNavigation />\\n\";\n }\n\n return code`\n <FormPages>${formPagesNavigation}\n ${annex.formPages.map((formPage) => scaffoldFormPage(data, annex, formPage)).join(\"\\n\\n\")}\n </FormPages>\n `;\n}\n\nfunction scaffoldFormPage(\n data: ReactAppData,\n annex: LayoutAnnex,\n formPage: LayoutFormPage,\n) {\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui-kform\", name: \"FormPage\" },\n {\n moduleName: `./${joinPaths(\n formPage.data.currentDir!.slice(\n data.currentDir!.length + (data.currentDir!.endsWith(\"/\") ? 0 : 1),\n ),\n formPage.schematic.name,\n )}.tsx`,\n name: formPage.schematic.name!,\n },\n );\n\n let issueMessagesProp = \"\";\n if (shouldScaffoldIssueMessages(data) && formPage.data.currentPath !== \"/\") {\n data.currentFile.imports.push({\n moduleName: `./${joinPaths(\n formPage.data.currentDir!.slice(\n data.currentDir!.length + (data.currentDir!.endsWith(\"/\") ? 0 : 1),\n ),\n formPage.schematic.name,\n )}IssueMessages.tsx`,\n name: `${constantCase(formPage.schematic.name!)}_ISSUE_MESSAGES`,\n });\n issueMessagesProp = ` issueMessages={${constantCase(formPage.schematic.name!)}_ISSUE_MESSAGES}`;\n }\n\n const pathProp =\n annex.schematic === formPage.schematic\n ? \"\"\n : ` path=\"${formPage.data.currentPath!.slice(\n annex.data.currentPath!.length +\n (annex.data.currentPath!.endsWith(\"/\") ? 0 : 1),\n )}\"`;\n const documentTitleProp =\n formPage.data.currentPath === \"/\" ? \" documentTitle={null}\" : \"\";\n\n return code`\n <FormPage${pathProp} title=\"${sentenceCase(\n formPage.schematic.name!,\n )}\" code=\"${formPage.schematic.name?.[0].toUpperCase()}\"${\n documentTitleProp\n }${issueMessagesProp}>\n <${formPage.schematic.name!} />\n </FormPage>\n `;\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport contextTsEjs from \"../templates/react-app/src/Context.ts.ejs?raw\";\n\nexport function scaffoldAppContext(schematic: Schematic, data: ReactAppData) {\n const ejsData = {\n kmpModuleName: data.kmpModuleName ?? `${kebabCase(schematic.name!)}-shared`,\n formClass: schematic.name,\n };\n\n addEjsTemplateFile(\n data,\n `${schematic.name}Context.ts`,\n contextTsEjs,\n ejsData,\n );\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\n\nimport type { KtData } from \"../kotlin/KtData.ts\";\nimport externalContextsKt from \"../templates/shared/src/commonMain/kotlin/ExternalContexts.kt.ejs?raw\";\n\nexport function scaffoldExternalContexts(\n schematic: Schematic,\n data: KtData,\n): void {\n const ejsData = {\n filePackage: data.currentPackage,\n formClass: schematic.name,\n };\n\n addEjsTemplateFile(\n data,\n `${schematic.name}ExternalContexts.kt`,\n externalContextsKt,\n ejsData,\n );\n}\n","import {\n addEjsTemplateFile,\n addTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { capitalCase, kebabCase } from \"change-case\";\n\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport buildGradleKts from \"../templates/build.gradle.kts?raw\";\nimport gradlePropertiesEjs from \"../templates/gradle.properties.ejs?raw\";\nimport libsVersionsTomlEjs from \"../templates/gradle/libs.versions.toml.ejs?raw\";\nimport reactAppBuildGradleKtsEjs from \"../templates/react-app/build.gradle.kts.ejs?raw\";\nimport settingsGradleKtsEjs from \"../templates/settings.gradle.kts.ejs?raw\";\nimport sharedBuildGradleKtsEjs from \"../templates/shared/build.gradle.kts.ejs?raw\";\nimport jsJodaTimeZoneKtEjs from \"../templates/shared/src/jsMain/kotlin/JsJodaTimeZone.kt.ejs?raw\";\n\nexport const DEFAULT_JVM_TOOLCHAIN_VERSION = \"21\";\nexport const DEFAULT_NODEJS_VERSION = \"24.16.0\";\n\nexport function scaffoldGradleProject(\n schematic: Schematic,\n data: ScaffoldingData,\n) {\n const ejsData = {\n gradlePropertiesGroup: data.gradlePropertiesGroup ?? data.currentPackage,\n filePackage: data.currentPackage,\n formId: kebabCase(schematic.name!),\n formTitle: capitalCase(schematic.name!),\n kFormVersion: import.meta.env.VITE_KFORM_VERSION,\n serializationFormat: data.serializationFormat ?? \"json\",\n includeKotlinxDatetime:\n data.includeKotlinxDatetime ?? usesKotlinxDatetime(schematic, data),\n includeKtMath: data.includeKtMath ?? usesKtMath(schematic),\n jvmToolchainVersion:\n data.jvmToolchainVersion ?? DEFAULT_JVM_TOOLCHAIN_VERSION,\n nodejsVersion: data.nodejsVersion ?? DEFAULT_NODEJS_VERSION,\n };\n\n addEjsTemplateFile(data, \"gradle.properties\", gradlePropertiesEjs, ejsData);\n addEjsTemplateFile(\n data,\n \"settings.gradle.kts\",\n settingsGradleKtsEjs,\n ejsData,\n );\n addEjsTemplateFile(\n data,\n \"gradle/libs.versions.toml\",\n libsVersionsTomlEjs,\n ejsData,\n );\n addTemplateFile(data, \"build.gradle.kts\", buildGradleKts);\n addEjsTemplateFile(\n data,\n \"shared/build.gradle.kts\",\n sharedBuildGradleKtsEjs,\n ejsData,\n );\n if (ejsData.includeKotlinxDatetime) {\n addEjsTemplateFile(\n data,\n \"shared/src/jsMain/kotlin/JsJodaTimeZone.kt\",\n jsJodaTimeZoneKtEjs,\n ejsData,\n );\n }\n addEjsTemplateFile(\n data,\n \"react-app/build.gradle.kts\",\n reactAppBuildGradleKtsEjs,\n ejsData,\n );\n}\n\nfunction usesKotlinxDatetime(\n schematic: Schematic,\n data: ScaffoldingData,\n): boolean {\n const schematicKind = data.schematicKinds.get(schematic.kind);\n return (\n schematicKind?.package === \"kotlinx.datetime\" ||\n schematic.children?.some((child) => usesKotlinxDatetime(child, data)) ===\n true\n );\n}\n\nfunction usesKtMath(schematic: Schematic): boolean {\n return (\n [\"BigInteger\", \"BigDecimal\"].includes(schematic.kind) ||\n schematic.children?.some((child) => usesKtMath(child)) === true\n );\n}\n","export default \"data:application/java-archive;base64,UEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAAQAAkATUVUQS1JTkYvTElDRU5TRVVUBQABAAAAAN1aW3PbNhZ+z6/AaGZn7BlGSbvt7rZ9UmOnVTeVM5K9mT5CJChhQxIsQFrW/vo9F9woyU72dT2Z1qKJg4Nz+c53DvRKfOln0ctyr8QHXarOqVcvvPkvZZ02nfh2/rYQv8lulPYovn379rtnF+2Hof/xzZvD4TCXtM3c2N2bhrdyb17hwvvb9e8bsVjdiHd3q5vl/fJutRHv79biYXNbiPXtx/XdzcM7fFzQWzfLzf16+fMDPiEB38zFjap1pwdQzs1feW1m/kQz4fayaUSrZCcGOOmgbOuE7CpRmq7iVaI2VoxOFcKq3ppqLPFx4UXhu5V2g9XbEZ8L6USFW6pKbI9io0oW8g3It2bc7cUPwtTwQcN7phxb1Q2nehl7plhp+qPVu/0gzKFTVoBKsFAPRyHHYW+s/g/t5+VcWjHs5SBg052VsLDb0UveDpkCaicbcUuiz5QYOzwgaa+ELElK0ALMAO96MQZe8Apq5XhrMOhgTVMIaVX40JDSBZ4Gn45dBctK07am85L8i+Kghz3L4Q3n4r2xpEc/2t5AxCSrRocHH828lBkdxYkrfc1LzUHZAtxnwUuohO7490IMRpQSnI7veSn8J7KAFa3s5E6h83BfN5Z7r1ghDntFxwfv076SZOeWOWiMJpBypUETco/b6x4l1boGa/bKlij66vu3f7mm7QyYhw0fBI2DG8Dq6ANwk1UuSASRW9WBEUoNrpxIz/RMLv/DjDNxBWvxNzu7zr0O/9Amj7oaUZYVeXx4AeoJtNUOFQG9W+0cBTzFGScBueUs1DawWwkpCOnVnkZab1WtrIXl9NeaLP4Zt2hNpeFokrIqOFh3ZTOSKSAJRWcG0ehW4+7gR2fq4YDh5WhDcEoF1g+5R4K8GH6hCPlf691o6e/glkZl8HG3/TeEwrnqsjvyM3DH2FB+1Na08MdyLzvQOiQIREXn8E0ZAoqeNP5jLaRg85C4YnpAL+PkmJA2vcaEMqScP+YOIgHOAI8nB87RC076yOjtUA7nbqsqLcVw7PNjfzL28xkoHOAhaUw4hJGWUkB34RgxAdh0/litrABIHqVu5LYJ+Z/hUoFoigFYSh9KMuJCQDcwA7wc4Y0tBS9rMqscBqwtZKGgrRdxBQdQT7LtYWdYCNAOYc4L8c1F3yvY+QmSqTGH62SFG2X1I1jxUQk0iJudRgDucdkG/vReEtsgKL6VDp3XUSpWuAdGP0QPYxVuRe7CXDjsdbnPwACcNUANgMy06lGTKzGKwTQ+T4QCCxsbPoEI7+Y8m7wwrHLKQaSQ9SVsZhpKClimd7qDXc59fo7HAafqSfoX4tR83noYzd53JN5XDataqWN+ql5aihS0Cx2jVVY1R8iD7jMZbgvRgnHSyVZdB6drACJby5KKRJHVyGjUM6XQOsrUyevvEMp9jb/o8dMciCmb7RcN6BMu1NKoBwqb+IRiuPJMJEgybBtaBX9/TvkiS4oBUd/A1k2AbTduATs8eATeQdFFmpN6PhVoI8LxM1oRvEzl7sVqkRMVRGXaHuN9q8CYNZjiefLyddVezOKZZl4W1/sIy7BINZCA1gAYF+iFrWwojg4W13VEPsbOW19gFuRGV8lQaKfBpWQh+7vixVIUsSvfA/4lnQARdYOLG6CUIC0rWZEKuaMbVOtyCIeaOyosISXVSP8Gux8rH7OVyLVyoxcZjEyiILM22g04bjk6qvK0Y0t46WnkJ0K8VJrUUzDC9KwhHuEortflaEYHydtK+xmhzyZ2FCiXcnrXEfZDKKKPyLAXIxHBarYCe0uR5+p8dp7CJ/w6Hjtk4BcpT25AxMf2ZFOxB2W2CuIJKKMiJAel831SEjr15wjx0+C2pQF7c7lGwpulHwPRt3PxC9Iq3PZdPH5gVmIzcnH1sXqxmcnSLEdlBVVSZAYSCCGgM7E44gVADuGUwPB6NYBlQvgB9DXVQSPX6Ez3mjzv4MT48TWwHrvDxskcZTMcX9dWwScNxO7RlAjkZ9Xc93+4Yei2YAXkWI9xfIZ0Cc77cQtrwYoQqH0jIdDjE9CZS62jJ55Y5H1bTvMjFhNZPtvxQjknbGEH/TVz0EeJoPt/4J0rWKb6ARMMWo4hUCRQ0HFDdC16PmvmPaDrIGwvHxWxvKAQ9dGmrpHnQRFQDcAv/xcQxdiBHRNxwBNlzwoJZsLJ0ATso7Cr7PsG203TgdPJyohdXrWykRrsze9mhwMrkpDcuhE3O8he56TVlJ21BfQJHY3SofbliX/lrqENNp3yFRHgDxhJZPW07HRBOBB3uL7agvpM8qbK+S0O6IpQ6+ZiWaP/Yy/kAKkwpqNTBr1jFeRO4p8J5HzjfpUKVuTW1jj3mgyGxyjNiPyJP4PnpWjkwY16wKM2asdFACwWlE+c4AQVXwI4qgmsuPOtdpJTJuccw7GCP1piqiCGqdg0EgNlCs2oz5TQaKQc8yUvsCquDpii6L0QK9IFwlbBwxB80bogDfvEiqHgu7lYq3wyNKetW3lMyHaKQoCDOnCbCR69wPLIJUgbYbMRQI7iCBkN/N/Eijxtm7mEP4NkRWqFyCAptFql2Mu1aaAn4voesOvHUGev5DWfdIRI26G+qB73G+BWDUdE0Mqpb+wO8efsoJLqw2kn8ROV0bDnNtuTBzeJSmMfhf07D3UshhC0D7rDOOHu0WXbI8TFkEaZ2LrvyBiK5Ux3LrOdrRogwYrAm7MWnroD0Oj0cNnGccMUEAVmWKqOhY/uAmGxUsibioxMUIgOKd382XgEcUGfU0jFn8TcGD2DDFKuMkRoocrgMdGcnHF2SIWLT3JeqqdGq64RtKL/feOHrp6t7u6X725nkHxPA9kb087vgZQ72yfPrgwCLmTKmWXJX5mo0HpK8KGsqMdMQacumhVBSeKcNxPjQY2QgQ9CRyi+xq6ZmMsWvmhXCjaQ0SjpsJ3Kp/R+ScpWIEaw6Y9BTRl0TLZOFppElXtRh59yMJ8EWZ7X0wGU0HXCGSyZu1QBz+UbW5xbWQaul025fG9wwUr1SaYQgYAOkJ0FAm31Gg95jL7pcD4HDTMSCyWhCb3fcxeG+HVu5szfRB64lY5DPughUvOKDGWqjs8tQqzjZDYfy4asKvzdYr+TR2QmJajuLfQ1mVCw9R04Ij8T9VM43qgq1VVjG2jrJGICsHD/F9x5imlk4DDEADNcTCaaVkHPxDzAjqfxx4Z57t7ioolSV0G0lYb1TABOBl+ZK1CIP0euMo7kNLLWCcu9wODTaO/ClRGLye6KTH1BmyKlTU3N4vGZViSfzsVUInm4dTbNSwqc3VZNqnBk3ThLJiqNcTQZy8RO5aQTmDjke2p2/E0A96qJBbq5eOigijpymnqCjUqN7S9JzC5I4nzjeMois2FWNsZ6dnSVmD7ueDrIYaq3zafP/0tr5mkWqZkFDItg6lqF20devzIDLoq3N1RftoabMkzbHbV3WEZINTdCOXCqUnwRhGmQucRvxOyCB6RgxdgS7aCno8A/+gyhjkw9qTKDeALeaBCrdtLyvdJp7+HvAv4GUBgIiENYzHh0ZQg5B6bc2Y0QGt5fqDF9CdcYssW5WWQ0OPVS9hFn+v4j6ORjmF8OQRs0DpGS2lSr/hy1vz3Cgu7AJ1jSyaVQ+E2L19OoDVgZeEcJB/SuiE0HTmrP5rMhm4LffDW4UALYUn+fixvtqHXCS9tafAL+CXY5xiSIqm6P3MBS540tVoIB8iI1L2kKViSH+dx3SdUr1BWHBqctav42ji8nzr3GuRZA/myxEcvNTPy82Cw3wbiflve/3j3ci0+L9Xqxul/ebsTdOr+Wv3svFqs/xD+XqxugO5pvgJ9wOurSSTThSpWNSVMG0ZxUBpw6QpNLpqKGyJ5DLBjzfnn/4bYAq69eL1fv18vVL7e/367uC/H77frdr6Dl4uflh+X9HxRC75f3q9sNf31g4WV8XKzBYQ8fFmvx8WH98W5zy9WWbwsbvFkA/XvYVNOtA93McFc4DRfwnDW91UjP6cA1RBe+QvGXEDebl/K00TngRHjcANfaEbI7U+rYJjOo+3tWmsbmF63nzSzH3j/m8DmYFBd90HKrG7o8X2LlFUB/uoH0YBnwqKFhJ+gInXY2agk3WRBAQz4y6NSu0cC+SnVdxNvuYjLKjZOfL8b7FRMFnOk3ekuEjpTb4Twi3luELQf8BoKj2/HL+cHoOSkfOJQJLms0bewnAuRa2crddIaPq8NXAtKXA1yv8G49u32GhAJiy1cJSGB4posXcl5oQGicuYHeOK62fGeOVTzWarw1Pm10yZpjxJiRn+jOOzPD1XxicPXinXjQCo/dGA7YnTHVQTf57PAzFGXT9xKnhMgJRlS8lroZLVcj2dRjl8gNFcEL3wTBWwAM3twevLFyEDgYh0jQTwdxXkYcpsvqUdMlae2/vgEZ4I0QvtzgxXMG/DAXixJrAlohIC/uvEiFOkuKT3uk7tN0Pb0sfPG6LbDQcm8MT0Fp0jm5bKeZK/C2WhGeANSRhrIrFR+i5zGoR78jxZ1qO/xqSRqIsVmboLsw28ZPoYi3vEHYQebLVy1wHswX31/pgKCxwfjVHLAT4lYyGozsmQlO56NvtHRNdhsSObe/FqEhrn+MQJpglPQlppNuURKip0lRFgZ+Jow9k64ZnzHhOd/JNnW0TaVqaFd4BTDj6sLoXNqWkCiQ62jFlM6jtem2zE+OAZOhK8dmlYeoxfnceHv0ZCMd6IgWSDaNZP6QRWNGG6MuHMC3qxusq5e+Bvfqv1BLBwiwt6Me6Q0AAL4nAABQSwMEFAAICAgAAAAhAAAAAAAAAAAAAAAAABQACQBNRVRBLUlORi9NQU5JRkVTVC5NRlVUBQABAAAAAC3NzQqDMBAE4Hsg75AX2ND2mFuoUgSVQn+v27hqIMaQhPb1q7XXYeabBr3tKWW4U0x29krs5Y6zagqOJvIZ8xLC1WZHSpwido7EI2IIFDm7nIsn1NaQTwRVt9RtbykqoQOakeCwUg1aD0eHKSkxx0EOP0R+NkRu5p9cu5yVHl+OoF2+3wTaGFq3uq7h1ra6KQvOOPsCUEsHCGrPy1qVAAAAuQAAAFBLAwQUAAgICAAAACEAAAAAAAAAAAAAAAAAMQAJAG9yZy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5lQXJndW1lbnRFeGNlcHRpb24uY2xhc3NVVAUAAQAAAABNT81KAzEQnrS1rbUeFLx4zEltt4u2wlJFkKKnnlrwHpNpGptkl+xuEcQ+iG/hSfDgA/hQ4iwoOgMD38/8fX69fwDACHYZvGw2s+SJ3wu5Qq/4mMsF73OZusxYUZjURy5VSHxAiyJHEpcij+QS5SovXc7HC2Fz7PNMR05kkalmKDUanp0PyRuS3/5FaS0R+VJEpwTRa+MRg/Ga2DWGnHYRnwyGgyRSuObPbWAMOvO0DBJvjUUGvTToWAehLMbSmniSOie8mtKk66BLh764eZSYVXe3oMHg8EGsRWyF1/Gs9IVx+E9vMmheGm+KKwYHR9M/67yozro4vutCG7Y70IIOg8aE/oA92CJYBaMklWqX0D7UKAGaJ7032Hn9cdSp1qD+DVBLBwgT5SCoIgEAAHABAABQSwMEFAAICAgAAAAhAAAAAAAAAAAAAAAAACYACQBvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZU9wdGlvbi5jbGFzc1VUBQABAAAAAGVT21LTUBRdh7aEtuHSQhG8YrzQloYKBa2U8YXxwkwRxzIwOL4ckkMaSJNOkjI6jvyH/oCv6ogMOuP47Hf4E76IO4HaMrycfcnea+2z9smvv99+AJjDIsP7/f3n5TfKFtd2ha0rC4q2rRQUzWk0TYv7pmOrDUcXlHeFJbgn6GOde6pWF9qu12p4ysI2tzxRUJqG2uBN1QwwdH2uNDtfolq33O7fblkWJbw6V2coFLZh2kK4pm1Qdk+4HnFRvjxdmi6ruthT3vaBMSRqTsvVxCPTEgwTjmsUDZfrlihqlllcchoNbutVQlptBsNKiDIM7fA9XrS4bRRXt3aE5kvoZZCcsMJjGK6GBS3ftIpPuFevCb/CIHPXaDWE7a+9bhJVqtpBWbK451FJUhee5pohDkO6q6LmBxehkrjhOq3mhunXGXoXTdv0HxBhtouxanp+JbfOEMnm1mUMIpWAhDQxnptKwkgCGaRl9CEeRwwXGAY6pOuOqUsYZ4iubT57KOMSknFcxGUZicCL4aqMgZPGCRq307jsC5dvWUKCwtBnBpHvuAyj2VzXoMun+YqMm7iVxA3cbqOc+S4hS+rSo3gqXvnhtV7IyGMqiRwKNJwdpkfa2F17IeRpFIO6O2e2dqKmhFlC47rOkMme7w1Y5jAfCHSXnokh/NX2gjNn7tFZcXSJniJDf82n177Cm2uBCEiRPhL9DlHySGfyWCBgaGX0k00FMpLtocwghuhcoGgXvYiQfTyV33x5iOHvyGweYvQAY59x5QDX/sfXjzDJUJ06gsrwDuN58mYYfqK08gVjha+4t/Hh+PenkLBCZxo9x5hEj4SYRNrgD67SCGXcPyVOkWVkY3lq/wiEjZFwvsg/UEsHCP5do+aNAgAA2wMAAFBLAwQUAAgICAAAACEAAAAAAAAAAAAAAAAAMwAJAG9yZy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5lUGFyc2VyJEFmdGVyT3B0aW9ucy5jbGFzc1VUBQABAAAAAJVTbU8TQRB+lgJHr6UUEfBdPEHa0qNRMKnUmCCJiUkDxiqmfDHbu+1xcLfX7F2rxMgP8Tf4QROURBN/gD/KOH0hIDRpvEt2ZmeeZ2Z2dvb3nx+/AKwix/Dp8PBl8YNR49a+kLaxZlh1I29Ygd9wPR65gTT9wBZkV8ITPBTk3OWhae0Kaz9s+qGxVudeKPJGwzF93jDddgzbXl158HCFsKp4wq83PY8M4S4379NWSMeVQihXOmRtCRVSLrIXl1eWi6YtWsbHMTAGvRI0lSWeuZ5gMAPlFBzFbU8ULM8tbAS+z6VdpkgvuAqFml+vR0JtNdqFhxqGGfIDKV1RiXgkNIwyJKxTCINRPhegA7fPhCkxjD52pRs9YVjIDIZntxmGM8+z20noSOrQMJ7EGOJxjGCCIe3zg5qgclTUPQfDdKa8x1u84HHpFCpRu2el7A7DeCD/we30wfVhni/xYku6Ac80hs74aCDrtdyXwTt5gaxhmkH0q21grwaXerbIbktndczgCt1jIDcDedKbp/16+H/hGeYGFazhBkNKvI8UX1dO0xcyCun+uqmbkesV1pXiB2U3jEpJ3MLtOG5ijmGqD0CDwRDjtn1uALZqe8KKaACSmMeCjru4RwO1Qa+MYaJdxGbTrwn1itc8gUkaKo3eOiONZoy0YdJ1JGjN0G4WMQyRTOSqsWOklr4h/RXtb5L+Sz1QimQbNBT73PNN4XLPt0gJYiQnfmKmmjtCeult7hhXv3RyZmkdJZno5L+G6z1Srpc1lasS4wh3lr5j8c0pRyfvCOlxkqwTfgixv1BLBwgB7z4oWwIAALYEAABQSwMEFAAICAgAAAAhAAAAAAAAAAAAAAAAADwACQBvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRCZWZvcmVGaXJzdFN1YkNvbW1hbmQuY2xhc3NVVAUAAQAAAAC1VWtT21YQPRdcBIoIr5BHmyZGBQy2hRNMiMFpGiCvDgQ6ccKM6Uwz1/LFVtDDI8nQTqf5H83n/IBkJi2Z0KT91pn+qKYryUx4BfGl9ki2zj27d8/u3tU//759D2AK3zI8f/bsYeFntcL1DWFX1VlVX1ezqu5YDcPkvuHYmuVUBeGuMAX3BC3WuafpdaFveE3LU2fXuemJrNqoaRZvaEbgo1qdyk9eyxPXLezarzdNkwCvzrWr9CjsmmEL4Rp2jdBN4Xq0F+GFifxEQauKTfWXTjAGueQ0XV3cNUzBMO24tVzN5VVT5HTTyC04lsXt6hJ5+o67nnCH58W64xLb9fxSs9Jal5BguB5ru9II9M5tcbeFlHzuCwkdDB1+3fCGrzCoS3FuisS+YdiGf5Ph3lg8/SAjhKt7eMXxVQWd6OrCZ1AUyDglQ8Jphm7HpghdP4qbYW1s6Snf5DmT27VcyQ9SWzyMjMeG1ErEnhyQJu2EVtEuEvoZUieLZzXQdEbGAAYZknHbSDjH0OOEe3nzP0VOGAYix03fMHP3uVd/wBtFBRfweRfO4wuGvkPLEr5kaK8Jn2F0b6ArladC9ylNhyAFl5GUcQlDx8YZ5UHCVxQVN01n67G9YTtbdoR7DGxNwQhGg8hSDDOxid1nv68zxxlO6R/5R7Tn4W5SkEG2izpIYxBHVSjWQ3wD7W2dqL45GWnQ+cl82nbOrTUtYft3ftRFK4WTDL0HyyBhimGolZNkS71mkoNk1BXJ1IiXmujE9D7j3b4s0PGkEWFxqvvMEfK/P74VWiwFsyjKmMENhsEjvESib8rI45uTjJ7FTxR4juFF/AzZd/SOK0/E+59KvCBjHrcZEgs08Gk60Zq+QQftEa8Es7snMF5uWhXhhgj6aJ5J9BpivX3BeKN/bWDBeKP7XXo6j3b6Akq6nPkN3ZnsNnpeIfj0oZeuiPUHOpCg3x/SOxgoLwess6/R/RoXs79D/QvD5Qd/I58OobFf0b+DdJmeJjJP0tu4+nIH+XLiHa6VF9u1Uv/19Bt8vY1bf+5gPmQtadkM8e68DKO7R/ck2j5gOtxSopGFDziLhBRKGQ4B3KdrlPTQ64u0tOE0qegngyEipSjaSaJO0+oacViosA3t/wFQSwcIo9LbUFQDAACTBwAAUEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAA9AAkAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkS25vd25PcHRpb25QYXJzZXJTdGF0ZS5jbGFzc1VUBQABAAAAAJ1W618c1Rl+DiwMLJNEyA2SaCabGyy7YAIqAk0FjBpZljQQ6MZUHXYOy4TZmc3MLAStSe8XtTd7xdraSzS1pm20y5LIr62f+qHf23+g/dg/wNYqfc/MLmxgU0K/zJzznvfyvNdz/vLxe38E0IklhlcvXz7T9XxoQk1Oc1MLdYeSk6FIKGmlM7qhurplRtOWxoluc4OrDqfDKdWJJqd4ctrJpp1Q96RqODwSyqSiaTUT1YUOTevsOP5AB/HaXUX5yaxhEMGZUqPHaMvNlG5ybutmiqgz3HbIFtG72jrauqIanwm9UAPGEByxsnaSP6YbnOEhy061p2xVM3h70tDbB6x0WjW1GGk6rdoOtw8NmtasOZwRwH3KiKu6XEKA4fiGwmXkqhlkyyOPuAIrQ3vsLvX4Aj0M1b4ChtD/EPVliLsuuUosI+KZ0EoESaTKEWAZ2jaGVuKcQDajGlnuMOyMXVBn1PasqxvtfbatzsV0xxUMvbqpuycYrjZv0u2NXd3Ys8250zLGEGg+1TImowE7gpCwk2F7Gb8k7GaobPYZm4JoxB4Z96C+FlXYJ6MGtWJ1n4wg6sRKkSFji1iFZGzFNrE6RJVpmX12KpvmpsvQ3+xH0FDNVHshBC2bTYeyUcwkNFM9qgWro3MZSnp9ieEBQ3WcHhlhtNaiBRGGrauHY5auSWijII0mTp+Ucb9gascxhnvWQpfQQbk3qEfdKS9Up2Q8gAeDNDIeor2qaVQypR4PT1zgSben5ZyMh9EtQtrjBYg8yBhc1Ob9zZsMh4xP4ESQQv1JhtY7SxZTcPJSkhdi1HebRz40CQMMvX2mwtMZd04phlCZVR0lY1szusY1ZdKylUL3RQ3SrfiNqxw97Bxtq8FJigmxpFXK98Nl8v1UmYCs55LxOJ4QkTy1JobFqvHKcjCIfsQYOgbugEfRLO4opuUqrjrNFdVc8YmQxinxohNV243zSy7FiEHSnZPCdy+flKdP4YzI0wjDgxvmZUh3HMLmFyFpKwzHszSR73ou3N6qwsfxIMbwaYKa4u4TqrPaTLG49X9kSJnV3SlF407S1j1qt0euwVMMu9eGuT+rGxq3JXwmiKexh8ZuiSBDQ7m8PQtVdNUElYGaydBtyRAt2/Z3MEYqNHBhb5IGU5lqkUDdVuNaxatmR3PZ+rmAaaHEIPObmskSTDHTyAkLmfXTZt38lWAzbPMj7PTPFVFtL7krKG1TQ2qGQLnI1sLBDA2kdccSLlHVUZYZjpSbGutJMp7D80HM4bMkshHO4my8fJttX5Mj4XNUYTa/mNVtHrfMOD1DZHxBaP88vkhHGZs7VGe+Eme9eyNcwPkyviLc+yr1USEgMr4uaC14kWHLqgixS3hZlIim9RmUo6bmEoUDlmEQKnH9iR78Jr5Vh2/g2zSTHf05LuMVMWQb8d1aXMG+4vT2JP2L6wcMJ4ayhqvTVF1pEUeZ5Ta/6zH2I6ox3eW26lqU313FGvOsnCrQyeNX8WMB5TVqhvXnEn5KkaCHoBgvMn6GM3V4HT8nP0wirK3claT+ElcF3xsMtSnbymbGqWNlXPPj+Kt1pePF8tdBvC1Q1FD9ePcbpeg27cVL7zf4bRCP4ncUe5unrRkK5zviLnob73oVIEjacDF5OT+hC+Kc7qrAAL1SKZE0n5LTVLKj6oR4cG4T9RXPpie47VFQTxeSRG/nKlrRQ4FW9eKZ4P3pkeD96Yng/elJ4XFSBLGdvjdpd5ykq+h/JJw4f75yEbuW0JgYXMTe8ALubV3A/sgCDkQXcLApsIDD7wCepiM4WpB/kaQr6H8unMOBHKLv4vgb6GzNo2se9eFEjpTk0TuexyM3ltCfIK79g4E/4NFErDI80vBY6008uYihP5U5Gy6ekfYK3KJvNSr+jdBevEfrBgQIAcWJziRUko8BwnUaJwq4xojG6H+4FNcu2tybx+g85CWMJcKLSNwIC2grJkhI8fTvIr+EBYkOthJ5H+0OeFE+hzMFG710JmxsL7UhBa4hUHl9RaMkQNc/wjytQSIWtdaL94SvqaKNKNUAS5RqGl1B+2SY4hNrOD9UJaITF4GqfGYk0EPMS3g60R1YxDM5JBPdVX9GXVOgqSqP1HhrIhJN7GkK5JEeKUQynKCEHIyReA4Xh0g63prDbCSPF97HlZv4En0TQ2GifS2aw0u38J0KjHsYvtebw/fpt/fZwFW0FUA2/PBNVF/D/jK5my/mznfhJ7HWW/gFwzyaIrR6k+F9dMZJZVTUxrXlf/ga38rj+gpnLFzkbCGkB+MR4r1BaF4ipqGIz7T812ikqK47QLCFt7+fX/47wc+L9SIp/xspP7ya4WHULmMQVawGjRI6JegS3V1YpopiXit8iLMfYS8l5MqyqCyiSXiddsC/cN9/EKTdRzjk0ZwPEPHyapLA2mo8Rsq6KauPE2WMenOKutOgCrhI3ZmFmNZb8DJxvkLdOU+9+RpVxFuE4jr1Zg478E/sxAdUhx9iNz5GI9VlEztIL4Oznq1Kz6HK/wJQSwcILlZDIGAHAAA6DwAAUEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAA8AAkAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkTWlzc2luZ09wdGlvbkFyZ1N0YXRlLmNsYXNzVVQFAAEAAAAAnVNtT9NQFH4uA7qXTmA6Ed/QCtqxdVOGuoDRKNHEBMGIwci3u/bSVdrbpe1IjJEf4m/wgyY6Ez/4A/xRxtPSGTRLENrknntPn+c5p+ec+/PX9x8AlmAwfNjff9F6p7W5uSukpS1r5o5W00zf6zoujxxfGp5vCfIHwhU8FPSxw0PD7AhzN+x5oba8w91Q1LSubXi8azixhmUtNRdvNwkbtAb8nZ7rkiPscOMWHYW0HSlE4EibvHsiCCkW+Vv1Zr1lWGJPe58FY8hv+r3AFE8cVzDc8QO7YQfcckXDdJ3Gqu95XFprpPScB6EI5p45YUiSG9049YeBvRnxSCgYZagdyT0wKWOcYdxPVBiW1o7kHgQ8pLBC/HuOdKL7DHf1kwhUthhG9aeVLRV5qHkoKKrIIpfDGCYYJj3+ti0IGkQbaZ5lfe0N3+MNl0u7sRnFtV2pbDMo+oOwYtSrWZwm3r8QBWWCeDyinoYqplHK4yzOMRR9+Zf89hD5IQFPVqzF47MUXKT58CVBu66IaD5u6v8R/XBcFZcxm8clXFFxHhfiImsMBV+u+3Lw24+GVfV4YZI0aRp7npCRiuuYj2PeoGYk2Q+Yj6XFkNGTxq/SrWGYiN3rPa8tgpe87QpMUfMVuruMdjQLtBujfR4FWqt0mkYGI2QLC68z33Cq+hWTnxE/U/SWUtAsQWKQUi2d6WPmY6JXo3WcLEu0qRgpeIYUM2SLC18w2cfVaq2Pa59SzTnMp7ByqpmLYdU+9AGkgoU/kFg7hZDSq4PMWCI/gsxvUEsHCNTlIORMAgAAlwQAAFBLAwQUAAgICAAAACEAAAAAAAAAAAAAAAAAPQAJAG9yZy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5lUGFyc2VyJE9wdGlvbkF3YXJlUGFyc2VyU3RhdGUuY2xhc3NVVAUAAQAAAACFU+tOE0EU/oYCS0sRyk1AVFxBW9qlXKVchFSChgRLA0SCf8h0d1gWdrdkdosQIw/iM/hDDZdEEx/AhzKebUG5Jd1NZne+853vXObM7z8/fgEYxzzD5+Pj1cxHtcD1PeEa6rSqb6spVS86+5bNfavoak7REIRLYQvuCTLucE/Td4S+55UcT53e5rYnUuq+qTl8X7MCDcMYHxudGCOuzFz6b5dsmwBvh2sjtBWuablCSMs1CT0Q0qNYhGeGxoYymiEO1E8NYAyRtWJJ6uK1ZQuGyaI006bkhi3Sum2lF4qOw11jmZTyXHpC9q/sBzlnP3B5gaz53BcKahlSVZ2vedQzNOr/KQzq8g2BMt24IjPDUO/vWF7/8B3sW+EC9qzlWv4cw5t4dXr18Il3UUTQGEYd7jHUxpcCIIqWCBTEomhAODC1MbQ4/KggqFDpVxrG0BFf3uUHPG1z10yv+cG5zCTeMyjxeS+hDSUbcJ/8blIUdBPF4T7NgxfFA3RG0INeal3RzRXdS/FXd4lXrfjqeVCz+qrVr6CP4Z449CXPSrPkCNf3qLBK6JJv2emslPxo2fL8mShUPA3jCfoZ2u4gKHjGEOKGcaMzK4VdofvUmSjiSETwHIO3M7tViYIUhVnJry+t5LZy2beLW/ns+vriao6h+0p6UpjikOryfSFdSnEI6TA0DF9rfCUDBaMMDabwF2zuUZVt8cSVLMsgCYxjIoIxvGDQqjY7u01RKwfmKcgwDNyaybsnLorpCKZAJ1S7QFedoTkw5UpOQch1XrAF3b06mkCgBrFgCIGWWDCnhITAyL+J1pe060UtIWQe3NxMnqI5dI7W1CnavyF4YuhA5wXzMWnV0FdJtnad4eEX+mWYo7WevsEbwyMiVch5Eg3I/YObJ2g/wUDyDMmNEzR/x8jGGSY3fmJqc5BM55j9+k+ph7Tq6D9Mvk2k0E7JdRHSV44RKpcT+gtQSwcImT0V29YCAABKBQAAUEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAA4AAkAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkT3B0aW9uUGFyc2VyU3RhdGUuY2xhc3NVVAUAAQAAAACVUE1PGzEQHZMvSEOglMKplxWHBLEsJSBFBFWCSBWVIqgI4sDN2Z1sDF7vyvZGlaryQ/gXnJA48AP6oyrGaVC4IXzw87w38zwzf/89PgHAHqwzuLu9PW//9gY8vEEVeQdeOPS2vDBNMiG5FanykzRC4jVK5AZJHHHjhyMMb0yeGO9gyKXBLS+L/YRnvnAeUbTX2t1vUa5uv9QPcymJMCPuf6UQVSwUohYqJnaM2tBfxLe3W9ttP8Kx92ceGINqP811iN+FRAa7qY6DWPNIYhBKEXTTJOEq6pHTT64N6o2zzPX8P+hbbrECRQbL13zMA8lVHJwNrjG0FSgzKB8KJew3BoVG87IG87BQhQpUGRQbP5qXVSi5dz1V5KPtKf6yRzpmsNNo9t5s41UDHZohVVSaJ6gsg+NGb9ZN37oFdN7tWI/RnnAzc6URriYfUWUm0dKyil1aPIMlZ3KaJwPUF3wgkdZRojHdKQNzU9P9maKPhIywtPkAH+6dvuzk2lT+Qjg3lRedzGBt6kFvcq3DEkyWTU4OV+DTBFcdT1kFuueg8AxQSwcIn5Vv9qEBAAB9AgAAUEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAAzAAkAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkT3B0aW9uU3RyaW5nLmNsYXNzVVQFAAEAAAAAdVJdTxNBFD1Da7fUraUtWAUVXVDa0qXRYtKA8UESnxCMNRh8MdPd6XZhvzK75cXI/9A/4KsmUBJN/AH+KPXuFuJHayaZnDlz77l3ztzvP758A7CONYYPx8cv2m+1LjcOhWdqG5rR0xqa4buB7fDI9j3d9U1BvBSO4KGgyz4PdaMvjMNw4IbaRo87oWhogaW7PNDtWMM011sPHrYoVrYv8nsDxyEi7HP9Ph2FZ9meENL2LGKPhAypFvHttdZaWzfFkfYuC8aQ6/gDaYintiMYdF9aTUty0xFNw7GbW77rcs/cJqXnXIZCLu8Gcc+dKNZVkGaYOeBHvOlwz2rudg+EESnIMKS4tBhK278vRymbDBk/kSDwyPbs6DHDSnU8bpyp7ZFstban4jLyOSi4oiKL6WlcwoyK3AiVGLKRP8pgmK3WJnUwpetZXP2r9YsHXSNDwojLKHxlR32GuQmt1V6rmMdCDtdxg6Hy7/2Tge2YQiq49Z/05AW3c1jEHTKBBwHNBVk/KXSMOhffVLGE5VjiropZzMVohYHRu2oM6S2aCIZ8J6Khe8aDl7wbf24h/sadgdsVMmFQJMMUmtMpQuQkoWLsY8Iw6lGlfZVOC0jRAgr1/f0zFFZPUWycovwZSFKo/nmggTQhoF0/QbFUGeLme8x/xeJ+/U2pcgbtBOUh7g1R/YjKOV3/k/6UlG7QnsfU0k+UCTGFfNYJZEh6tFJJWOoXUEsHCFe8Z+MiAgAAZgMAAFBLAwQUAAgICAAAACEAAAAAAAAAAAAAAAAAMgAJAG9yZy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5lUGFyc2VyJFBhcnNlclN0YXRlLmNsYXNzVVQFAAEAAAAAhZHNSgMxEMcn1rZardbvk5fFQytdF61CUfGgKAhFxYoHb9nd6TaaTUp2WxDRB/EtPAkefAAfSpzU+gUFFzbz8Z/8Jpm8vb+8AsAmLDF4fHg4r985Pg9uUIXOthO0nKoT6LgjJE+FVm6sQ6S8QYk8QRLbPHGDNgY3STdOnO0WlwlWnU7kxrzjCssIw83axlaNak39a3+rKyUlkjZ31ylEFQmFaISKKNtDk1AvytfXamt1N8Secz8GjEGhqbsmwCMhkUFVm8iLDA8leoEU3oGOY67CBpHOuEnQrHyaZspTzMMog9I173FPchV5p/41Bmkecgxyu0KJdI9Bply5nIQxGC9AHgoMRsvHlcsCZK1fivmtj4Qy6WnHToLBQrnxw2um9vA7lSsGRa3+1F0NqRuys/HvdT6Bvy61w2BCqxOtvlrtDzvS/+C/yJJWv0oOVUiTOKBnYzBtEyfd2EdzwX2JNNIsjcp+OWB2crQuUDRDlpHNrj7DxJPVS1aeHMjLZEcGctHKDBYHDPKJOgXT0H8wIlk7C3P9qvnvDsV+TH+fTm6G1hHIfABQSwcIYjZYZqYBAADOAgAAUEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAA/AAkAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkVW5rbm93bk9wdGlvblBhcnNlclN0YXRlLmNsYXNzVVQFAAEAAAAAlVPtThNRED2XthTKCpZvFRRX1LZ0uwgYKxgTJDEaGzCiGIiJud29LAu7d5u7W9QYeRCfwR+aFEz84QP4UMbZUrRBkoY/O3Nn7jlzZmbvr98/fgJYwCzD54ODF+WPepVbe0La+qJubetF3Qr8muvxyA2k4Qe2oLgSnuChoOQODw1rR1h7Yd0P9cVt7oWiqNccw+c1w405bHthfu7uPN1V5RP8dt3zKBDucOMOHYV0XCmEcqVD0X2hQqpF8XJpvlQ2bLGvf+oBY8isB3VliceuJxjuB8oxHcVtT5iW55orge9zaVeI6TlXoVDTr+SeDN7JtVos/Ti2HvFIpJFkmOsIPwPXzZAKY5ehVOlI0AZdYkhw5TAMVnb5Pjc9Lh1zPYo7plSf9Q/LoJ9mbvLYbfwE6X7gSjd6yCBy/zN2Jjif+PwGQzL3NL+hoR8XM0gjqyGDvl6kMKRBw4XYG9HQg97YG2Pod0T0hIfLyqn7QkbUfi6/ReFAEqWKVsX7aDmex2wuf95BZgJJV2qeiISGSUxkqOLVZvhftUdnTOXchaY6jTENnVqiVhQ/KR0yjByXrkeuZy4rxT9U3DBa0jCNm724gVsMQ2dcSCMX/yO2TQTt4tequ8KKlvJbGgqYySCPIi1jhd4Rw0AsYrXuV4V6yaueQJZGkabXnCCPdkFeNt5T09KWyKZAijFA3xKdpuicJDtc2HyT+I7BmUMMFw8xahxi/BvQxF3C5dbtfrKMbFfySyt3BROtXLaVSxWOcO1rKz2F623prtPpyb/oe6Q4Ro8VNjcbGH3WIEUN3H57BON1A+MxgMFsSkhQO9Q5sQ01QYlYEBJ/AFBLBwj9jil1dAIAAMcEAABQSwMEFAAICAgAAAAhAAAAAAAAAAAAAAAAACYACQBvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlci5jbGFzc1VUBQABAAAAAI1VXVcTRxh+xgQ3xFgloDQWZZtqCYGQKlgR/IoRKwUSJKiNaOmwOyQrm924u+GjVi96et1zvJTL3njbVgu2ntpe96Y/or+jpe/u8lUInuac7M6888wz7zzvx/7xzy9vAPRhkWH5yZOJ/kfxGa7MCUOND8SV2Xh3XDErVU3njmYaqYqpCrJbQhfcFrRY5nZKKQtlzq5V7PjALNdt0R2vllIVXk1pLoeq9vWeOdtLWKt/Y/9sTdfJYJd56jRNhVHSDCEszSiRdV5YNp1F9v6e3p7+lCrm449DYAzhglmzFHFd0wWDbFqldMniqi7Siq6ls2alwg11lJjGuWULS0KQ4fADPs/TOjdK6fzMA6E4EvYzNOfHJ4fzuelcZmxoejwzOTk0kWOIjXrgmqPpaUuUxGJ6nDuOsIxB2nGS28TpimBf02w+owuVgd1lOGRWPevVpYLj3oCw23hucLs8xqsuA9d1c+GWMWeYC0be38Ow/4JmaM4lhkCi83YEh3A4DAlNDE27OCQ0h9GCpggiONiIBhxlCF2gq/sEh7ZumtXJWQkxhqOqsDVLqJkN5wsOd2q2d9zdCN5DWxjHcDyCMA64lO0MbYl7l7+6V32U0Y1a5fHU5ig1fT/ZGcL7DK17yCThAwbJTxcKUCoxuuWSr81g554SR3AKH4ZxEh0RhNDoOtNJ8vjiMpxLTNVj2zsHfIVJ9wOKaThcM+wRscRwZLtTfkYMukqk0OOKm6aYpkI4/Z/E8U+T0EsZaDvccuw7mlPewbXhEnGdxcdhKqhzJEaFO1QdFkPvdmy2zK2CeFgThiLqSDLmbyJJzmPAlWSwjubrIAkXN4+xI7jsBvQSrjDEt44b1nVR4nrGKtUqwnCGFhXhiSPhKsNUlhuG6chcVWVfbLnjlN0hc1vmxoZFcYeGviSvaylzvVrmlBVUs4qs0HW4QlG0qSbljlSH95ru6AnhGoVw1rTIP4bzdeSaqhON3agIruMTV9Ibe4juVc6nYWQxwjDwP2/kYrxwygsUTtdvcniMoT2/bZNGm3RLcHVJVsUs5ZVKoDxVc510lHDzrW0pv656YSO7vHBmLIsvUbXeIqm4ParZJNWpxN7CeJtcGMlyB5+FcRtF8iexc9UXZSqMSdyjFDE3Os7O7lQQLtPnmG4k5Be7Gg8tS5ihTqNRgLljUi4fTWx3ZXjdTiQqRBgKZhmiu9clUMlI9L3IiUUnggdoOwANcwxBgwwMLYnO3XeOoALDxZnUsqo1gvXXKeC3J9Em1UNYbo2TBsEsfYcYDlI3VOaotU66/ZxaqBulXK0yIyzPgibqQhJ9HYOIuU0JOBxzOyVZmtwmTG+Gd7x5gEbUvOlZo9kJbw5Ek8VVRF+jpTiyiiPJn9D6A9xfCO9uYtuxz8M2RxtWcCL49QvI0fgrJF4g6YOfogvdPpjFyKEGsq12vbkYuHS87Tt8mew6fmYg+BKtseAKPlrGzVgwemYF/ctI/4ika7ywgswzNH4TYM/X/nyNbDH4K6TiSCAWLESHkq8wvIrR33bYc3vYx7fsk8XiWNcr3F3F/ZfgKyiNdv0MneEZjiVpVGX4HX05cizVvQLnzvO1v7q/J9f3YZ6eVyD9jQbG1tDrXYhk7gNaW9fQin0SGiRMAGtoRsCbaBIlJ83bSVh4YyzQP0xs35I0Tz0NAx574F9QSwcISgGOKuoEAADSCAAAUEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAAmAAkAb3JnL2dyYWRsZS9jbGkvUGFyc2VkQ29tbWFuZExpbmUuY2xhc3NVVAUAAQAAAACNVVtXE1cU/g4JThgCmiiKWkqMIpALKRdp5KIFikVJwBorjdLLkDkJA5OZdGbC0tVVV1f/Rf0DvuJaFLRZbX3qQ1f/QB/7M/rQpvvkgkmT1TYPc/bs2Zdvn/3tnV/++v5HAFPIMzx7+vRe/MvglpLZ5YYanAlmssFIMGPmC5quOJppRPOmyklvcZ0rNqeP24odzWzzzK5dzNvBmayi2zwSLOSieaUQ1UQMVZ2anLg2SbZWvO6fLeo6KextJTpOr9zIaQbnlmbkSLvHLZtykT4+NjkWj6p8L/iVB4xBTplFK8NvaTpnCJhWLpazFFXnsYyuxe4qls3VJTOfVww1QfEkuBlO7Sh7SkxXjFxsfWuHZxwJJxhOmgVRjr34JOWIrAynExXDoqPpsRXF3k4qhVmG3oLFbW4461XzVrMUd4SZxfPmHlePzXr5Y8dSFqxcMU/epOhr8FuwLOVJQrOF54k5zdCcGwxnR9pEHn3A4BoZfeDFSfhkSPAz+FpwSjgjow9+Lzzo6kInzrVYUTAJ52VcEFYyuoXVW154q9LbVFcbeBICMi4Jjx70CrvLDB7N4ZbimJZAPNoA+XZNP+vFEK6KTMMM/tbvEkYZJGLNGl1RpbqHXoQR6UYIUQa3UVGfqcduaBxFjuEdYTfe2vyGtlebIGGS4ep/UaRue03GtLhcOcff9LqvqcB6T7yI47pM8zLTRK4qjyTMUU2FIpUQH2mtoFXTtswbuCka+h6D94ui6fAFQ71jagbDRCNJFrZs4ljGWTJ1nfwIc1O0KiCi2Ll/6haLmq5y6sT7MpZF1f43FpU2bek0Ox90Y0X0sCMS8OAOMVUpFGgpMERHWrO0Jq4loWoSSIo8awxs2IO7xCHHrE9dc59rwby4h5Rwue/FIpZkYh7NwWRtZGcCQ3Yk0DxfVV3zEAqdBx8T8Kxp5RXqyPU2wB/9e0uOET3EIxnz2KRwVRwMc23v4f8xjtriIqoRQ9uwpC0nPociOLHFEGzoFnU+p+j1e1h+nOE1QlOf+qupAsND9nDAMJ2AyrMEQB3zICvI3QZ9ZdFsy+DQaBSXaFcz9KQc+jugNXNf8AI+6oZE/xdukmjdkOQTC6VyemsnrYuKBe1ZnKLnLr29IK9OOr8Oh9LpzSOcLqEvnTjC2fB36C/hgpAvkjzQIA+WcEnIQZKvHGIkEX6FMYZvMU/CBMNrTJUwnU4e4d1DzJLBWrRqUP4tFK1ZzM+4D9B/3h05xMLG8/LvLwgDg07PQbjKmEMH4ZJoqeBPBCRMk1impSd+XYJ9NfjfUDkuOpOhEpbTq0e45Z57hdsMyUgN0/jFSD1l4hnkkH/1EOsbVKz/QyGExaMquuael38NHeKj/WMslwUWH1wSllkFTBkDlTcJ85X3P9BP32kuanhm6TLddMYowQEGXmJj9QBX6EgcYJCO5IkfIKU311yhlDuc6oyk/OnoS3yyXynMh0/xWS3QCgXqoHM0RNdEIDOv6UZXf0ZnaL8EnnaLMKuucMqfC5H/EXZ+OgbdA1aGn7wJZEUpLqgDrr8BUEsHCIKL8BCEBAAAUggAAFBLAwQUAAgICAAAACEAAAAAAAAAAAAAAAAALAAJAG9yZy9ncmFkbGUvY2xpL1BhcnNlZENvbW1hbmRMaW5lT3B0aW9uLmNsYXNzVVQFAAEAAAAAbVDLSsNAFD1ja9PW+qjVrYssRMUYtAqliiAFNxYqCkKX0+Q2HZ0kZSYpiOiH+BcupKDgB/hR4m3BnZvLec25M/P98/EF4BgbAq8vLzetJ3cggwdKQrftBkN33w3SeKy0zFSaeHEaEuuGNElLbI6k9YIRBQ82j63bHkptad8dR14sx56adYThcfPopMlZ0/o7P8y1ZsGOpHfIlJJIJURGJRGrEzKWd7HeOmgetLyQJu5zGUKgepvmJqBLpUlgOzWRHxkZavIDrfxraSyFnTSOZRJ2ua83nl3ZQVFg7V5OpK9lEvm9wT0FmYOSQGkidU5WYLM79/NMaf/CGPnYVTY75cCZSlR2LlDY2b2roYqlKhzUBBr/5B2sVLGKWg1lVCpYRF2g2OH3os7E4T8WjNibIzFr49lgtoUCI2B9rz/F8idW+1dTrO29Y/0NmKcLPBdQ+AVQSwcI7Zy8Z1IBAACsAQAAUEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAAzAAkAb3JnL2dyYWRsZS9pbnRlcm5hbC9maWxlL1BhdGhUcmF2ZXJzYWxDaGVja2VyLmNsYXNzVVQFAAEAAAAAdVXLdxNVGP/dpjDTNIUS3lJhCAIhzUMoj1IeCgE0mhYkQA1U4XZykwydzISZSUtFwDe+cE9X7NgqnpOCPYpLj7px51LP4a/Qo/G7k7aUEhe5Z+73+H2/+73y87/f/QBgN24zTN24cbr/WmSU62PCKkQGInoxEo/odqVqmNwzbCtRsQuC5I4wBXcFKcvcTehloY+5tYobGShy0xXxSLWUqPBqwpAYhcLuvl17+sjW6Z/zL9ZMkwRumSd20lVYJcMSwjGsEknHheNSLJL3J/uS/YmCGI9cV8EYgjm75ujihGEKhoTtlFIlhxdMkTIsTzgWN1NFUqVOca98xuESh5tpSU44CtoZui/zcZ4yuVVKnRy9LHRPwVJCzeQuDmeGjp0czjGw8wwhlxeFBBniFQq0LZp94pfzJMsDO54VPQXflCkIMSiGe7xS9SYZAtEd50NYhuVBdKE7BBUdHViCMEUdULGKQdVty+OG5TJsWBg0XeZOTlypCUsXByTGGqyVGOvIM6XiOXqD63HHc4cNr8ywuhVh8urB89JrI3mNqNDoob6ZYadkRhVEGLpcUeUO92xHxiTDdAgvYGsHtmAbPcURVZPrlJM10XS6RQ5CiGKHjBFjWHrQsAzv8P/QORdCHIkg4SbJ1LNluiXsLKhFpOZrSbAvYqe03cWw0tfXPMNMHXEcPpk1XCrjbobws44K9tIjS8KThUzbNcvzi5AJoR/7O7EPAwzt0UyTzMEg9uAQFcGgXpIZWEDHD5eZlROdl/CydD8yF/UpvYI0pYoGY0hc9UI4juWdOIYTFMoiAcOq6MLMNRuRMF9FRtq9Rgw8u5mmxbbzWc5iUMYfoufwQmFRimcRZcVP4Q35qtPyILJtyaSKs5Rv6iUa1BCGpb4Lb1KhSUOtr9Lc+10UwkizW95i2PQEO2OaosTNnMc9cfyqLqpyKyi4yLB2Mc2jNcMsyMHjDOvOWmOWPWFpsjTafI8NaCr0IEb9HuDVKgVn6Im26KxZMHp6ESXpUZbHUBCXpG/kGYJHnFKtIixvAUeTIbl9q7tdM1zNsj2Na3LMNe7oZWNcaGTsTGq2o1WpcTSLGoYyYhGvou1UOJVtf4s2vtAi7a3qVcUVmUsniIrkqx7UzdnhoHY8R91iu0kZUsXE02tk0vVERQEtj05q41OOXRWONxnCNXQG8Q7enbP2GzBr61zO8Q2q9FnaZeHsYh1ReQ/vd+AmPiBEz87aE8JJ0yZ/suUWWrd8y0f4WL7lE2I9YVgFe8JV8Sk1d5pWOy0Qag19bJBXz/BRuaWXZ2mzD9Uqo8LxJbSFl0ChPxyG9XIB0lcbnUF0kuRzEt/GUgRI+nesjhVT+OM+Vt5BKBZeXcf6KfwWC2+oY9MUfoqFN/sfj2awJXsf2/OHukfuYlmsO9VTR+/gPazo6U7dxa1Y94gv6M3Hp5Gqoy+fncGe/GDvQ9DKnsbhhzjKkKXrKwx3sD5OX68z/Ih9D3GSoY7c8L3G43gdZ+Ztds6ZdOUHw+fqyE9hv6TZ+DMeviCvjd/9j7ensPle49fY1zO4lJ/BaL7nYrgwDVGHUcflaYwR90q+/Xso+WwglgvbvQ/gTsN75CflCzpH0LHmH8RURFmDch5Q0EXfdAINbPTvCo4pNN3zd8ze2tHW1AJ/YW+DshuQSSfNOjAfAV/SbyPZ0/TT3m6jHRjAaXL8ikr0C5XhMelU1DDeLA00siEErApffYDr9/FhHbfCn1FdvsXKbwC/qAGfe+A/UEsHCM7QOawiBQAAVggAAFBLAwQUAAgICAAAACEAAAAAAAAAAAAAAAAAQQAJAG9yZy9ncmFkbGUvaW50ZXJuYWwvZmlsZS9sb2NraW5nL0V4Y2x1c2l2ZUZpbGVBY2Nlc3NNYW5hZ2VyLmNsYXNzVVQFAAEAAAAAZVFNTxRBEH3N7jLssiOsIN7nBBuGCS6SDRgSQ/QkMYrBc29P7WyzPR/pntlAjPwQ/4BnTkYOHD34o9SaCcaDfajueu/Vq0r1z1939wAO8FTgy83N+/GnYCLVnLI4OArUNNgNVJ4W2shS51mY5jExbsmQdMTkTLpQzUjNXZW64GgqjaPdoEjCVBahrj3i+GD07PmItXb8t35aGcOAm8lwn1PKEp0RWZ0ljC7IOu7F+HhvtDcOY1oEn1cgBHrneWUVvdaGBI5zm0SJlbGhSGcl2UyaaMpUZHI1Z6vo1ZUyldOLpuClUuTcmcxkQtZDW2D9Ui5kZCQr304uSZUelgWWX+hMlycCre2diz5W0O3BQ09gkMrrCZ2a3NG7SlNprgW2tt80JjqPGkJODB3vXLD4P9jDI4GOqtM+1tFdxRoGAhv/huBxqai37GFDoH3KqxLwz0v+jTNZfKhNMECHp6nPEkQ9HMcnnA34Fnx3ht+wetsIuujDf6APH+i14Q/4w+94LPAV7Y+3DLZZ5GOTX1ss8LH0mwMgPMYYbDWtWn8AUEsHCOn4yEeeAQAAJgIAAFBLAwQUAAgICAAAACEAAAAAAAAAAAAAAAAAPgAJAG9yZy9ncmFkbGUvdXRpbC9pbnRlcm5hbC9XcmFwcGVyRGlzdHJpYnV0aW9uVXJsQ29udmVydGVyLmNsYXNzVVQFAAEAAAAAhVJdTxNBFD0jhcWyIArF76/1pWiXVYtJQ40PYkxMIBIqmj5Od2+3A9Pdzey0L0Z+iL+Cp5JI4quJP0q924oaNHGT2ck9c86999yZr98+fQawDk/g4+HhbuO915HhASWRt+GFXa/mhWk/U1palSZ+P42IcUOaZE582JO5H/YoPMgH/dzb6EqdU83LYr8vM18VOaJovf74SZ25pnGq7w60ZiDvSf8Rh5TEKiEyKokZHZLJuRbjjbX6WsOPaOh9mIUQKLfSgQnppdIk0EhNHMRGRpqCgVU6UIklk0gdvDMyy8i8ULk1qjMoGt8zejNNODNTHJQEFvflUAZaJnHwurNPoXUwI7ASTkhnpAIPq1tjgUqDonpz67e8ZYu+m6sTKCEb7O2+agq4f8YOygIzT1Wi7DOBSvUf+rcuXMyXMYcFgfMx2RbPtc9Gl6urf9NdLOJiQb50Wulnaw6WucAveSujUHVVuCONdbEy0VwWuPd/Q+OGrpZRwTWBaZuyDZ5b9YxRFzdwsyDdEiht8vUKzLcsv6Btmb2RHU087Gk4KD72hVleAnc4eo4Spnj3TjDXbm8/OMaFEZa+YOkElfb92ghXjnF9hNtHtaOx9i7/FyC+s5hlDvso0CLDOUz9AFBLBwhE8acw2wEAAMcCAABQSwMEFAAICAgAAAAhAAAAAAAAAAAAAAAAAC8ACQBvcmcvZ3JhZGxlL3dyYXBwZXIvQm9vdHN0cmFwTWFpblN0YXJ0ZXIkMS5jbGFzc1VUBQABAAAAAG1Ry24TQRCsIY81xpA4IQlcFw525PUqOEhWgnIIEqcgJCxxQFw6s+31OLuzq5mxOSDyIXxDLrmAxIEP4KMQbQcESFym1dVV1TUz3398/QbgEA8VPl1evh5+iM9JX7DN4qNYj+NerKuyNgUFU9mkrDIW3HHB5FmGE/KJnrC+8LPSx0djKjz34jpPSqoTs/DIssPBk6cD4brhb/14VhQC+AklB9KyzY1ldsbmgs7Zedkl+LA/6A+TjOfxxwaUQnNUzZzmF6ZghW7l8jR3lBWcvndU1+zS06oKPkjzkowdBXKB3eODCKsKm1OaU1qQzdNX51PWIcK6wu4SNVW68LRULrxFE6GhsP7MWBNOFFY63TctNHGniQgtGZDWXAeFR52zv/XHZ392jMLiNsfdtwp7NyGTgmZWnsol/f13/Sm5Bjb/iXUjibClEJUUhOoVdjr/M23hPnaa2MauwupzeVO0sSbhFG7LX96SKmnlfCBdW6qSurb/BXevgSV0Dxu/xttCX5Ea9bban7F3tSSoJSSDn1BLBwilNa2HjwEAAB4CAABQSwMEFAAICAgAAAAhAAAAAAAAAAAAAAAAAEEACQBvcmcvZ3JhZGxlL3dyYXBwZXIvRG93bmxvYWQkRGVmYXVsdERvd25sb2FkUHJvZ3Jlc3NMaXN0ZW5lci5jbGFzc1VUBQABAAAAAI1TTW8TRxh+Bnuz8bJJHBJDIAI3W0JtE8dAQnBjaKGhSA6mqWIUZKkSneyO15usd81+OEgILr1x6IkLPbTHnpGaELVS21OR+Cf8A0607yxQ0goQu9K87zzzzLwfz8zTF7/+DmAeSww/3Lu3Wr1jrHNzU3iWsWiYbWPGMP1uz3F55PheuetbgvBAuIKHghY7PCybHWFuhnE3NBbb3A3FjNGzy13eKzvyDMuanztzdo64QfX1/nbsugSEHV4+TVPh2Y4nROB4NqF9EYQUi/Dq7NxstWyJvnF3EIxBa/pxYIorjisYan5gV+yAW66obAW81xNB5bK/5bk+t45fFm0eu9Hr+deBbwciDBtOGAlPBCrSDNkN3ucVl3t2ZWV9Q5iRigGGAde3bREwTDbeEqCRLNYYBi1qgc0jSuTC24gfmgkddagXiL7jx+G/HEFFehEDq1M+5x3PiT5jOFZ4T0LFNYZUobimYxhZDSpGdQwik4GCMR0a9ksvp0PHkPQOMeSsV9GaEY/icKlDfRAWg1JYXi6uDVxsIfkYht+06RqPOiqOUqguvy2p9XqxriOPjzQcw5TEHU/Hxy/nx//T4mYk5VVxgkHtczcWK21KolAvNv7PqekooKjhE5QYDr+zZhUz1B2JeJT2qcKec6iYoCluxcIzRW1vgEsJm6+7goLMoqKhjFMUpLD0HtYZyZpjGEsYjl+pr3x52xQ9+SBUnGU48mbrauxFTlfsWT/HMLE3t+udwN9Kzn6p1qcaqlgkrWcHcV7HYRzRSCDSO71Eb4VhiPQxN6/x3nW5iWGkQU/lq7i7LoIEwSjRVVIqRR5JTt6oFDzRjuQmu0+qiBEaL9IsjzQhwFip9c1jHDi5jXG2jYOpbUw8SiQflUm8Ij/DAP3Ad/nMgx/xbekXHHyCVlbLWlP38/f9cUxufp+6uQtjF9NZzb3ZaS0oD1El3kRO+QmVUk4hfzyn7OLkDk5npxeUP1HOKTuYv0EBf8bQ1d9QbZUeo/ZHfurBQwxJ+oELxL0hg7Wu/oVMKT+1g88fUZ2TOIEWFqQoiT2HK4ldxmpimzRKuw+XKOkJpP+GvMdMxcILZFQo6fTIc+rFFwQOU8eOUpnTxN4gn25v0qvUP1BLBwhgdBonSwMAABIFAABQSwMEFAAICAgAAAAhAAAAAAAAAAAAAAAAADQACQBvcmcvZ3JhZGxlL3dyYXBwZXIvRG93bmxvYWQkUHJveHlBdXRoZW50aWNhdG9yLmNsYXNzVVQFAAEAAAAAjVRbTxNBFP6GAluWBSoqKN4X1G2hrYqXgniBKl6AQLgYGx7IsDu0i9vdOrsFiZEf4oOPPqvREjUxPmnij1LPcjFtMdEm3Z055zvnfOfMN/vj56cvAC5jkuHl5uZs5rm+zM0nwrX0Yd1c0Qd00yuWbIcHtucmi54lyC6FI7gvyFngftIsCPOJXy76+vAKd3wxoJfyySIvJe0wh2VdHrx0ZZCwMrMXv1J2HDL4BZ68SFvh5m1XCGm7ebKuCelTLbJnUoOpTNISa/qLKBiDOueVpSnGbUcwpDyZT+cltxyRXpe8VBIyfcdbdx2PW30z0nu2MVoOCsINbJMHnlTQyNC1ytd42hVBus7XzBDzN/xAFCmSMgW28Bk6Jrfx5cB20lO8dJ2hecR27eAmQ6dR54s/YogY8UcaVGgqFLRpiKKlBU3oYDiaF8EM9/11T1pVpalNhl4jPvmH199BVDlGGWbF07LwifD8RokmYFQH1jTUV4O8ruEgDoWcDjP0/U+Egm6GppnZ6cc5hnP/W+QoelpwBMdqyNKZLsyStmLVZMlC+BM4GZI6xaBVexScYWgNBya9wDM9h+HQXrDD3Xx6LgiVQgl60adCx1mG7nrvWNl2LEEne16FgTY6uVAhrsWQNPan2p99N56KJNAfphgg+aVKoawWfCGjSDFEA28HrOFCyMTARYa2GlkoGCRZUC80xuq608urwgxq6u6aNFzB1Va6j9doZvWsFAwxtO/Q2FNKFKQOktoNhlP/kJGCWzTZwMsWuByVkm8wNBrxxayGUYypGEaWJvmX8Sxmd3R9V8VtjGs4gM7w4O5TeJYuNDU9F9A3g/qd58uOIH8TuQFGK7oDtGqgtYpWej6kXRftG+itJnJbaO//gNhbhL8DYeZdzCs0IkJvmaig6x2Ov8ZKIlfB6Qrp8T1in2Hk+pe2EK8g2ZmmRwWXPiLTgK8Yzk19w1CiHjRSB5r4jubOmxOfcTtHJe4MEO7em8QWHrzZZj5Bzx40/MISIgqNJvzjF9rAFOouRES2+4r8BlBLBwgCc6nUBwMAAEEFAABQSwMEFAAICAgAAAAhAAAAAAAAAAAAAAAAACEACQBvcmcvZ3JhZGxlL3dyYXBwZXIvRG93bmxvYWQuY2xhc3NVVAUAAQAAAAClWAl4XFUV/m8zk/c6HUozpYWhFJ+hgXSSmYEumCZsbbqFLIRO0jK0WF9mbiavnXlveO9NFpCKCyqKCyIIqChuFQVtlU4okUUFqriggoqiouK+L6i1IPHc+2bSSTLWftov39x3zr3n3HPP+c+55/bxl+5/EMAqBobb9+zZ0nJ1/YCe2s3NdH1rfWqwvrk+ZeXyRlZ3DcuM5qw0J77Ns1x3OE0O6U40NcRTu51CzqlvHdSzDm+uz2eiOT0fNYSOdHrVyhWrV9Jau6UsP1jIZonhDOnRc4jkZsYwObcNM0PcYW47tBfxW2IrYy3RNB+uv0YFYwgkrIKd4huNLGdYYtmZeMbW01keH7H1fJ7b8fXWiJm19LQCH8OCXfqwHs/qZiZ+ycAunnIV1DLUZq1Mhtsk31VFQZecbCPhvG1lbO44XYbjclMInF9NoLzjsvV8UC9k3TLdO0NcqHTG6DtHMyToGtxhOLFL2lhwjWy8W8/Tovkmd0cse3efkeNWwaWodDCcnLJM8oqbmKWgqbFCw9GJtuUV7M26M+Qpr5vFVBAil5xnmIZ7AUNN4/KtQZyERQEsxGKGk6rpVnAKg8pN1x5LcDKwrrFyM2K1BXEqlgQQxmkMJ0ybUnA6yRout3XXIpcunibbUeKTAg0vn4eXoZ4hNHtewTIGhZDXw0ddafXlQZyJs+ahAY0MPlOyTyrrrkAAaY6gSaxrZlg4zffLNogTKYiRPzLc7eRjQZwt1sZxDtnsWglX4HOmXo9LeldiVQAKVtNaEt+qZws8iFd4ClqmgdETUdBKpudFiFsaZxs6m1P1NOfhfBErit2KxmPguQoaOpZvFfYuDkLF3LnwY10QQZwgvtYztP0fUFewkeH0Y5njoWxzAJvQEUQA88SunUHMx4niq5vhNEL8oJEp2Jy0j46tLbhDhDgjJatQEJcIiPrRSzBw9EHebxtyR3lKSqB4/5aOsr/KJEOwklbQxzCXIpWg6pWjUG0V8evHNlJJ3M2W4waR9HiXe7xey/bQRjbvwBVi5pWlGd0dCuJV3mrdQ8ClBW4ThFIeM80wj5gbbT2To4MEMejxCU/5xtlwOh5Ox/8m5vneEJvvoiJY6ZPEmOnqoxtGUzwv3Kwgy3DqUQVbChSBHK+YNymJNupUjdOaa2l53Xa4RnpU5Bkixz5W35BtjegDWV4yyA7AAhW0+UOum4/lRdD7HW6rKEyrIbJkjVAUMqL0nFklcaqmyRiumodRXE0VV+h3Kje4hiF2LLTPBKCoP6+hutQ4o3Z753htANfidVTZphw7Q/QNdI053C3lEEWgArbTlkqFb8SbArgObyaFejq9TneM1PRcYFg+A/eVVFe7ZZrkAlpI6sho75Cx0iE9B9xAyqfze3XHoUsoreLtdPnMDOO6gpFNizR/ZwA3imuiVgiZBPFolZjPLpYleQrLTXi3UHEz5Xtj+7EXvkcsvFX8rPZSSdjeYQ5aQbzXS6X3MfhlcFXcQTbxKwvUizAsqoYRui8+iDsDaMOHGK7btnZLT0fPJq3foU21zX19vZr0tDbd1ZpFd7Cmm5phOjxFpUlLTXlX4D9dQoxGQtom6VAtTTXRNgYKYk1M65VdkxBzDDqYVpjaMBFT8RGG8H+smQo+Rqin3mXGiSqy+uO4K4C9+EQl+KZBQMHdlEziUJZtXCXPpOJT5CvvtCr2CQTfJZz8GcqUo5u0ZwkQCu6l9CTPS6qLDiqaovC027BiiqJWxHgAB3Bf6faLiVSJ0V783FUq7qeDVBVU8DmqzMKRksnQ8F9QJZfRdg/ioQAewMOUYGTlBjNFvSbB+wtene/mdGzC6EVVtG2fpa1Sv80Hs+TAuKeBNnoEj4pzPcZwysxzLZva9kvkLC6JvlLroOJxhjnb1yn4akmymn4FX6eIGOawtZua3DVV0Lv9OIveN/DNAJ7Atygv+vs2RltUPOVdTevGXNE7Lq7m1+3UBnwH3xWp8XS5RZILKsr+9xk0MTEaG81lYwOGmY6t113dHcvzdq9RFQ74AbWGeVLqep5ZZ5i6PabiR1SFqP5tofzkjltqK8cYzjqua1Dg/Mf4SQD34KcMV5SLtEijKhnnaCOGO3SMjDYczbRczSnk83S50zVGvDF6Y2gXb+2mjPwZ2ZrSs6kCvX64KDhrMyRM9UeGfZhqnkUH/WWptYiVHi4qfl3Knthw7ijzt9QrWE7M1HNcxe8JpERMTf7Rm9Tt1JCKP4uuQp5mRMVf6Qlwtoq/0U3R4MQbHK2xwWmTf8srPlX8g1AzaNk53Z2BmioYr4KaqT72nzgigv8C9dHtBF4qGAmX3oN0w/WJ61q8Weit1lPIDXBbclBHnZhCT0gffVEvSV91oqeTI3WUcqTOjsZaml1AFMO/iLoJNSQDJCITWJjsHMfJRSw9iDMYupoOYjnDbVhDH1GGhxFPJrsPYgWjmnJuz0GsYTgElXXvxQnNkiJ2dyTaXMSF2/ZOPhLZR2oZXqLfGHyTCGGOgoUKtf20cURBXEHbJNni87hE0R9wmFjU3+OikoFnk8HCwGWR5I4d41jbdADtzQewYQKbkp1N47g4cgBdSw+gp4hL90P8m4stSJSkbyZKuOXCCfQnhYYiLutkXUVs7y5i5wVFDLT6iuCt/iKGWmsjTc1Lw76wP1w7jt37OidgJUNXRsbhPiSVzKP3RY68WCfHEBbJcTG9scS4BKfLUcMZcmzACjl6LgiCTRJJHlGIVyea55KJCYoAo7Epci82hIYP4tVzyK91ktojqcdQN4Frk4Izjtffh+vFOedItbWYc9oRCu8kfQeIt4xUnUVjHd6Ct3obsKdpVS2N86XKt0mVD6Mt2SPpd5TpVt9jaAjTjzaBG5PRneN4VxG3LGgt4rYw+eiWIm7v2Qu1qYj390QPwbefvi4LfWBnER++HUHS1R76aBGfDH26U8h3hfaP47Mh8uvBZLLVF5oo4vOhL9Y8gANFHGr1h74s6K/4iE7WhL6WIGbYz2haKeJJ4irJaM25/tC3i/jeIv9Omn6SLKTtV24L+0I/FLLPVsqyksgFUmJpWWDv5BPNkaaoZ3wRz+33QvpzL6RzcTWup3vkGfLULXK8FXfI8U7cLcf95BcxPkr1ew6NT1HVFeMzeFaOz+F5OXqx6IP6Aja8KADdRnhfJGCr4B6J6klcjhoJ8RuJJUBA2K+Bf4olPx4QE88cQXxSZqwgZGQXU3KL/xrqpZ1sEjsMHyNhivIvsKoEo1sRkCC9QaBcBPZX5cB2Cuo3ZapLUL8rU92C+kOZ6hHUn44CQpB/mSL9C1ThZVK/o7W2JvR8whf6e8IfTdSGfQkl7E+okcSC2qbEAqU5ETocrr0PL+6T+Ugtk8Rrzb8BUEsHCBQxDlHZCQAA5hIAAFBLAwQUAAgICAAAACEAAAAAAAAAAAAAAAAALQAJAG9yZy9ncmFkbGUvd3JhcHBlci9HcmFkbGVVc2VySG9tZUxvb2t1cC5jbGFzc1VUBQABAAAAAI1SXU8TURA9lwLdfqBYUUD8XBVKwnajxaRBYoJS4KEG01oTn5rL7nS7dL9yd7eGGPkh/gtjgkQTf4A/yjhbNEbxwZd7Z87MmTkz9377/vkrgHUsC7w/Pm433uoH0hpSYOsbutXX13Qr9CPXk4kbBoYf2sS4Io9kTBwcyNiwBmQN49SP9Y2+9GJa0yPH8GVkuFkN216vP3xU51zV+MXvp57HQDyQxgN2KXDcgEi5gcPoiFTMvRhv1Oq1hmHTSH+nQQgUO2GqLNpxPRJYCZVjOkraHplvlIwiUubu2O3GpPZCn1phOEyjPCYFZg/lSJqeDBxz/+CQrCSPaYGF7ebOVrf1srfb3tpuNXvdTrPd29t/3hSotH4zOkmm7LGAtml5buAmTwRy1dVXAvN/Jz1NXc8mlUdZYHpznFvGBZSKmMFFgULK0moD1qbh0h+qOkdxQn4elwVKDiUvVMjzJEcCy9XzSlbPQ2VcwdUi5jDPjbNlBLaA8V/cn5q5xCKuZUKXeFKzdrZaDTfYS8KzVIG56j+b38LtjHmnDA2FAqZwV2DyGT82734Kef5ggqtzbGxpKKLE9332VjDBFrD0BTOvP2G2UjnFwgmuV27ycQL9I+59AMa0HJ8TyP0AUEsHCKqL4xbZAQAAsgIAAFBLAwQUAAgICAAAACEAAAAAAAAAAAAAAAAAKgAJAG9yZy9ncmFkbGUvd3JhcHBlci9HcmFkbGVXcmFwcGVyTWFpbi5jbGFzc1VUBQABAAAAAKVZB3xb1bn/vqtxr6+VJcVJlCmchDixZWeRoZCAVxInspPGGSiDRJaubRFJ12gkcQcF2rS0lI4XOkLposMtpdDSRDa4ELoC7UuhpbuU1z1eH6V00QVx/+dcybZsOaS/l5/h3nvO933n2+Po6xcffpSIVis3MN1100271r2msiMcOWoko5WBykhnZU1lxEz0xOLhTMxM+hNm1MB6yogb4bSBze5w2h/pNiJH09lEujLQGY6njZrKni5/Itzjjwka0ejqVSuvWgXY1LoCfmc2HsdCujvsX4FPI9kVSxpGKpbswuoxI5XGWVhfV7uqdp0/ahyrfJ1GzKS3m9lUxNgcixtMi8xUV11XKhyNG3XHU+GeHiNVt0V+7rO+WsOxpEp2pqk3hI+F6+LhZFfdjo4bjEhGJSeTPYF9phlVB4Ij++0ZwcSGpXuZpoysNsbD6bRKOpOny8jsTJkZEAGLTaZFo7JqqUUjbUSyqVimt24szAYXuWiSTuU0mWn+pWFVmso0CQc1QlmWxExzxx0xsgvibvLoNI2mM82aCEqlGUzlIBs0I9KYUEyBaNLI1O3ZFQShWeTVaSbNZnKN3lFpLpMjY+7Z1TIOrQVo82mBTvPIV4zWolIlUxnObIePJCDG9ALqaG27aBEt1mkhXQmrdMK4GlUVWc2CU2kZk9O4MQsfY6qoCo4164al+11UQ36dqqkWtrI4iZl1gmbdznCmG0ZczmQDQ/CfqmIhCjKNhgdrK2mVTitoNZN7/L5Ka8BSxrQ8clgvABErwF5H68tpLQXATQk3U+nqgjfI5TZTelqT0bnZzCajzamUmVJpU0GpebIqXcukCkcEBy5qsHTXCEaujiVjmU1jdDPs0i5qps061dMWyyY7wykjmXFRiyBQT9ssom3hhOGioLXWCqIHa28IpxZptAPeU9uTMhFZmZiR1uhV4Ctl9MTDIiJTaah0XYlzS3BSygPaabcw2x6mJZdHRIqzTzB5nRUtljhCQS7aT+vFzgEm36gsEYnHEA+JRDgZDSLfACFtQL+H4BFVFr3DOl1PR2CscDxuHt+TPJo0jyd39Ihogcsx3KuDImWAieKrS6NOGN0i7s+Clr/bTMB5u6E1s8cKsbUl00twYq6s06CRG+io4CZ+SRksaJVwkiuc6somoILdvT1wxmnBMfkLJHvoxjIyKQXmb9QIBnPcmI0ZGY2OYaVJoxMwcbo3nTESfmFojV7NNFmSyWZi8bpgLI3U+VoI1W5kfBagL+8RvT6z05fpNnzb9rb6qozarlqfvynRK3Y3JnqPheNZY2mtRjfhhKiRjqRief24SznDzXSL4PPWQhKQp9enUuFeBPAbod1wWvDCtLhIu4UsECxmGQTfRG/W6STdNl6X0gmiozSq0luhvBEKW8Ppboir0ttQEiyrpht6LVbhKMFiyNZwD457O71DOMk7xxHCtkr/BQGkQuBSs6pGc9toxuNWJQCRO+ndOp2i9zB5q0rDWD77Pp3uoNOikAXHcZ0Heb9Ot9PdTGteKRgWNRidZsoK5/ZsR35fpQ8ybam6hNNa2BvGQoxTbp6fD+v0IfpIIaNK27VkjFS4QyS3jzJpMfGVMVNCqtEKasmvQz0fp0+U08eoj6nmFaWyHu2ZcAb0P1U4t4iiSp9G/kM302acyMiEgGD/DN1fTvfRAyhLSblcXL7y/uaiz9GDAu7z8NdEuLfDwEmpzI68h5dMxiB+lnI63Uv9TIrfr9FDTP5XFKS+E+zm85FKgyIALlfnj+j0BXoUMvr9B67feKhao8fwkQhnUJnTLvqS4KaavozSkM52pPPuXVHVUjJbf5XOC+jHkXnNZJG0+y+zBLyiqBbBUZbDsV+jrwuV/TfTyv8cX6VvIJvl2RVWrk9BwuVVl8FLMRdP0Td1epK+BWpV16SX5vW5sXaZRt+GSmPJqHFiByqDHcprcdF36XtCV98XvtwykTp/KEB+hA7XTNbn0zhTQynP+U+5/TE9K7j9HxQIya1gVvL6U2SvRagLopzDnZpiaRF/URf93Cpxv0CqzmP4DwmEXxWaS8lPfQEz36X8RqffitJZHjGTGXSx6e1Gr4t+J7qxU/R/TDPHitKQjcWjov7+HsUHAfAHnZ4XrYlTNO9JFFh/SfEnIANJ/0R/FiT+gvyRMa1NF70oGpnn6W8wFnoEpMWCel30D7pfaOafUutQY0/cyKB3eMky78vgJI7BJNMtswEMOQRAqmbMIeVmss3M9wUutgkN38ti0JB0CuZoTkZd7BQ9xb2sFvezsnSqXJbvXIabqrEFYWRng4vL2aWzzpOEQqHoqy/HO8Zlg5H2gqeiKvA0pisvD0dlDxJCcExBzhfYO7mijKfzjELXXQyg8iydvSJXTy8lm8pz4AIbNZ43QbYUUcQLhPIxYJDGGCpsPdmxDWc+HU/YEBTlbF7EcIxTjJHDCVL1cfRZ7tEVVFRyZE6u4qU6z2WMHpN7UkYanjPcD44t/qLguriG/WVQLAYQrRAKLl4u4uAOXiHyQ7o50ZPpdfEq+B97GZOFPR17teFizBJiYe24vDtcaFbyegGBcWLBqNKJhqArHJcB33wiYuSthdFijsWqD2XNl8jGMzG4uM9qPWo13qTzRhFwC/JQUdNI+5JmBuDHDF842WuBArIeXfmE0/Ye5IGt6HuDpnk026MyBpFZTc2b6/cEdx/esqu+Kdh8eE97867DW3e0Nru4Ga0dN/Hm4ca5VjTOtbJx5q3WgJr3jF645mWlACh9G28XsREE2bFnatwGG4OskTzm4p0WIGaXafnzR4003M60sKp4hptg9OA9GDB4L1NVCcWMuLYgsRVhFEei4+us+wMr+kcH/YIxZy4d44cu3s8HdA7xQTSDJc4Lml1d4oDrRdHZb/F3ROfDHBYD8wlEIFwwItJdPSOxVpYgkb8zaT5hRLKiHeJOeL1IM0tK6mNsdrLOjOncxTfgTDh+ZwzVtSgfjTmqUcJkU2ErIXGcE2VARw8xpwRSEwaxuBmOqtxT2hlLUVUZHeRkDPjHzdTR3bGEYYqkwS0uznC2jNOMuWcmeD0GKcZbpbpqAllL9fx8gnt1vpExMa2sKiW1ZaMNJXBbLOW9VqC/jml2CeSWZDqDkVTl1xdPMMMOF850i4Kc6JCOdst4lxrjYPLEN+h8K2OcOnRJhi9hjJKbRbzkT3qTzjfzm9GCRGOitezIWs3i5DHXSPwWfqswy+0wUp3GdyAdYHLNtFgdlYvfYRUBzFWMrIQ5Sk2HO409qRjT/Aluc4ZJ38nvFgrGODUpY9a3N7a05FsEfp+8QGGMULbWpqs0fj88sPgSrdVIp8NdRlOsyxDF7ANWmpJGSYrLuRUTp6nSNMDPh/jDOn+QMQU59uze7F+nsRh8QLahNyO8b0YpmgcaXPxx/oRQAoqpM9sTRc4HhaoDDaJWfYrvFTQ/Xaiz6O676xpiXS3JjCETxGeAFJUciEwhyT3AnxU4n8NOVYskA3t9Xuf7+Yzons6Lt5xooZALpo42X0M4jZr1kMjnaX4Ytti5a8e25sbdGn9hDKS8p+JHLchzgHx1rMfC/qK19iVrzYL7irX2VUSCcSISz6Zjx+SNb30kAhW2hpPQIsJ642jfi0HAVDIct27m4mbkKNRV1zwhOvT/OD9RBqf8GtPciQNu0QqVMW2kLhlMxZ5WKiTy1ErulcyGlhW+ofMFftLyCnmFg/pRNIDm73X4m/wtnVR+GkatjUeOavwdWDNxNIox3sXfs/I+5o/yGLr8FDoJM4X244fWOoaO2SMUd2WTGeTJUW3EjzEjNZrZeFS2BpGUAY/z9ci7Nl+0QM3XaaZ8Qu0+YQCfxhg3poDr+o60Gc9mDMuyP5WXivwznZ8VfYeWDCdNkZVlg73Nxb/kX4na/GsHiX9TGq61EX/nscLUAXXvQiU1E5Yl5U0oY7CYN3wtG+kOJ5NGPC3N0mh9qPz7goDjQIJgWOU/YABPHdf4jzo/Jwq6LrRtgTFdUTXqWrgUfWj/L/xXgfoinDiT6hVERTqaCE/sA+nv/A+dn2cMHxv+H36s8ktoZOSdQ2PcTBuvEtd58d6R7IHT5YYY7WQ7e5GHdH5ZoaJ5ZHc3zBpVFQWpJB03jB6RHbYBXLErDl2xKc5CX18AN4/LyxpFA2QEru1SdHoQ7qqUQwv5X4dcyiQMP/yCMhkGjsc6NGUqOoISIdBgmhlki3CP+MVGjueYYleoiltXPCLtlMWRTITsCIClxaGYDCeEVjKi0hwYc/muVCgz4G/KzMLwmf8tQ0ZNEOUL+lO84p7Yl/9tI+hS5orfPxYqYhIZE2cFjAXIrsNd3KgdcU83LjitLfByhVKpKz5loYtarLfFQpYDxT+/TIAts4GyRFdmK1UoXygoIvoso429k7JWceAypVpYrgaCpMVPSfCsE5kidmdXTXyeUqvUCfTlcGVYrDbfK8fD2WSkG/261foLe2nKSmEhYOZT1OJX6NnzSUtZrVwl9LBGw0Anf49oNTLdJgS6tgSBA+MIjCaZMjrFnWidRQG01ysBncqVDUU3FsVQqrIRSTKWPGYeRQJaX2KQnPhquWgoU65RrtWVTQqGJEdExJpLaYTfw1hNTM0jqTMufnYz5B25pT1fQZu+bfW7fLFkYXl06fQtWZxeUqspmJecyLEo6GN4LaGfErwW5iRlq9KC5kHZhmKQ74fFvb2mBMUvjCUup0bdriht6AKUHUx1PrgY+I76jodjGQDJ7D9cq31hmaF8GVMWgwCoY9pyioIv3jFilftiaV/W+nFFU/YU5ZaRyqPsA08j6sMM2w0lYVb3WbeT0EqIadml7xuHU1U+iDBFPatgiqrJl13fyPRnlS6h75FJWM5OOAiD1aZGJHEsRTFIphKxpOGLCD/sQWWT8ueTmW9bOOXrTJkJX8SMGh0QumDCI4W2Mt8ptPcmM+ETo+TtELc/l+A9KniHr9rFb7rIA8iUkaMYIHYLGNRbcVXTlk10GCm5ghTvIFWWUsQXafiPlS6iSUfwVk6kVbgdOZqSo4oczcnRFaFgjpa4l+ao7rT6TPUAXfUQIX6CfeTeN0j1odbqHDX109aa4LLqwvd2/Nfm3unelaO9/RTK0UHrLzhI14cOHmzrp7D9LBmOR6g6FLK5u9rt7lh7jhLu6rOULqxmsXpcrO4rrPRi5TViJeR+HQDdrz9LbxigtwzS7aGAfZDuCPnP0Lty9N5+uqufPjBIHwoFHH6vvZ/ueYg+yRRwep0P0WeZTvN5r0O8n2F6DKQDao4GTvPHvar7YSEmTRukLwBXoJ7rG7qA9S/m6CunyQs0Fcp5wqseztGFHD0dcPQN3Yf978j9WrE/dWOOfrBGAFYA9BkLtMJhPyLfnsjRTwTScSD9TCL5BJJ9BNSrOkfAdj5Iv7yLZgH41xLY2Uflg/TbUD/97zk/0AAZ0CC1V8vRc6dpuqAl3gu8TfXnaQfKBFSZhHqD1zFIz4e8ZYfdL/TTH3P01xz9XexdgNA5+tdp8hQEtdi4+DUvPi4GHI41WoXmVXOs3HPxrNdRodmPCEkrNClqQJNktSKyFjMXAwDxagEQ6Bs6BzsZxcxeFKdEJuQrD9AgMHLsEO9rvHYwxdoAT24bpFPgvJ+nuHtz7D7DM3M8e8Ta1FJkaw/Pz/EVoTXa3TRN0PPwwhwv2dc39LRXiuJVbRWakEa1H8mbWm5/3msP+cWR1e4uoSd27zvDdWJh5Wlq98IB6wMOdxfWQwGn5OEq+63CJ6yPdfaP0kzhdviy5XgDmEHU9JExyBtDHr6mn689Z702iNcHecs+D7cMcCvOOk8VIrQgkgM4XifkJ7+Hdwzwrgl2p8gVB6iI0PSHxGe1h3f3874BPgQZxILXUbTCh0NtkNGdRTQVpMPLyn7uyLFx2nZ+kLtCoZpBnhvq5+5+PnqGzdZBvhHg/pozfByWGODXHO7nmwb55lArIm+QbwVJR3U/n/T3822AD7Wd4bcJ+tQEhj389hy/K7RGvVs49mSvs8LSubCdh08V9nTIpPbRJK/TVqFKy/hDIDPA783xXQHNw3cP8D2hQJkXrx/L8SdzfN8g3w8/sq/RcvxghQaezk5dlON+6V4qPgfgXOJ0+uthy80CqrCfdoYHQQiqlXlA9zoCZX1wE6w8IlaUO6sDZX6v5i0TlPyC0Bl+bJgWnFMSg04FtbIz/OVQQC9QK/M6gkJKvUDsyhpvWfUoQueLCeVfncM0z/DXB/lCKOiFpF57DVT6VI6/LbNwqFXEycF8+Ej52iSJ7w5jYzvUluMf3EUr/MKeNAmPZ2RK8Q3ysyGBW3PYwz8Rocc/L+D94hy3ccA+wL+Zzr9NePh3J8NrHRxQverjtCe/OsNx5920dZCfC8n4+lMNOPhzjv8mHelfobbHaT4i3T6gMP6m0RMnBxTYU9/uVdv6uAIpqg32Hfrs9j5G9J2n71fnFBfcB1pQpgBDHK/wY1QftESt9ijThEBCiKU1UojKmkHFE2rtV6bX5JRZodbzNLXmUfuHSa+xrWztIwe31pyn9kFlduhgEBBzcsr8VvsjNC9kq2kfUBbllCv7laUDih8nr/Aoq3LKWuyWh4I298Z2j7IOy1djQcXCsnbGV8O+nNL8OaE2ubzdVg2wLcsGlO1CY+N457ZzBRXDNh6lVdrmdzllp0fZJYxcVqTxZf6CsobRvPphj7LbyooeZe8I7DBA2QQA2wWER9m/rF85dG4UxzXg+HCB4zGShAvrEhmYnedoOhqGyVq5EqE5tIiq6Br7A/az6pPKdfYB+3n5vGD/kXg6pzvnOE8QOZc5V8jnWmdAPjc5N8vnZmeLsxvPoHOHfO52Xi+fHc5u+bzFeVKtx/Ok850S/pTzPeKp1qtB+dyh7pLP3WqnfMbUW8STFAXYNoNWD4E9RaWNKi0kVumaIZqc/wbZIfoIqdaH/LtepdtVulel+4heojUqVS9YfeUQuUWDNIRGSSsJCzABvgjPIdpcAujJAtAQ2qqyiWiw2G8kfaJ9608AzZwACPJbAL5LcTqEzs45vE3WpoU1Shc8V26ckmRfpuWCwb/T/CHaK5ShD5FOjjHQRFfMe4nK8T1EfcMc8M0qp6F9CSmE/CfpL9F0FrooDSO5fJmSmv1FqdJJw+KOg5Mg0pCbxMFFQFTQWb3maJI0/yn4vo1sQk8Saa5FmS/Ib/Evv1FhmUluqPycys/bVX6hsNuATlnA8vPif8/Br5SyIXIW4bxg4TxXwNHIIVEErTyCrXB6YZlGnbF3xEtfEo4LnbaTUtidKTkYjWaR9MAsI+vD4lTDVkrZyIawXjkN/xv2Gn38EgnK110klyQmThZMLLSYkJsRJYZnLW2XU8R67O+EaPvJTgZkjkEvvcB4PTh+F0x+Dw5B40qfAsX7YNoHEI9P0RR6mqayTtPYTW7lM+RRHqbpyjmqUL5EM2zzaKbNR7Nsi8lrW0qzbWtojq2R5tp20jxbN823JWmB7Y3ks91GV9i+TZW2F2mh3UaL7Cottk+hK+1uWmKvoip7DS21r6Zl9rVUba+nGvt15Lcfolp7hOrsJ2m5/WO0wt5HK+0P0Cr7j2i1/UW6yv4vWuNgWutYROscflrvWE4BRwttcOygqx0J2ug4RpscvXSN4310reMBqndOpwbnWmp0voeanHdRs/OHtFndTFvUt9FW9SlqUZ+hbeqfoSsWbghd2f4NUEsHCKHUB+F/FgAAXS0AAFBLAwQUAAgICAAAACEAAAAAAAAAAAAAAAAAIgAJAG9yZy9ncmFkbGUvd3JhcHBlci9JbnN0YWxsJDEuY2xhc3NVVAUAAQAAAACNVwl4XFUV/u9MkvcymW4JaTultCFtIU0zSRcaygCFkrYQDQGbljC0EF9nXpJXZuaFmTdtcUFFLW4oi1sRF9yKigqYTiKRImJbQQVxB1FxQUHFBVERkfifOzPNJE0i+b7Jeefec89+zzn3oZfvOQTgNNWucMs112xZ9/r6nVbsSjsVr4/Ux3rrm+pjbnLASVie46bCSTducz1tJ2wrY3Oz38qEY/127MpMNpmpj/RaiYzdVD/QF05aA2FHeMTjp61ZvXYNadPriud7s4kEFzL9VngVUTvV56RsO+2k+ri6205nKIvr65rXNK8Lx+3d9W80oRQCXW42HbM3OwlbYaGb7mvpS1vxhN2yJ20NDNjplvZUxrMSiaWrDJQpzN5l7bZaElaqr+WinbvsmGegQuEkvZr1nERLzE3Fsum0nfJa2njM2pmwDZg8uNtKLE24MStxmTOQlzazQx9z3BbBz1SoEpq4k/E2OmmFmiKWdnZmxVPb0oljh1K217JtSzsPzREySu11+rJp7VGF5R2TGNKdh22lpDxf4fU7maUrafxkhwrWC91ZTsrx1iukG8brPRlWVG86lq9Yx+WXBDEH1ZUoR20QAVTJ17wggvmvUBAzMFO+TgxiFmbL10kK/gY5V4PFARioUyij6+m/ExqWd0yMIa0LlhphYKnCjD7bu9iSQOajNbt4sGhpEKfg1ACWoUFh3hjLLk9y7rysk4jbaQONAawQ8QbZdVpJe6IGeXIyC6NZmLXQ0+KDVFwh3HA84fFnC6LIYhVWi7Q1NL7ZvdLEWgXTc/NUQZwuAlZgncKSSSM4Top2XUQUkrx0MsxIOspNX60de1kQZ2O97J5DdZ2McAliQ37pPIVZNHbDzoybyHr2xZbXH8TGvHWbFBZMnRIGzueFtGIxO8OMXMmc7GuYNoP+nxXTHF5agG1SaOi7drwqgAvwaoVTX+EhAxdS2zzhBW6SDrhIErITF48rE11XZzw7aWALPWenea9rj6l9MbX0qKttJanBVmyrRBcu4R3vtZxENm1fSD9YfUyZ6skS5lJERdplrBSTMDSwg0k3IAsJVoTayVKJQb4CPQFcjtcyjHEWYI9W7MyHMcbkYRjbElYmQxHjklYvUgUbvXK7+iZ32mSX2YBDZUqrWle/tXpta1c2GcSVYtEuJIrXsVBFDKTGe1Srb2CA7u91pXjbXqxfYfGkaV0sRWJtGhkJskdr7b3UIRPE7ry1e6jVWBFvcxMJpju1yxhgylfayQHv6g6eYCyKntCUskZHvB5vCOB1eCNJE1wR8XTanIbl2yfWjDfhzSLvLbwkE/YMvLUYSs16QzptaZkG3h7APikifisenxDLQgWTK/kOvFPo3sUEGq+ggfcwmI5nMwYuM3DuOBPaC+tU7r14XxWuxw208vh9Azcxo9icO+29XhDvx/oq3IwPsLKm9MKHsEQWPkznJty+PpuCTpzsAnboTUq7BR+pZDRupdUbJfcY1Lp4sc7UmfiY1KAeqVmfUAhNycnAJ+kZigzi00L+KXyGYchns26kcybkhfjqAG6XTPgcU600GYP4grSSXbiDDcBzN3S1tbcX6+eXpIS5+DL9x3HC6b16o7snlXCteFthVlFYO8kteyWl9i7cLdp8hQmdTb3OGeiQOWGqhD5mBg8eRE4ODrGsjgWMDFo4ZGzaG7MH8nfuq/n+ky/FI3k7vsa15oy+fCYOEUnbLNi7WW3qp247xcsUxNdxv3D5Br1R1Oq8bG+vnbbjW2xLt75vMmrFvfbUQLZQmYrbR4pts2BQCYmBb00SNt2THgrgQXxboXzb1s3hdSa+q9A4RljCY8qu9kgAR/E9KWnHjuVVKux/P4DD+AEvDLnEOzhEBvEjcdlh/JhiYwk3w5WfylxxGI8Vb6wWU+Lxn43b2NqfdvfkR8Gf0yltbjYRr0u5Xl2vVK463qn+OlYy5vwveWkmyfRiqhn4FSOVsXrtbWkW0kUNE2rcxCj9Br8N4Nd4asIsUSwa084Sv5eb97SCajbxB7qDTsq4qQiV/JP0PdsrtKcg/izu+QX+QtXcTHOKU46Jv3FskJRLu9TfYw095RUNM5T8dzwfYB/8R7Hm58uY3Ai6718Kvm1dxzpiyR5P/hsvVuIF/IeiPbfD3cPewxfFmOhS6klF/xcvB3AVRmnIHicVd/dkTMU3gsnx2rOcFEv6iaVWtPVb6S77qqydiumqovyqjOdVOf2z00kVgmgqQ2H+2Cm6RAac4oSoKiWr+vmKMVUVC9npa9eaagaNl+ZrpdyUQ331zVWz9BClZksF3z5FeqvqgAqoGvLkpJL2pFuUmloQfmZQ1aq5QjmPF+24bUOFxAWW422WfsGJrz2oTlQLA2qB4mg9k6qV3DTe45LZuPQKBtViVSeHTh7X2cg0aXmeGL8koJbq6XxZZlnKVKewefTqXYWzJkmY7VMm8XjGlNyglpO3auQtGTvTnuJmOjvg2fGxy6qaSkao9otKNppFu3Xjhg9eZZYFQ61igyg89PJLEwf7/CoVWaNOC6jVisN4pVMUH1Sns4Bwlcwbx8pBxvbq7L12LOtJsajjzUk6GXm4ZqQ88OqpiIglY8/utPfosVudpScYdXaxB2jpW7Ipz0naJbacE1DnSiM9qVhL7Hhdaeur6yU3SuD4PrfOyVCfOr4snXgd24neazbVRgaqjc9tKtHl8UV/oTWwVTTlMCOFsjOb3Gmn9QofbOWcDGkzymfPkUcbQBgsQD7YNORzTUM+7wD4SF+DE/gs30yskecrCBc1RnfsCJUdxNwVBzG/6SAWhA9iYaj8IBYN4eS7IH9zUI8l+XPmcsokd/8NjSNYFu1oHMT8HJaPYEW0sWcITRpdmcNp1a38l8MZQzhrEAtyOHc/1q7IoW0/mnlmLn8LojlsHkZH9MJBvCbaeQQVB/yzVtyNbjLZnoOVQ7y7MRrdQWpSzO8cxMJIGY9FygexKBqpaMqhv3sQyYjhbzUrWivDmrtZa+5HoCkcKsshGyrPYe8tqBrGNRHzANoFvzYaMY9S1uizIXME+6KRwBCuO9Ra5W8N1gZrqz6JxSGzNrg6Gpmhla4KBUL8enf324LqwOiToUDEDJlfxY0K+Y8PKuzHGvnar9i2l5Ef9f+oOCQU6Kn++BBuo5l5X+Tw2WF8vvvA6IPUr2IQX8zhznDIGMagKDZMMw7gN921lRW34ZGQcRQPNWmqaMTQ7AxxcA73infvK3J8IGKOaKkhMxQIF0IRzlOuLKFkHOiQERyO7pATR6MjeJAaDuE71Q8P4dEh/DCHn0TMHB4PmRHjADrFYZUhWbivKVq0yOipfpIWDeN3OTxT/cdjZhX3zZ7qZ7XFfz22pSJGWatZW+l7bbS18mPqzFrzlpe7iynA30LN7M6SRFBVsh2NlEmAq58bxj/vxks5Jq/y5VTFfsYOP9I2l4drlEnDVOeICkQr7sVV0WiovCfqr1HBrrIaNbOrvLUip+bUVvR0DakTcmo+0yanFu1HRhzRKW6IGCEu1Vc/3EOfPRoy6IgRtZR0Q2oZ3fkTEhxBQ6iiRp0aMcvuhRGNVPpDRhfdXZlTKxjMJzoPYDZ/C4TRSn7MDQ+r1pyi8X8lZoYFho/g5FBZ0U3lPTXqzAmZ0dS4IqfWd+sLFCd4TWf4zhF1blRuw5DacJ9852Nbo9r02Wdq1KZCcLmP1biR74VLcQ8+yslb4B0cpwUOckQV+A0c1fAhPKzh4xyIBMoII/BpDhkCX2RbJmTDDWg4g31MoHQagfXqDA3PVls0TKoB9SSeUFepd2j4LnW9hjeoj2h4qxrW8GvqUQ0fVT9UTwHqx+oxjT+l/ijQd73vA/6ZqkXDgAr7bvV9QuMCBb/N9xmNCxT8dt9BjQsUfNg3onGBgh/y3a9xgYI/4DuicYGCP+j7ucYFCv6k7/caFyj4s77nNC5Q8Od9L2hcoOD/8VdoXCBxf7V/nuAaEodPnc+yex3q/otLDCwz0PkiZo5y7gsYKNcLF+j/rv6/y+Bwo4BRVvEpCVjDUWEYo6zxU9IYeBupXsZsA/uUWjjKXlE1NT8SiUz/dPwMrZY5HcnNmuSM6TW/zMA9o7huSiKXRFToiVGUTU1j4LCm+oUYNg3VE1qjc6bXaJRN8/9EY5Ps5gk682SyGodRsnq4cJgDDfdOYYiKe8jvUGEVbjNUy0vwk0qcOUbDrQIVJLClGy1jG2WlG+Ly/MYLOHmUHbqMfbpAyJFSvjvzqXRsQ1Fvvr0XiI/xao4D3aTbzv0r6MdrOQzsI91NVOyzbPEvIaA2oEptRFD1YYZKYqZvPWb5tmK273LM8cVQ7etDje8anODvQq3/Csz1xzHP72C+P4GQf0DL8euxw/8/UEsHCJOC8wXEDAAAshgAAFBLAwQUAAgICAAAACEAAAAAAAAAAAAAAAAALQAJAG9yZy9ncmFkbGUvd3JhcHBlci9JbnN0YWxsJEluc3RhbGxDaGVjay5jbGFzc1VUBQABAAAAAGWR20oDMRCG/1i1WtdD6+HGu1Xw1HXRVigq3giioAgKgpdxd7qNZg8k23oh+iC+hRcieOED+FDibFVEZCAz8+ebPyF5/3h9A9DEnMDjw8NZ6869ksENJaG77QZtt+4GaZwpLXOVJl6chsS6IU3SEm92pPWCDgU3thtbd7sttaW6m0VeLDNPFR5h2GxsbjWYNa2f+XZXaxZsR3ob3FISqYTIqCRitUfG8lmst9Yb6y0vpJ57PwIhUDlPuyagA6VJYCk1kR8ZGWryb43MMjL+UWJzqfXid94vLlbGoMDUtexJX8sk8k+vrinIyxhmv6/xwzRmv4njPqNSv/DfYaEtle4aOiFrZcRE7fjX5TwvbsvU8K5KVL4nsLD81+A/vHIhUFpeuXDgYKKCMiYdjGB0FEOoOqhgrKimBQb3+ZVQ5abMPzPAFVNcVQuGs+BwMM7rLHfzKHEAk6uXly+YWntGrf6MmSegj5b6FqVPUEsHCGq66vNqAQAA5wEAAFBLAwQUAAgICAAAACEAAAAAAAAAAAAAAAAAIAAJAG9yZy9ncmFkbGUvd3JhcHBlci9JbnN0YWxsLmNsYXNzVVQFAAEAAAAApVgLeBzVdT7X+5jVav2QZNlebPBYsrC0q5X8wJaReUmyAVnrB5IfrO1gRrsjafDuzrIza1m8Co3pA9qmJLSJnQYoKRVtaBq3ZmXigKFNgdCSNH2npaQtSR8JaVLatDUtbP9zZ1balSVIW3/+9s6599xzzz3nP4+r197/4gtEdJW4R9Dp++4b3Hp307CWPKZnU03dTcmRpvampJnJGWnNNsxsLGOmdMzn9bSuWToWxzQrlhzTk8esQsZq6h7R0pbe3pQbjWW0XMxgGanUVZs2bt4E3vzW8v6RQjqNCWtMi20AqWdHjayu543sKGaP63kLZ2F+a8emjq2xlH686d4ACUHBIbOQT+o3Gmld0GVmfrRzNK+l0nrneF7L5fR8Z3/WsrV0WiGvoCV3aMe1zrSWHe3cM3yHnrQV8gvyp83RUT0vaGV8jv1xubhNUCBljmfTppYSdPlcjNvdZbBepp9IpguWcVzq1ZNM6pa1S8tq8pRrKzcbWVvPZ7V05wgYO9Nm8hgu3Llj3u0Q7r/GyBr2dYI+0voB+n6ghnMt7tXssR7L0jPDaWxvOyDI09p2IESLaEmQFKoTtO3/obdCDUFaSnUhCtHCGvLRshAFqIa/VoQoSLX8dRncqclda9evXy9odM4Lug7dFpfONMxOPsylpGuHbEbNtrYP2LzWHfsYpuzbUd3uS2uWJaihta1ClpzcFqIraDVbQRUUqjxWoSY4RD9hWLYlDXYoRGupJUjNdGUV3BydFGoV1ChnC7aR7uwz02mgEMi2FIoIqtEzOXsiDmmC6st6SE6egxrtFAtSlDrAmsYMq4Bz61rbDldbI0TraQNrsVHQ4llrCgKbGmZE9+TzmjxToS1B6mJP1xrWdiMPzcz8RIiudi7UjQtqKaC/sTU+O4628cWvoWt5P5C5qFpxhW4QpBjWDr5diHqppZZ6qE/Q7TdJ76gpMOWN4QJbQl3XYq1TU6ZuqVnTVpNm1taMrKplJ8Dm6GToVoe640QOhJ5SbVMdMbIpVT+hJe30hLphmm+iI0A74J8RM5/RYNKrWy9FyeE57nIpV4huopuD1Eb9gtb9iLBSaEBQc+uHwlTG2K4gxWm3IK9l3KVLJPWHaC/dwoYaRKjPayjXPhbMYKqZ/6uV9uFIhAD7tr/tUouE6AAdZFVuBV/aGA7QIUYE9G2bwxi9pmlDTS23C4oN2VoeqWLtBoU+EqTbGF1t1TbJahnOFzZnnTlgfDufpAna+eFY4eO1PF91GjXqHLtw36SgZagpxshEOSf2uQVL0OY5UPLhTgTAh27uiW3cvCVAoyglksXSk4W8YU907kJOQxrcbozqHA4GQgzmlmjJJuHvDXOc6fphbhkwzTFKB+kOgsbLK7Xrz+YKNkToWkYhk5NDtfIO3u4MUo5QjBYc7lXILucD8FRtPw5A4gsx72s93MuQPEETQRqnuxBVhVxKs6G7gqX+fhZ7D93LGt1XFidvs28sb45rw5wr74ecZNq09BD9OFeVcfoo5KTkhXASslhviB6kn2AhP1m+VoVJegtGOsW15KeD9BAjqW6Gox8FSdaZn4FtbfNm/YSz5xJIT0f0z9HHgvSz9PPcAKDbsMdC9HG6hYP8E5hiLGVx8VWtfZfudhWBkF+gX2RdPikoNr8L59l5ineeRvGxzbKuS1vnVPWX6DPM+xjXmjsL6KdC9AQn2zb6ZTYgOi8bNv2sk6d/BSkf4OoZtsx0wda5rofoV1lCM02KBf4DjHsjKZs31RyZK0LUEQ1QSa1pybZkE+iv5uTJaBPqmHZcV4d1PavaWgaxj0QzbthjHS3ZPjM7YuQzqj2m2fjR1XWVm4fGNETKUCGzTs3lTWy0J1SE6wSf5WSTmJtNOtx1ZDOVew3VsBDdeU5dqAkp3qJqeajmxjEMJo9zt6sjeTODNGDnCxanQUt2ix18se2Vl9mfT3erLRZmXTlq3HRM5ExP59FyY9stc09LtidpwyEV06q7cMCwDFsds+2c1d3ppsgOzpZuozzTIndyxnKykVR9eoG9Y47AVwZOqDQfEnv/iGOtYQaUWrBgHk1N4pK4biVru2rpunSKatgWW/u4AQAiB/4a+tQZrA0WsraR0dHB6Tnep9DnZlX6qnr1G0F6hj6PNsQBH7qFOTLNIQR1WjYzjdMdSjWwf4t+m2F5FhljjnWFiiH6Ap0Jojc8h9xRyN5l5AStnrOmzuS3qhYLOzoPGTmnWftSkJ7nrKfoWZvro6BwVZe1I1vI6Hnpdih3gV5k/peq5FWwKPS7CDW8dnaZeX1HWs9AKiLz97i9+TK9jDyU1U/Y7sLs2J6urK/SV5j9NVSkS7TeATUnFPoDaIyI3o1CGaKvciS/Tl9Dxpm3H+eY35fX+NWkOc0IZ8avo3m1tBGZEViWoCt/pJwFJf+Y/iRIf0R/yiejD/RnjqF7wF3/wkk530CeLDuhtzAywolgT8GuqCR/JWhFpZuqV/86SG+yX8Iznq1kcDH3N0F6g/4W3aUsndOrgjpb43ObrnyZ6rqG+7xF32LXfhtemetAhf4BcBtH2YXB/4mr2j/Sd/jno7wLRSsoocgpIh2iL9J5Ruj3K6vonopA+he8BPrMAsKUmxS5Uw3Qv3JGRwR5OfoD9O+CBILyP2GEeR91Cr3L/Zc5GqL/5gj8L3oP1WMQ2YTTVIBKUAy2cRuFEF7HgMoDYgGm0QLjkazbybH54ier2537B/tl/CyElL3IqlnbeVcvaW2b1ZgJv1DgeRFg9wOLvo4c+ryAqAXGtlek4oBYiGboA96iilgMdDMs9+fRFl3ROkubajIk6kR9UCwRDbMK7ryte0XBFY0wuVgmaO2QnkdsqHndLuSzSOo379u3F5SVQ2pF/jVTOswpVpQfe+7pisAD1Web+wfjFSZxFuNQbZW4PChWiiuqt8UVgVfjIhQxrolZ57mH1Dtr/8waJDWJ5qBYI9YiJ+DF1atZRrKngNKAFO0UpZkmumyZ+YQhdMSVYh3bDG/PegA2WUijb9tv6fmeUUgMiQhgguUoYMKzMTkdELFyRrpEqCI6IcrS7UF0I+jd9rolHG+jeXvnWSVEbBAbg2K92ATTQP64mT+2D+XHLCBRiv6Q2Cy21ECnLlQVnOMePc3hbeV+U1wtulkG3u+LpDJayuUIiWudpevKNY7vcDNq8ax73OD0SoOu6/vg+ZDoRRcoekQfN39ztI6ViNrBiLoRhlMRYCqEM27wUHyHI3v19MlDJjJwWf2ZzCDwQFzeOm+OErv4CnhkLRmVJrDhlrjTqYq9rON6cUvVHxnQauscUUOIYDwaOH6dqdnFx5kF0PaLA0GxTxzEBsPiFjqfL+TQ5oREApkdK4d8xP+WEOEkNA+jiBKL3/R69pK/Zc0O7bXb9RGtkLbL9N5Z23H+beIou/n26j8u/W8FKWIYNbrcAeLFaResvjFcVJcvl507GSwpoQdFUowgwU73eOOapRozt+4IiDGoQwh8CohjyK15+TrdZ4ZEhtuQZoHIq6vMb7K9DAh0JfVu09yt2o6f1daAgIk8GastIADayAfHxvQ7yal24jhQJMaBdQYl/INrJY/t0nL7mAewjRtZfXchM6zn5QzVoQQpcJUHXwGqwVcd/11NjiFaiFGBDxfRYhJiAtQ68HsxrowkjkxR/XlamhiYosbIs7Q8+iyF25+llWek72toFV3ubBKvYosfY200UqQ1B4u07jQFz1HnwCRdHy3SpsTAK+SfLP0gcp66EvEp2vrCdZ4t3kbv5U/S5ZFG78ZEt69I205RMBrGx/UHT3rFZOmt6EDkOdou6BSp3udJSQx42ofqb4yco50D5ymeiIvIFO2ZpE+CC9D2Pl7Jtv8StlzE8xwlFtCL1Iz55kQiHqk/PEVHoOwpao3K89dEz9NtrOBR0MOJ+Mu0OPqC9wmqiXo2TpJXvFJ5ROqSIxZKIiJARL8AEy0Qd+H3blpYgqk9bOk2ohIs5cFns0vVkkehzeW1heQDpVAXaBRqCpfgD2bvchkEsysOe8uVJephutmhb8DXRVpdgm8WYCYOj9wNBSJwuB8b92J2DMKOw1sfg9jHMDsJvrcAjHewpwS+GtJpxPUqrzN0vtr+CnnP1I+do+zu85RLdHujU2TVLaEvBbp9YS+77O7EFv9jVB8L+zyN/iL92CTcTZ9o9C94nP3+ZizsLdLJIv0U9j+E/VP0sGeLr9EXe+FJ6og1+jbVUem+c/RIohubH4XBa8PeJeuL9KmDEI+pTx886QMivt7Och5P7C7Sk6egUjRRpKeAtqfjCnslcaTb64kMeaNDvvYhf2yo/tfDXsdFzyTgoN+8ILW4AAs00mUwOQHBzXJsw+/maYd9nIK+92mZQncolFOoUKIVJPMdSBIKPVBi88LijhOn+eCuixQoQbq/YrGgoBYQOjMmXQe7ixD4EPt0EXkrNkg3d1afKP24CJr74MdHcPxr+K7hR5AbtvslTIi2RCSQYxieZfyu9Vy7Kgorr2LIR6KrNgLx5+i50+TzPHNyAWz6LXA+9Qx2Cnn3heR5j+oVmhIrLkJkDXexLhyedjPJk+fp+URiFyz6QpF+h2P0FY7Rk/j4fYHwej2xmw8DSmJF+sNz9GcyyP78FC1m+//lwcnS1ybpcHvsPL3BnG8mGERT9M2wb4r+rkh/3+2t886C1qdpcRla350sfSeWcPH0Nv5Plu4fiOCkty+0F+l7Z/jnArJZEFfplUZbKsflpMqxiVrk2Epb5Hg1XSfHHbRTjnHaI8dBOiLHI3QUBifSEBY8jpEpxwI9LEf+7ZWg+ZQcHQilGQeLODS/LN36PPt0k5MDnp/GkG96WaHXOYrB1MTgmZ59Q6FxQIjoXVpRwq28UgDmpYx3yb+9DI4g5KUAjocx1tE/l71Gd2ID5/Nbou3n6AdnErsjibMU5jCMHq3/tyn6IcIHAVb/H/hpd78v4gdxVqT3XdbYUTTWzCs800sXcBgBEn7kDgc7yDE3KqDqhFf4nOO9j0pHkLjYHknIrDsQLYoa53hkgaIIQmCDCDliJVKeOuie2o5TF+HUc2JpUSwvK7RyN3sbRUbUMJoaRLjbK7p9otsv+VYnuhVGVneAoQWQfpNRJVoSgBkwxP8T7cCVaCuK9gbRcbQorjorthbFNfL3+pdEzynaGfa9KHqKYnvi2jp69QlOZl3n6Z0Ea7XqKKMVpripQfRD7bDiKDcldl4YCAO2k/R9dyyGfYmi2NPtr2sFoHcVxeAWb01XTU1XbdjfLpHtQ4JMnRO3FsXh07R3We2ymkbfg0e6arQufGr4WCqOZGoe/QyFltU2eh989DQtjy3jSb2r5qzQMLWstihGw4F2TyNi5bssoau2q2ay9ATr2yAMVisaDoT9sbPijgaRhg3LoYO6F4iyvSPwiXnwDKr15oHyNeGcBnFn+X4NwsJnTJoI9y447opMiRMXKiW/TAFO1yfDPv6CQm9HLtAaRIMpJkVcjp8FUPJ0r6R5ZPpeup++B5rHb4M+SZ+TNI9Mf56KkuaR6ZfoVUnzyPRX8Ms0j0z/EE9gpnlk+j2xQNI8ghYe4WdajkwvEkslzSPTK8UaSfPIdJfYJmkemR4U+yXNI9O3ihFJ88j0neIeSfPI9NPiG/KeMjcIg5aUoDpaMaGIJU4ZGFfEGo5qJIBm2aRhhUN9nMqxXsJX5YK7ASLicklmjGa5rIj1VRJXUK2zysUIbfXMdq+X17tnrYuq9YYSNcx1stMuVBw7rS5WVtMCd0X2O4q73Ulo7n08aDsqpyHXvQ7abIyz1yBpPZfdB6pkEavnl7NUPr1GnuB2P/VIf7cgV90K8z9CHpQxLzdR7A7y/A9QSwcISYGT5xIRAADTIAAAUEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAAfAAkAb3JnL2dyYWRsZS93cmFwcGVyL0xvZ2dlci5jbGFzc1VUBQABAAAAAIWTa08TQRSG36HAQimUUkAQUFwV28Ky3DQNNSaGxISkXmINRr5Nd4ftwt7YC8YY+SH8CjWKiR/8Af4i9YPxDC1CsJWd7Gb2nfO850zOzPffX78BWMMSw9Hh4fPyW7XOjT3hmeq6auyoC6rhu4Ht8Nj2Pc31TUF6KBzBI0GLDR5pRkMYe1HiRur6DncisaAGlubyQLOlh2mura7cXaXYsHzK7ySOQ0LU4Noy/QrPsj0hQtuzSD0QYUS5SC8vri6WNVMcqO/6wBjSNT8JDfHIdgTDpB9auhVy0xH665AHgQj1qm9ZIlTQzTC8yw+47nDP0p/Wd4URK+hlGD1THxLhmbzuCAV9DD37iS1iBrbN0Hvf9uz4AUN3Ybu4xZAqFLcyyGAoDQXZDNIY6EcPcrTi+BbDWKF65luL5T4qkjtXQ+1NFAtXwRgxfkJ5xpqI7evPKD4mSnC3ksEVTPRjHJMM+TYBCqYYlEAKjpfBDEbTmMY1KpmfbIdh6XwtGw0e1sR+IjxDVIrVdpuvMOiXIf8UOQtV5r3JsNKR3dzsmHD5cqhNyjmZ8g41vrDR0Xni71obg5I0mKeubtApZBisxXTQH/PghYQZslU6hE8Sty7CEwU56rEChn56c7LpdE96aJ7BIH01+htHFw0gXXr1BcNTnzHyAfLJIY/RVsxcKyZb+oSRI6Q/4ur8Ma7LQIbFpuVPDBEzixstZq3F5JrMQJO59bL0nsSuU+oXstBp2kuUlKXD7ZbDPXTTAPJNh0HpMD1zjMIFjx9EnXmkTjyKnauYOsbCf6ugC0Qucjn1B1BLBwgnrgKJWwIAAFoEAABQSwMEFAAICAgAAAAhAAAAAAAAAAAAAAAAACYACQBvcmcvZ3JhZGxlL3dyYXBwZXIvUGF0aEFzc2VtYmxlci5jbGFzc1VUBQABAAAAAFWPz0rDQBDGZ03/GavYJ1D21ErToK0QqggieBIUhd63m2my7WYTdtN4EPsgvoUnwYMP4EOJE9GDszAf32+/mWU/v94/AGACewxeNpv76InPhVyhifmUywUfcplnhdKiVLkJsjxG4hY1Cod0mQoXyBTlyq0zx6cLoR0OeZEEmSgCVe+I48n45HRMWRv9zS/WWhNwqQiOyaJJlEG0yiREK7SO3iIejcajKIix4s8dYAz8h3xtJV4rjQwOc5uEiRWxxvDRiqJAG96JMr10DrO5RtuGBoP9pahEqIVJwtv5EmXZhhaD1rkyqrxgcNC/+QmoPKy3nv13gxkDrz+YdaEDvg9t2GHQuKIvQA+aZOtidDqwTX2XXI/UI20evUH39TdQgy3wvgFQSwcI7t7O9SQBAABqAQAAUEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAAuAAkAb3JnL2dyYWRsZS93cmFwcGVyL1Byb3BlcnRpZXNGaWxlSGFuZGxlci5jbGFzc1VUBQABAAAAAI1UW1cbVRT+DlAmTkJLKZRSxaZBMYSE2EI1Qi+2SAUboBIspl5wMjlJBiYz48wZKEvtqg/+iPZBH/vap6Qta9kH33z3N/gbfDHuM1wSLi7NWpOZsy/fvpxv79//fvkrgAlsMDx5+HAp812soOnr3CrGJmN6KZaM6XbVMUxNGLaVqtpFTnKXm1zzOCkrmpfSK1xf9/yqF5ssaabHkzGnnKpqTsqQGMXixPjlK+Nk62b2/Eu+aZLAq2ipS3TkVtmwOHcNq0zSDe56FIvkmbHxsUyqyDdiP4TAGNSc7bs6v22YnCFuu+V02dWKJk9vuprjcDd917XpJQzuSZtZzSKlq6CDoXtN29DSpmaV04uFNa4LBZ0MZ8pc5LY8watNT4YL8WxgbdhpCTM1snP0hWGm5zVniiHSqlegMnQa3k5a7fGR+xFE0KUijJMMfU3fads0KTLV5inoZgjxqiO2CJHhdPxwkAh6cEbFafQy9DZVzTwVnKWwVw3LENeDsPciOIcBFf04z9DfmuGc5fgiJ1yuVRW8IaMdKjBwfVPFIC4wdJi2VmQ41zRq8Q9sLyImwwwxnNBN2+MRvC0DD2KYsJu5zmpehUpREFcxIpPqXOdbOS4Ol0siKncUSQmaYug6oFKQplYZgruasF2Gswd853blBHAJl8N4F+MMPUf1Cq4wKMTWBf5ARPA+usJ4Dxmq1iIBtXgPtYUihDmJKWl3lTIQNnWAGHrYdkdKttdxQ4WCDxnC3j6nxkK4dYB9O+YKPiI6e0JzhbdiiArxJH4UUzLpNj5WMYNZhtc8v+DtptAXnzs2h09wR1pnqdcmTZUEJmbMRbCARam4S+eyvIHh+NFyj+3AEnLyWpbJkUjAkDnG8X9C3cOKJMLnDKd8izaBUTK0gsmDAYjGD/H/6DzcxxdyHr6ksd0n5uLMA507cqQUfL2nCKIuV1x7U8Ir+IbhfFOx5FvCqPIWx8LeuLT08pZvmEW5O2gShmZc13ajmxVuReVskDrq7M9htEQjdC2E0r/cYTBbFRUcBt2K3FMWYab+o/8HsqDi12FKiKr8I4YljomUPab43fCOCh3fEtmnaf/SgOUErXjq6rK0oevI0vpd8KsF7gYS2pcniMnyR7RDiB4Gjw5j6CQN8EuihlNPoDxH37Nt9Ofz2Tpe38Zgfn40mU/UEa3hrRre2cZI/k4dZDz2AhMM88kX+IDhMSbp4xpDfqGGmz3TNcw9bvyZou/ucA3z+cmOGj79ufFHYqBjlKSfkaKG/MrTxm+J5/jqWfYpQklCf7UNPb8Nnk+s9pTrWKvBqsEercN9RUn2Emm/xyoGEA3eUQzhEaU+hOHg/Ag/Be82CJLeRGe4QSuoXcGIgn6FZh5/4UYDHWAKLXL6W22gXerD1JlBKdCkto0EpCMIn56TZELGFKINP9I3DQ1J29D+D1BLBwh0WCm6MgQAAGYHAABQSwMEFAAICAgAAAAhAAAAAAAAAAAAAAAAAC0ACQBvcmcvZ3JhZGxlL3dyYXBwZXIvV3JhcHBlckNvbmZpZ3VyYXRpb24uY2xhc3NVVAUAAQAAAAB9k21PE0EQx2eh0FKP0isgSFXkEPsApUILVkCUJ5UExbSCgZCQpbdtD653zd21JBr5IH4GX2hiY+ILP4Afyjjbu9NSDtvkZnbn/5vdndn99fvHTwDIwgaBTxcX+dwH6YQWz5gmS0tSsSTNSEW9WlNUaim6lqrqMsN5g6mMmgyDFWqmihVWPDPrVVNaKlHVZDNSrZyq0lpK4TlkOZuZX8ig1si5fKmuqjhhVmhqDodMKysaY4ailXG2wQwT18L53GxmNpeSWUP6GABCIFjQ60aRPVdURiCmG+V02aCyytLnBq3VmJF+Z9sNXSsp5brR2rMffATCp7RB0yrVyundk1NWtPzQS0CQFdMylJM61xEI7bRUGrPSe/ntZaTa4+t4YAKRnX+ZChbfcafuDbUqBIbbpwoVOr+wWKhXCfjfKzU7E/dsbQhXPNeNs7dKlel1iwDZJjDSoKoiU4tttiXaM1SMHhLoXVE0xVol0B1P7AswBMNB8MNN3MqL/NrmztbxXmErf/xy99VWAEYFCMKNPuiBMQL9bqn4/swA3BZAsIN3BQjZ3j0BBmxPEiAMIvfuCxCBQe49IDBgMmvzUunE+OXa8U0FoI/rkwQGy5f1dgGG4gmvYg6aXuLh+FVtYv9qaruinTns2dEO7d+2CNBvnzeDIvMaEV4/5A/d9gXN9oEdsZdxIvZAxMjrjvZiz7DBonk14otv80ONIbR/XfuRxgswZv5H4osf8jS+DXxtIOK5/PjC8QXxlqBH+H1oWcGx/Y4NOXbAsdj8lsXWow2jhzcNv+s4ymBWgjaWPDg4OvoOI5FbTYhG7jRhnHsT3JsUY+EmTPmaEPsK/CdCHBJOggh04R+gNzndhGk3PgMpJy6i5Qv0JL9B9IsTnoW0Fx518Yee+LiLz3nj4y4+74lnXXzBG8+6+KInPuHij7zxCRfPeeKTLv7YG5908SVY9sCnPjvhFXhyBY9id1x8FZ564DEXfwZrXrjTWLyX+O2C7j9QSwcIs5XTHu4CAABQBgAAUEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAAoAAkAb3JnL2dyYWRsZS93cmFwcGVyL1dyYXBwZXJFeGVjdXRvci5jbGFzc1VUBQABAAAAAI1W+3cTRRT+pkm7IUQgoZW3xijSpkmDvKw8VFpAK20pBNAUFbfJJF262Y27m5aHgIoPUHw/QcW3+EAFlW0VFc/xHH7wP/IX8c5u0iRt6vGcnMzemfvdx3dn7sxf//zyO4A1+IPh7LFjuzqPRIbk9AjXMpH1kXQ2Eouk9XxBUWVL0bV4Xs9wmje4ymWT0+KwbMbTwzw9YhbzZmR9VlZNHosUcvG8XIgrwkYms2b1qrWrSdfoLOOzRVWlCXNYjt9BItdyisa5oWg5mh3lhkm+aL6zY3VHZzzDRyNHfWAM/qReNNJ8m6Jyhohu5BI5Q86oPDFmyIUCNxIPuuPWgzxdtHRDgpdh3gF5VE6ospZL7Bg6wNOWhCYyVTB00rQUbjLc2OvoFC1FTQxMzm9gmFPRcp3OcTUVPSFk0mhK61pWyTG09c4cT7ejUzQcDgVoo6Ip1t0MK1pr7dWPo20vg6e1bW8AczDPDwlBQv5PbxLm+9GMYAAB3DALjbgxAB9mia+FAfgxW3wtZghUxyFhKQXJDyqmZTquBwO4CTf7sQxh4kDV5UwlvAAimOsnK7cy3GBwObOFYIa+x1AZmlvbeiv0Jy1R4Q0BLMftArCCADluDcgG1yyX33llQJmRANoQFY7bGTqrcnY4UjSLG5qsljN3PCtDRZE4+SciaC+RioQ4FTntilOUGFbWLUJ1xKWYNG4l9uzqoZgSWOlHB+5gmGvyGosMwdZabVG31VgjqrCWEsxUKXfRGfLhTob5uVorYiGAuwRNzVjPMFvQ5DJ+iHhonR7ijEHXMr8RmwTztPXmm9NdMrTUMS0SuBebRShdUxIYkK1hH7ZMT0AsBLDNTeC+6d7c9R7X6gPkt9pqclhetXZdspj3oZdh4RTTk6sB9Lv2dzDc9b8oGZyBk52Ck13kypzR1W431D10Ug4rhSQ1F+5W70HqJRThoFJwi5ZyYxqkabNq+mEX/0gV3iVv/yTe5UR28UOTeHc64+KpREHS7ufWmG6M7FbyXC9azhHtCSCHYaGjMHhbe8TERoyIzGiPB83pIKFEpdWgC1SBYTFZ3iurSka2+JRTEoAhzn8zTIEbFA1hI4rC+CjhzBlxrjZ5OYhDAn6YtkKlBFsPpnnB7VJPkJnKwq6iZlGYVevHGGLdelHNhDXdCosOFC61vXClR4ezhp4Pr1hurujw4cma1u9WW8LT1NiyupGXrfqbZl/v1Oui/kF6Bs/6cQLPMUT/e+vtHjb0MXmI+orbwE/6cRynGBZU95werVC0CMvlvIQXKz2k3JJc6Et+nMbL1FXr3RISXiWyBTG0jyvwKsuOldfxhh+v4c1yHWpVJLzN0JhWdbFl3xWXzTs4U1OyyXQkvEfdL1Nbbh8+YLi9Xg+pf/A+FLF8xLC5Xw+PymqRh8cUazg8wg85VQybBZ5WsgrPhBWtbr2JnHK9PxEUbRbsfkZ3lFaz2X34gkFyPOzIii7XUzegL/GVKOrXVIDKag9dMjlxh1xg8BVkw6RqWTN0Sjpz3+F7P77FRarwaP0z4cMPAl6/GX2Jn0QIl2tC6NJ1em/RKRin9uGEUJqZIQw6nT/jFz8mcIX2RDe9ueimTVr0rOuTC7tF9ah0vfTk6i/mh7jhzCBIh1mil6CHvuiFQF9B8T5wRno70CiBiMVc+v8NYBEshpdm/2yPtkdj0dQ4QlfQnEr1j6PlMhZcxqLLWGLjljP4NB6Np6b/CBebwG02WvtsxOhzlY11oU4SNsT227jHRndoK0n3l6TtoT6SBmL7PTaSNvaGHiJxX2nx0dBjJKVLUtbGARt5G4/bsGyM2ThyHkv7ruB4yvsbpFS/pz0Zeio+gedj43jh6iVKLYIufIWj6MYOZxzAI874KEacUcVhZzyCk854iv7FyCCezy1ouE5ig4RGiR4rTMLRv7GQWIyU+SLDXuIWWHgFp1N97bHoOF6J2XjLxtlLNJ69SnqzSXs+6bhGg2DXSfQI5k8Lm+/TFL2dSgb3oQkNNK6L/oRFoXM2Pr6GQDR0jnmJn4siV1pYsr1RJJzq9YTOJb3RZOjTdsp6HJ9fJWSD48YD1gIh+mmCfIpkaKSnQslRuBS5jwrm2HYiFIgmGt0dQ1dNSbuDtEVYoeiS0PntE/gmul+AJnDpwiROeJrt7CbXU7EO9kfC2mXsr1OxjYRtcrA7S9gCyY00bhJ0tBMbqfXea2ha5L0Yu4bG2MVlZ9HIptLSRxvBYSU2lZUWeILXyaDXKekJkejfJJazXkaRMoeVBnj+BVBLBwgGr1GbogYAAEQNAABQSwECFAAUAAgICAAAACEAsLejHukNAAC+JwAAEAAJAAAAAAAAAAAAAAAAAAAATUVUQS1JTkYvTElDRU5TRVVUBQABAAAAAFBLAQIUABQACAgIAAAAIQBqz8talQAAALkAAAAUAAkAAAAAAAAAAAAAADAOAABNRVRBLUlORi9NQU5JRkVTVC5NRlVUBQABAAAAAFBLAQIUABQACAgIAAAAIQAT5SCoIgEAAHABAAAxAAkAAAAAAAAAAAAAABAPAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZUFyZ3VtZW50RXhjZXB0aW9uLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAP5do+aNAgAA2wMAACYACQAAAAAAAAAAAAAAmhAAAG9yZy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5lT3B0aW9uLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAAHvPihbAgAAtgQAADMACQAAAAAAAAAAAAAAhBMAAG9yZy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5lUGFyc2VyJEFmdGVyT3B0aW9ucy5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQCj0ttQVAMAAJMHAAA8AAkAAAAAAAAAAAAAAEkWAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRCZWZvcmVGaXJzdFN1YkNvbW1hbmQuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEALlZDIGAHAAA6DwAAPQAJAAAAAAAAAAAAAAAQGgAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkS25vd25PcHRpb25QYXJzZXJTdGF0ZS5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQDU5SDkTAIAAJcEAAA8AAkAAAAAAAAAAAAAAOQhAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRNaXNzaW5nT3B0aW9uQXJnU3RhdGUuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEAmT0V29YCAABKBQAAPQAJAAAAAAAAAAAAAACjJAAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkT3B0aW9uQXdhcmVQYXJzZXJTdGF0ZS5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQCflW/2oQEAAH0CAAA4AAkAAAAAAAAAAAAAAO0nAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRPcHRpb25QYXJzZXJTdGF0ZS5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQBXvGfjIgIAAGYDAAAzAAkAAAAAAAAAAAAAAP0pAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRPcHRpb25TdHJpbmcuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEAYjZYZqYBAADOAgAAMgAJAAAAAAAAAAAAAACJLAAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkUGFyc2VyU3RhdGUuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEA/Y4pdXQCAADHBAAAPwAJAAAAAAAAAAAAAACYLgAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkVW5rbm93bk9wdGlvblBhcnNlclN0YXRlLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAEoBjirqBAAA0ggAACYACQAAAAAAAAAAAAAAgjEAAG9yZy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5lUGFyc2VyLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAIKL8BCEBAAAUggAACYACQAAAAAAAAAAAAAAyTYAAG9yZy9ncmFkbGUvY2xpL1BhcnNlZENvbW1hbmRMaW5lLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAO2cvGdSAQAArAEAACwACQAAAAAAAAAAAAAAqjsAAG9yZy9ncmFkbGUvY2xpL1BhcnNlZENvbW1hbmRMaW5lT3B0aW9uLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAM7QOawiBQAAVggAADMACQAAAAAAAAAAAAAAXz0AAG9yZy9ncmFkbGUvaW50ZXJuYWwvZmlsZS9QYXRoVHJhdmVyc2FsQ2hlY2tlci5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQDp+MhHngEAACYCAABBAAkAAAAAAAAAAAAAAOtCAABvcmcvZ3JhZGxlL2ludGVybmFsL2ZpbGUvbG9ja2luZy9FeGNsdXNpdmVGaWxlQWNjZXNzTWFuYWdlci5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQBE8acw2wEAAMcCAAA+AAkAAAAAAAAAAAAAAAFFAABvcmcvZ3JhZGxlL3V0aWwvaW50ZXJuYWwvV3JhcHBlckRpc3RyaWJ1dGlvblVybENvbnZlcnRlci5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQClNa2HjwEAAB4CAAAvAAkAAAAAAAAAAAAAAFFHAABvcmcvZ3JhZGxlL3dyYXBwZXIvQm9vdHN0cmFwTWFpblN0YXJ0ZXIkMS5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQBgdBonSwMAABIFAABBAAkAAAAAAAAAAAAAAEZJAABvcmcvZ3JhZGxlL3dyYXBwZXIvRG93bmxvYWQkRGVmYXVsdERvd25sb2FkUHJvZ3Jlc3NMaXN0ZW5lci5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQACc6nUBwMAAEEFAAA0AAkAAAAAAAAAAAAAAAlNAABvcmcvZ3JhZGxlL3dyYXBwZXIvRG93bmxvYWQkUHJveHlBdXRoZW50aWNhdG9yLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhABQxDlHZCQAA5hIAACEACQAAAAAAAAAAAAAAe1AAAG9yZy9ncmFkbGUvd3JhcHBlci9Eb3dubG9hZC5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQCqi+MW2QEAALICAAAtAAkAAAAAAAAAAAAAAKxaAABvcmcvZ3JhZGxlL3dyYXBwZXIvR3JhZGxlVXNlckhvbWVMb29rdXAuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEAodQH4X8WAABdLQAAKgAJAAAAAAAAAAAAAADpXAAAb3JnL2dyYWRsZS93cmFwcGVyL0dyYWRsZVdyYXBwZXJNYWluLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAJOC8wXEDAAAshgAACIACQAAAAAAAAAAAAAAyXMAAG9yZy9ncmFkbGUvd3JhcHBlci9JbnN0YWxsJDEuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEAarrq82oBAADnAQAALQAJAAAAAAAAAAAAAADmgAAAb3JnL2dyYWRsZS93cmFwcGVyL0luc3RhbGwkSW5zdGFsbENoZWNrLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAEmBk+cSEQAA0yAAACAACQAAAAAAAAAAAAAAtIIAAG9yZy9ncmFkbGUvd3JhcHBlci9JbnN0YWxsLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhACeuAolbAgAAWgQAAB8ACQAAAAAAAAAAAAAAHZQAAG9yZy9ncmFkbGUvd3JhcHBlci9Mb2dnZXIuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEA7t7O9SQBAABqAQAAJgAJAAAAAAAAAAAAAADOlgAAb3JnL2dyYWRsZS93cmFwcGVyL1BhdGhBc3NlbWJsZXIuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEAdFgpujIEAABmBwAALgAJAAAAAAAAAAAAAABPmAAAb3JnL2dyYWRsZS93cmFwcGVyL1Byb3BlcnRpZXNGaWxlSGFuZGxlci5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQCzldMe7gIAAFAGAAAtAAkAAAAAAAAAAAAAAOacAABvcmcvZ3JhZGxlL3dyYXBwZXIvV3JhcHBlckNvbmZpZ3VyYXRpb24uY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEABq9Rm6IGAABEDQAAKAAJAAAAAAAAAAAAAAA4oAAAb3JnL2dyYWRsZS93cmFwcGVyL1dyYXBwZXJFeGVjdXRvci5jbGFzc1VUBQABAAAAAFBLBQYAAAAAIQAhABANAAA5pwAAAAA=\"","import { addTemplateFile, type Schematic } from \"@ostack.tech/kform-scaffolder\";\n\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport gradleWrapperJarUrl from \"../templates/gradle/wrapper/gradle-wrapper.jar?url\";\nimport gradleWrapperProperties from \"../templates/gradle/wrapper/gradle-wrapper.properties?raw\";\nimport gradlewBat from \"../templates/gradlew.bat?raw\";\nimport gradlew from \"../templates/gradlew?raw\";\n\nexport function scaffoldGradleWrapper(\n _schematic: Schematic,\n data: ScaffoldingData,\n) {\n // Gradle\n addTemplateFile(data, \"gradlew\", gradlew, { executable: true });\n addTemplateFile(data, \"gradlew.bat\", gradlewBat);\n addTemplateFile(\n data,\n \"gradle/wrapper/gradle-wrapper.jar\",\n fetch(gradleWrapperJarUrl).then((res) => res.arrayBuffer()),\n );\n addTemplateFile(\n data,\n \"gradle/wrapper/gradle-wrapper.properties\",\n gradleWrapperProperties,\n );\n}\n","import {\n code,\n joinPaths,\n type Schematic,\n type TsFile,\n tsFile,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\n\nexport function scaffoldMain(schematic: Schematic, data: ReactAppData) {\n const fileName = joinPaths(data.currentDir, \"main.tsx\");\n let file = data.files.get(fileName) as TsFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = tsFile()));\n }\n scaffoldMainDeclarations(schematic, {\n kmpModuleName: `${kebabCase(schematic.name!)}-shared`,\n ...data,\n currentFile: file,\n });\n}\n\nfunction scaffoldMainDeclarations(schematic: Schematic, data: ReactAppData) {\n data.currentFile.imports.push(\n { moduleName: \"./index.scss\" },\n { moduleName: \"react\", name: \"StrictMode\" },\n { moduleName: \"react-dom/client\", name: \"createRoot\" },\n {\n moduleName: data.kmpModuleName!,\n name: `decode${schematic.name}ExternalContextsFromString`,\n },\n {\n moduleName: `./${schematic.name}Context.ts`,\n name: `${schematic.name}Context`,\n },\n {\n moduleName: `./${schematic.name!}App.tsx`,\n name: `${schematic.name!}App`,\n },\n );\n\n data.currentFile.declarations.push(code`\n export function renderRoot(encodedExternalContexts: string) {\n createRoot(document.getElementById(\"${kebabCase(schematic.name!)}-app-root\")!).render(\n <StrictMode>\n <${schematic.name}Context.Provider\n value={{\n externalContexts: decode${schematic.name}ExternalContextsFromString(\n encodedExternalContexts,\n ),\n }}\n >\n <${schematic.name!}App />\n </${schematic.name}Context.Provider>\n </StrictMode>,\n );\n }\n `);\n}\n","import { addTemplateFile, type Schematic } from \"@ostack.tech/kform-scaffolder\";\n\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport editorconfig from \"../templates/_editorconfig?raw\";\nimport gitattributes from \"../templates/_gitattributes?raw\";\nimport gitignore from \"../templates/_gitignore?raw\";\n\nexport function scaffoldProjectMisc(\n _schematic: Schematic,\n data: ScaffoldingData,\n) {\n addTemplateFile(data, \".gitignore\", gitignore);\n addTemplateFile(data, \".gitattributes\", gitattributes);\n addTemplateFile(data, \".editorconfig\", editorconfig);\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\n\nimport type { KtData } from \"../kotlin/KtData.ts\";\nimport responsesKt from \"../templates/shared/src/commonMain/kotlin/Responses.kt.ejs?raw\";\n\nexport function scaffoldResponses(schematic: Schematic, data: KtData): void {\n const ejsData = {\n filePackage: data.currentPackage,\n formClass: schematic.name,\n };\n\n addEjsTemplateFile(\n data,\n `${schematic.name}Responses.kt`,\n responsesKt,\n ejsData,\n );\n}\n","import { addTemplateFile, type Schematic } from \"@ostack.tech/kform-scaffolder\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport indexScss from \"../templates/react-app/src/index.scss?raw\";\n\nexport function scaffoldStyles(_schematic: Schematic, data: ReactAppData) {\n addTemplateFile(data, \"index.scss\", indexScss);\n}\n","import {\n addEjsTemplateFile,\n addTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { capitalCase, kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport eslintConfigJs from \"../templates/react-app/eslint.config.js?raw\";\nimport indexHtmlEjs from \"../templates/react-app/index.html.ejs?raw\";\nimport packageJsonEjs from \"../templates/react-app/package.json.ejs?raw\";\nimport viteSvg from \"../templates/react-app/public/vite.svg?raw\";\nimport tsConfigAppJson from \"../templates/react-app/tsconfig.app.json?raw\";\nimport tsConfigJson from \"../templates/react-app/tsconfig.json?raw\";\nimport tsConfigNodeJson from \"../templates/react-app/tsconfig.node.json?raw\";\nimport viteConfigTsEjs from \"../templates/react-app/vite.config.ts.ejs?raw\";\nimport { DEFAULT_API_BASE_PATH } from \"./scaffoldApi.ts\";\n\nexport const DEFAULT_VITE_CONFIG_OUT_DIR = \"build/dist/\";\nexport const DEFAULT_VITE_CONFIG_PROXY_TARGET = \"http://127.0.0.1:8080/\";\n\nexport function scaffoldViteProject(schematic: Schematic, data: ReactAppData) {\n const ejsData = {\n formId: kebabCase(schematic.name!),\n formClass: schematic.name,\n formTitle: capitalCase(schematic.name!),\n ostackUiVersion: import.meta.env.VITE_OSTACK_UI_VERSION,\n kFormVersion: import.meta.env.VITE_KFORM_VERSION,\n dependencyVersions: JSON.parse(import.meta.env.VITE_DEPENDENCY_VERSIONS),\n encodedExternalContexts: JSON.stringify(\n data.serializationFormat === \"json\"\n ? \"{}\"\n : `<${schematic.name}ExternalContexts />`,\n ),\n apiBasePath: data.apiBasePath ?? DEFAULT_API_BASE_PATH,\n viteConfigOutDir: data.viteConfigOutDir ?? DEFAULT_VITE_CONFIG_OUT_DIR,\n viteConfigProxyTarget:\n data.viteConfigProxyTarget ?? DEFAULT_VITE_CONFIG_PROXY_TARGET,\n };\n\n addEjsTemplateFile(data, \"react-app/package.json\", packageJsonEjs, ejsData);\n addEjsTemplateFile(\n data,\n \"react-app/vite.config.ts\",\n viteConfigTsEjs,\n ejsData,\n );\n addTemplateFile(data, \"react-app/tsconfig.json\", tsConfigJson);\n addTemplateFile(data, \"react-app/tsconfig.app.json\", tsConfigAppJson);\n addTemplateFile(data, \"react-app/tsconfig.node.json\", tsConfigNodeJson);\n addTemplateFile(data, \"react-app/eslint.config.js\", eslintConfigJs);\n addEjsTemplateFile(data, \"react-app/index.html\", indexHtmlEjs, ejsData);\n addTemplateFile(data, \"react-app/public/vite.svg\", viteSvg);\n}\n","import {\n configScaffolder,\n scaffoldModels,\n scaffoldSchemas,\n scaffoldValidator,\n SchematicBuilder as KFormSchematicBuilder,\n type SchematicBuilderProps as KFormSchematicBuilderProps,\n} from \"@ostack.tech/kform-scaffolder\";\n\nimport { DefaultLocaleConfig } from \"./configs/DefaultLocaleConfig.tsx\";\nimport { SerializationFormatConfig } from \"./configs/SerializationFormatConfig.tsx\";\nimport { UseTableValuesSerializerConfig } from \"./configs/UseTableValuesSerializerConfig.tsx\";\nimport type { KtData } from \"./scaffolding/kotlin/KtData.ts\";\nimport type { ReactAppData } from \"./scaffolding/reactApp/ReactAppData.ts\";\nimport { scaffoldActions } from \"./scaffolding/scaffolders/scaffoldActions.ts\";\nimport { scaffoldApi } from \"./scaffolding/scaffolders/scaffoldApi.ts\";\nimport { scaffoldAppComponent } from \"./scaffolding/scaffolders/scaffoldAppComponent.ts\";\nimport { scaffoldAppContext } from \"./scaffolding/scaffolders/scaffoldAppContext.ts\";\nimport { scaffoldExternalContexts } from \"./scaffolding/scaffolders/scaffoldExternalContexts.ts\";\nimport { scaffoldGradleProject } from \"./scaffolding/scaffolders/scaffoldGradleProject.ts\";\nimport { scaffoldGradleWrapper } from \"./scaffolding/scaffolders/scaffoldGradleWrapper.ts\";\nimport { scaffoldMain } from \"./scaffolding/scaffolders/scaffoldMain.ts\";\nimport { scaffoldPageComponents } from \"./scaffolding/scaffolders/scaffoldPageComponents.ts\";\nimport { scaffoldProjectMisc } from \"./scaffolding/scaffolders/scaffoldProjectMisc.ts\";\nimport { scaffoldResponses } from \"./scaffolding/scaffolders/scaffoldResponses.ts\";\nimport { scaffoldSerializer } from \"./scaffolding/scaffolders/scaffoldSerializer.ts\";\nimport { scaffoldStyles } from \"./scaffolding/scaffolders/scaffoldStyles.ts\";\nimport { scaffoldViteProject } from \"./scaffolding/scaffolders/scaffoldViteProject.ts\";\nimport { defaultSchematicKinds, type SchematicKind } from \"./SchematicKind.ts\";\n\nexport interface SchematicBuilderProps extends KFormSchematicBuilderProps {\n schematicKinds?: SchematicKind[];\n}\n\nconst kotlinMainData: Partial<KtData> = {\n currentDir: \"shared/src/commonMain/kotlin\",\n};\nconst kotlinTestData: Partial<KtData> = {\n currentDir: \"shared/src/commonTest/kotlin\",\n};\nconst reactAppData: Partial<ReactAppData> = {\n currentDir: \"react-app/src\",\n};\n\nexport function SchematicBuilder({\n name = \"ostack-ui-kform\",\n schematicKinds = defaultSchematicKinds,\n scaffolders = [\n scaffoldProjectMisc,\n scaffoldGradleWrapper,\n scaffoldGradleProject,\n scaffoldViteProject,\n configScaffolder(scaffoldSchemas, kotlinMainData),\n configScaffolder(scaffoldModels, kotlinMainData),\n configScaffolder(scaffoldResponses, kotlinMainData),\n configScaffolder(scaffoldExternalContexts, kotlinMainData),\n configScaffolder(scaffoldSerializer, kotlinMainData),\n configScaffolder(scaffoldValidator, kotlinTestData),\n configScaffolder(scaffoldMain, reactAppData),\n configScaffolder(scaffoldStyles, reactAppData),\n configScaffolder(scaffoldAppComponent, reactAppData),\n configScaffolder(scaffoldAppContext, reactAppData),\n configScaffolder(scaffoldActions, reactAppData),\n configScaffolder(scaffoldApi, reactAppData),\n configScaffolder(scaffoldPageComponents, reactAppData),\n ],\n scaffoldingData = (schematic) => ({\n useFileBase64Serializer: true,\n ...schematic.config,\n }),\n configs = (\n <>\n <DefaultLocaleConfig />\n <SerializationFormatConfig />\n <UseTableValuesSerializerConfig />\n </>\n ),\n version = import.meta.env.VITE_OSTACK_UI_VERSION,\n ...otherProps\n}: SchematicBuilderProps) {\n return (\n <KFormSchematicBuilder\n name={name}\n schematicKinds={schematicKinds}\n scaffolders={scaffolders}\n scaffoldingData={scaffoldingData}\n configs={configs}\n version={version}\n {...otherProps}\n />\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ostack-ui-kform-scaffolder.js","names":[],"sources":["../src/configs/DefaultLocaleConfig.tsx","../src/configs/SerializationFormatConfig.tsx","../src/configs/UseTableValuesSerializerConfig.tsx","../src/scaffolding/scaffolders/scaffoldActions.ts","../src/scaffolding/scaffolders/scaffoldApi.ts","../src/scaffolding/scaffolders/scaffoldIssueMessages.ts","../src/scaffolding/scaffolders/scaffoldPageComponents.ts","../src/scaffolding/scaffolders/scaffoldSerializer.ts","../src/util/arrayify.ts","../src/SchematicKind.ts","../src/scaffolding/reactApp/util/reactAppLayout.ts","../src/scaffolding/scaffolders/scaffoldAppComponent.ts","../src/scaffolding/scaffolders/scaffoldAppContext.ts","../src/scaffolding/scaffolders/scaffoldExternalContexts.ts","../src/scaffolding/scaffolders/scaffoldGradleProject.ts","../src/scaffolding/templates/gradle/wrapper/gradle-wrapper.jar?url","../src/scaffolding/scaffolders/scaffoldGradleWrapper.ts","../src/scaffolding/scaffolders/scaffoldMain.ts","../src/scaffolding/scaffolders/scaffoldProjectMisc.ts","../src/scaffolding/scaffolders/scaffoldResponses.ts","../src/scaffolding/scaffolders/scaffoldStyles.ts","../src/scaffolding/scaffolders/scaffoldViteProject.ts","../src/SchematicBuilder.tsx"],"sourcesContent":["import { useConfig } from \"@ostack.tech/kform-scaffolder\";\n\nexport interface DefaultLocaleConfigProps {\n defaultValue?: string;\n disabled?: boolean;\n}\n\nexport const DEFAULT_LOCALE = \"en-US\";\n// eslint-disable-next-line react-refresh/only-export-components\nexport const LOCALES: string[] = JSON.parse(import.meta.env.VITE_LOCALES);\n\nexport function DefaultLocaleConfig({\n defaultValue = DEFAULT_LOCALE,\n disabled,\n}: DefaultLocaleConfigProps) {\n const [config, setConfig] = useConfig(\"defaultLocale\", defaultValue);\n return (\n <div className=\"builder-config-field\">\n <label>Default locale</label>\n <select\n value={config}\n onChange={(evt) => {\n setConfig(evt.target.value);\n }}\n disabled={disabled}\n >\n {LOCALES.map((locale) => (\n <option key={locale} value={locale}>\n {locale}\n </option>\n ))}\n </select>\n </div>\n );\n}\n","import { useConfig } from \"@ostack.tech/kform-scaffolder\";\nimport { useRef } from \"react\";\n\nexport type SerializationFormat = \"json\" | \"xml\";\n\nexport interface SerializationFormatConfigProps {\n defaultValue?: SerializationFormat;\n disabled?: boolean;\n}\n\nexport const DEFAULT_SERIALIZATION_FORMAT = \"json\";\n\nexport function SerializationFormatConfig({\n defaultValue = DEFAULT_SERIALIZATION_FORMAT,\n disabled,\n}: SerializationFormatConfigProps) {\n const [useTableValuesSerializerConfig, setUseTableValuesSerializerConfig] =\n useConfig(\"useTableValuesSerializer\", false);\n const lastUseTableValuesSerializerConfig = useRef(\n useTableValuesSerializerConfig,\n );\n const [config, setConfig] = useConfig(\"serializationFormat\", defaultValue);\n return (\n <div className=\"builder-config-field\">\n <label>Serialization format</label>\n <select\n value={config}\n onChange={(evt) => {\n setConfig(evt.target.value as SerializationFormat);\n if (evt.target.value === \"xml\") {\n lastUseTableValuesSerializerConfig.current =\n useTableValuesSerializerConfig;\n setUseTableValuesSerializerConfig(true);\n } else {\n setUseTableValuesSerializerConfig(\n lastUseTableValuesSerializerConfig.current,\n );\n }\n }}\n disabled={disabled}\n >\n <option value=\"json\">JSON</option>\n <option value=\"xml\">XML</option>\n </select>\n </div>\n );\n}\n","import {\n useConfig,\n UseTableValuesSerializerConfig as KFormUseTableValuesSerializerConfig,\n} from \"@ostack.tech/kform-scaffolder\";\n\nimport { DEFAULT_SERIALIZATION_FORMAT } from \"./SerializationFormatConfig.tsx\";\n\nexport interface UseTableValuesSerializerConfigProps {\n disabled?: boolean;\n}\n\nexport function UseTableValuesSerializerConfig({\n disabled,\n}: UseTableValuesSerializerConfigProps) {\n const [serializationFormatConfig] = useConfig(\n \"serializationFormat\",\n DEFAULT_SERIALIZATION_FORMAT,\n );\n return (\n <KFormUseTableValuesSerializerConfig\n disabled={disabled || serializationFormatConfig === \"xml\"}\n />\n );\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { camelCase, kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport loadTsxEjs from \"../templates/react-app/src/actions/Load.tsx.ejs?raw\";\nimport saveTsxEjs from \"../templates/react-app/src/actions/Save.tsx.ejs?raw\";\nimport submitTsxEjs from \"../templates/react-app/src/actions/Submit.tsx.ejs?raw\";\nimport validateTsxEjs from \"../templates/react-app/src/actions/Validate.tsx.ejs?raw\";\n\nexport function scaffoldActions(schematic: Schematic, data: ReactAppData) {\n const ejsData = {\n kmpModuleName: data.kmpModuleName ?? `${kebabCase(schematic.name!)}-shared`,\n serializationFormat: data.serializationFormat ?? \"json\",\n serializationMimeType: `application/${data.serializationFormat}`,\n formVar: camelCase(schematic.name!),\n formClass: schematic.name,\n useTableValuesSerializer: data.useTableValuesSerializer,\n };\n\n addEjsTemplateFile(data, \"actions/Load.tsx\", loadTsxEjs, ejsData);\n addEjsTemplateFile(data, \"actions/Save.tsx\", saveTsxEjs, ejsData);\n addEjsTemplateFile(data, \"actions/Submit.tsx\", submitTsxEjs, ejsData);\n addEjsTemplateFile(data, \"actions/Validate.tsx\", validateTsxEjs, ejsData);\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { camelCase, kebabCase } from \"change-case\";\n\nimport { DEFAULT_SERIALIZATION_FORMAT } from \"../../configs/SerializationFormatConfig.tsx\";\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport apiFetchTsEjs from \"../templates/react-app/src/api/apiFetch.ts.ejs?raw\";\nimport reportErrorTsEjs from \"../templates/react-app/src/api/reportError.ts.ejs?raw\";\nimport submitTsEjs from \"../templates/react-app/src/api/submit.ts.ejs?raw\";\n\nexport const DEFAULT_API_BASE_PATH = \"/api/\";\nexport const DEFAULT_REPORT_ERROR_API_ENDPOINT = \"report-error\";\nexport const DEFAULT_SUBMIT_API_ENDPOINT = \"submit\";\n\nexport function scaffoldApi(schematic: Schematic, data: ReactAppData) {\n const ejsData = {\n kmpModuleName: data.kmpModuleName ?? `${kebabCase(schematic.name!)}-shared`,\n serializationFormat:\n data.serializationFormat ?? DEFAULT_SERIALIZATION_FORMAT,\n serializationMimeType: `application/${data.serializationFormat}`,\n formVar: camelCase(schematic.name!),\n formClass: schematic.name,\n apiBasePath: data.apiBasePath ?? DEFAULT_API_BASE_PATH,\n reportErrorApiEndpoint:\n data.reportErrorApiEndpoint ?? DEFAULT_REPORT_ERROR_API_ENDPOINT,\n submitApiEndpoint: data.submitApiEndpoint ?? DEFAULT_SUBMIT_API_ENDPOINT,\n };\n\n addEjsTemplateFile(data, \"api/apiFetch.ts\", apiFetchTsEjs, ejsData);\n addEjsTemplateFile(data, \"api/reportError.ts\", reportErrorTsEjs, ejsData);\n addEjsTemplateFile(data, \"api/submit.ts\", submitTsEjs, ejsData);\n}\n","import {\n code,\n joinPaths,\n type Schematic,\n type TsFile,\n tsFile,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { constantCase, kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\n\nconst DEFAULT_SCAFFOLD_ISSUE_MESSAGES = true;\n\nexport function scaffoldIssueMessages(\n schematic: Schematic,\n data: ReactAppData,\n) {\n if (!shouldScaffoldIssueMessages(data)) {\n return;\n }\n\n const fileName = joinPaths(\n data.currentDir,\n `${schematic.name}IssueMessages.tsx`,\n );\n let file = data.files.get(fileName) as TsFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = tsFile()));\n }\n scaffoldIssueMessagesConstant(schematic, {\n kmpModuleName: `${kebabCase(data.rootSchematic.name!)}-shared`,\n ...data,\n currentFile: file,\n });\n}\n\nexport function shouldScaffoldIssueMessages(data: ReactAppData) {\n return data.scaffoldIssueMessages ?? DEFAULT_SCAFFOLD_ISSUE_MESSAGES;\n}\n\nfunction scaffoldIssueMessagesConstant(\n schematic: Schematic,\n data: ReactAppData,\n) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"IssueMessagesByCode\",\n isType: true,\n });\n data.currentFile.declarations.push(code`\n export const ${constantCase(schematic.name!)}_ISSUE_MESSAGES: Record<string, IssueMessagesByCode> = {};\n `);\n}\n","import {\n code,\n joinPaths,\n type Schematic,\n type TsFile,\n tsFile,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { kebabCase, sentenceCase } from \"change-case\";\n\nimport type { SchematicKind } from \"../../SchematicKind.ts\";\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport { reactAppLayout } from \"../reactApp/util/reactAppLayout.ts\";\nimport { scaffoldIssueMessages } from \"./scaffoldIssueMessages.ts\";\n\nexport function scaffoldPageComponents(\n schematic: Schematic,\n data: ReactAppData,\n) {\n const layout = reactAppLayout(schematic, {\n kmpModuleName: `${kebabCase(schematic.name!)}-shared`,\n ...data,\n });\n for (const annex of layout) {\n for (const formPage of annex.formPages) {\n scaffoldPageComponent(formPage.schematic, formPage.data);\n if (formPage.data.currentPath !== \"/\") {\n scaffoldIssueMessages(formPage.schematic, formPage.data);\n }\n }\n }\n}\n\nfunction scaffoldPageComponent(schematic: Schematic, data: ReactAppData) {\n const fileName = joinPaths(data.currentDir, `${schematic.name}.tsx`);\n let file = data.files.get(fileName) as TsFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = tsFile()));\n }\n scaffoldPageComponentDeclarations(schematic, {\n kmpModuleName: `${kebabCase(data.rootSchematic.name!)}-shared`,\n ...data,\n currentFile: file,\n });\n}\n\nfunction scaffoldPageComponentDeclarations(\n schematic: Schematic,\n data: ReactAppData,\n) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Grid\",\n });\n\n data.currentFile.declarations.push(code`\n export function ${schematic.name}() {\n return (\n <Grid container>\n ${schematic\n .children!.map(\n (child) =>\n code`\n <Grid xs={12}>\n ${scaffoldField(child, {\n ...data,\n currentPath: child.childName,\n })}\n </Grid>\n `,\n )\n .join(\"\\n\\n\")}\n </Grid>\n );\n }\n `);\n}\n\nexport function scaffoldField(schematic: Schematic, data: ReactAppData) {\n const schematicKind = data.schematicKinds.get(\n schematic.kind,\n ) as SchematicKind;\n if (!schematicKind) {\n throw new Error(`Unknown schematic kind ${schematic.kind}`);\n }\n\n if (schematicKind.scaffoldField) {\n return schematicKind.scaffoldField?.(schematic, data);\n }\n\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"ControlField\",\n });\n\n let controlModuleName: string | undefined;\n let controlName: string | undefined;\n if (schematicKind.control) {\n const controlSeparator = schematicKind.control.lastIndexOf(\".\");\n controlModuleName = schematicKind.control.slice(0, controlSeparator);\n controlName = schematicKind.control.slice(controlSeparator + 1);\n data.currentFile.imports.push({\n moduleName: controlModuleName,\n name: controlName,\n });\n }\n\n let control = schematicKind.scaffoldControl?.(schematic, data);\n if (!control) {\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n control = [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n `<${controlName!} />`,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n }\n\n return code`\n <ControlField path=\"${data.currentPath}\">\n ${control}\n </ControlField>\n `;\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { camelCase, constantCase } from \"change-case\";\n\nimport type { KtData } from \"../kotlin/KtData.ts\";\nimport jsonSerializerKt from \"../templates/shared/src/commonMain/kotlin/JsonSerializer.kt.ejs?raw\";\nimport xmlSerializerKt from \"../templates/shared/src/commonMain/kotlin/XmlSerializer.kt.ejs?raw\";\n\nexport const DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION = true;\n\nexport function scaffoldSerializer(schematic: Schematic, data: KtData): void {\n const ejsData = {\n filePackage: data.currentPackage,\n formVar: camelCase(schematic.name!),\n formClass: schematic.name,\n formConstant: constantCase(schematic.name!),\n includeSerializationFormatVersion:\n data.includeSerializationFormatVersion ??\n DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION,\n };\n\n addEjsTemplateFile(\n data,\n `${schematic.name}Serializer.kt`,\n data.serializationFormat === \"xml\" ? xmlSerializerKt : jsonSerializerKt,\n ejsData,\n );\n}\n","export function arrayify<T>(value: T | T[] | null | undefined): T[] {\n return value == null ? [] : Array.isArray(value) ? value : [value];\n}\n","import {\n annotate,\n anySchematicKind as kFormAnySchematicKind,\n bigDecimalSchematicKind as kFormBigDecimalSchematicKind,\n bigIntegerSchematicKind as kFormBigIntegerSchematicKind,\n booleanSchematicKind as kFormBooleanSchematicKind,\n byteSchematicKind as kFormByteSchematicKind,\n classSchematicKind as kFormClassSchematicKind,\n code,\n createSchematic,\n doubleSchematicKind as kFormDoubleSchematicKind,\n enumSchematicKind as kFormEnumSchematicKind,\n fileSchematicKind as kFormFileSchematicKind,\n floatSchematicKind as kFormFloatSchematicKind,\n intSchematicKind as kFormIntSchematicKind,\n joinPaths,\n ListableBuilderWithoutKindSelect,\n listSchematicKind as kFormListSchematicKind,\n localDateSchematicKind as kFormLocalDateSchematicKind,\n longSchematicKind as kFormLongSchematicKind,\n type Schematic,\n type SchematicKind as KFormSchematicKind,\n shortSchematicKind as kFormShortSchematicKind,\n stringSchematicKind as kFormStringSchematicKind,\n tableSchematicKind as kFormTableSchematicKind,\n} from \"@ostack.tech/kform-scaffolder\";\nimport {\n camelCase,\n capitalCase,\n constantCase,\n pascalCase,\n sentenceCase,\n} from \"change-case\";\n\nimport type { KtData } from \"./scaffolding/kotlin/KtData.ts\";\nimport type { ReactAppData } from \"./scaffolding/reactApp/ReactAppData.ts\";\nimport { scaffoldField } from \"./scaffolding/scaffolders/scaffoldPageComponents.ts\";\nimport { DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION } from \"./scaffolding/scaffolders/scaffoldSerializer.ts\";\nimport { arrayify } from \"./util/arrayify.ts\";\n\nexport interface SchematicKind extends KFormSchematicKind {\n // Override KForm data types with this package's\n defaultValue: string | ((schematic: Schematic, data: KtData) => string);\n propertyAnnotations?:\n | string\n | string[]\n | ((schematic: Schematic, data: KtData) => string | string[] | undefined);\n scaffoldModel?: (schematic: Schematic, data: KtData) => string;\n scaffoldType?: (schematic: Schematic, data: KtData) => string;\n scaffoldSchema?: (schematic: Schematic, data: KtData) => string;\n\n // New schematic properties\n control?: string;\n scaffoldControl?: (schematic: Schematic, data: ReactAppData) => string;\n scaffoldField?: (schematic: Schematic, data: ReactAppData) => string;\n}\n\nexport const anySchematicKind: SchematicKind = {\n ...kFormAnySchematicKind,\n};\nexport const bigDecimalSchematicKind: SchematicKind = {\n ...kFormBigDecimalSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const bigIntegerSchematicKind: SchematicKind = {\n ...kFormBigIntegerSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const booleanSchematicKind: SchematicKind = {\n ...kFormBooleanSchematicKind,\n control: \"@ostack.tech/ui-kform.CheckboxControl\",\n scaffoldControl: (schematic, data) =>\n data.omitLabel\n ? `<CheckboxControl />`\n : `<CheckboxControl>${sentenceCase(schematic.childName!)}</CheckboxControl>`,\n};\nexport const byteSchematicKind: SchematicKind = {\n ...kFormByteSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const classAnnexSchematicKind: SchematicKind = {\n ...kFormClassSchematicKind,\n defaultPackageSuffix: (childName) => `annexes.${childName.toLowerCase()}`,\n kind: \"Class (Annex)\",\n};\nexport const classFormPageSchematicKind: SchematicKind = {\n ...kFormClassSchematicKind,\n kind: \"Class (FormPage)\",\n nullable: false,\n};\nexport const classSchematicKind: SchematicKind = {\n ...kFormClassSchematicKind,\n nullable: false,\n scaffoldModel: (schematic, data) => {\n const baseModel = kFormClassSchematicKind.scaffoldModel!(schematic, data);\n if (data.currentPath !== \"/\") {\n return baseModel;\n }\n\n const classAnnotations: string[] = [];\n let versionProperty: string | null = null;\n\n if (data.serializationFormat === \"xml\") {\n data.currentFile.imports.add(\n \"nl.adaptivity.xmlutil.serialization.XmlSerialName\",\n );\n const namespace =\n data.xmlNamespace ??\n `http://${data\n .currentPackage!.split(\".\")\n .reverse()\n .join(\".\")}/schema/${new Date().getFullYear()}`;\n classAnnotations.push(\n `@XmlSerialName(\"${schematic.name}\", \"${namespace}\")`,\n );\n }\n\n if (\n data.includeSerializationFormatVersion ??\n DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION\n ) {\n data.currentFile.imports\n .add(\"kotlinx.serialization.EncodeDefault\")\n .add(\"kotlinx.serialization.ExperimentalSerializationApi\");\n const versionAnnotations = [\n \"@EncodeDefault\",\n \"@OptIn(ExperimentalSerializationApi::class)\",\n ];\n\n if (data.serializationFormat === \"xml\") {\n data.currentFile.imports.add(\n \"nl.adaptivity.xmlutil.serialization.XmlElement\",\n );\n versionAnnotations.push(\"@XmlElement(false)\");\n } else {\n data.currentFile.imports.add(\"kotlinx.serialization.SerialName\");\n versionAnnotations.push('@SerialName($$\"$version\")');\n }\n\n versionProperty = annotate(\n versionAnnotations,\n `internal var version = ${constantCase(schematic.name!)}_SERIALIZATION_VERSION`,\n );\n }\n\n return (\n annotate(classAnnotations, baseModel) +\n (versionProperty\n ? ` ${code`\n {\n ${versionProperty}\n }\n `}`\n : \"\")\n );\n },\n scaffoldField: (schematic, data) => {\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui\", name: \"FieldGroup\" },\n { moduleName: \"@ostack.tech/ui\", name: \"FieldGroupHeader\" },\n { moduleName: \"@ostack.tech/ui\", name: \"FieldGroupTitle\" },\n { moduleName: \"@ostack.tech/ui\", name: \"FieldGroupBody\" },\n { moduleName: \"@ostack.tech/ui\", name: \"Grid\" },\n );\n\n return code`\n <FieldGroup>\n <FieldGroupHeader>\n <FieldGroupTitle>${capitalCase(schematic.name!)}</FieldGroupTitle>\n </FieldGroupHeader>\n\n <FieldGroupBody>\n <Grid container>\n ${schematic\n .children!.map(\n (child) =>\n code`\n <Grid xs={12}>\n ${scaffoldField(child, {\n ...data,\n currentPath: joinPaths(\n data.currentPath,\n child.childName,\n ),\n })}\n </Grid>\n `,\n )\n .join(\"\\n\\n\")}\n </Grid>\n </FieldGroupBody>\n </FieldGroup>\n `;\n },\n};\nexport const doubleSchematicKind: SchematicKind = {\n ...kFormDoubleSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const enumSchematicKind: SchematicKind = {\n ...kFormEnumSchematicKind,\n kind: \"Enum\",\n internal: true,\n nullable: false,\n};\nexport const enumSelectSchematicKind: SchematicKind = {\n ...kFormEnumSchematicKind,\n kind: \"Enum (Select)\",\n control: \"@ostack.tech/ui-kform.SelectControl\",\n scaffoldControl: (schematic, data) => {\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n data.currentFile.imports.push({\n moduleName: data.kmpModuleName!,\n name: schematic.name!,\n });\n return [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n code`\n <SelectControl\n options={[\n ${schematic\n .children!.map(\n (child) =>\n `{ value: ${schematic.name}.${\n child.childName\n }, text: ${JSON.stringify(sentenceCase(child.childName!))} }`,\n )\n .join(\",\\n\")}\n ]}\n />\n `,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n },\n};\nexport const enumRadioGroupSchematicKind: SchematicKind = {\n ...kFormEnumSchematicKind,\n kind: \"Enum (RadioGroup)\",\n control: \"@ostack.tech/ui-kform.RadioGroupControl\",\n scaffoldControl: (schematic, data) => {\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n data.currentFile.imports.push({\n moduleName: data.kmpModuleName!,\n name: schematic.name!,\n });\n return [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n code`\n <RadioGroupControl\n options={[\n ${schematic\n .children!.map(\n (child) =>\n `{ value: ${schematic.name}.${\n child.childName\n }, text: ${JSON.stringify(sentenceCase(child.childName!))} }`,\n )\n .join(\",\\n\")}\n ]}\n />\n `,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n },\n};\nexport const fileSchematicKind: SchematicKind = {\n ...kFormFileSchematicKind,\n nullable: true,\n control: \"@ostack.tech/ui-kform.FileControl\",\n};\nexport const floatSchematicKind: SchematicKind = {\n ...kFormFloatSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const intSchematicKind: SchematicKind = {\n ...kFormIntSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const listCheckboxGroupSchematicKind: SchematicKind = {\n ...kFormListSchematicKind,\n kind: \"List<Enum> (CheckboxGroup)\",\n nullable: false,\n initChildren: (childName) => [\n createSchematic({\n kind: \"Enum\",\n name: pascalCase(childName),\n nullable: false,\n children: [],\n }),\n ],\n builder: ListableBuilderWithoutKindSelect,\n control: \"@ostack.tech/ui-kform.CheckboxGroupControl\",\n scaffoldControl: (schematic, data) => {\n const childSchematic = schematic.children![0];\n if (childSchematic.kind !== \"Enum\") {\n throw new Error(\"Invalid child kind.\");\n }\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n data.currentFile.imports.push({\n moduleName: data.kmpModuleName!,\n name: childSchematic.name!,\n });\n return [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n code`\n <CheckboxGroupControl\n options={[\n ${childSchematic\n .children!.map(\n (child) =>\n `{ value: ${childSchematic.name}.${\n child.childName\n }, text: ${JSON.stringify(sentenceCase(child.childName!))} }`,\n )\n .join(\",\\n\")}\n ]}\n />\n `,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n },\n};\nexport const listSelectMultipleSchematicKind: SchematicKind = {\n ...kFormListSchematicKind,\n kind: \"List<Enum> (SelectMultiple)\",\n nullable: false,\n initChildren: (childName) => [\n createSchematic({\n kind: \"Enum\",\n name: pascalCase(childName),\n nullable: false,\n children: [],\n }),\n ],\n builder: ListableBuilderWithoutKindSelect,\n control: \"@ostack.tech/ui-kform.SelectMultipleControl\",\n scaffoldControl: (schematic, data) => {\n const childSchematic = schematic.children![0];\n if (childSchematic.kind !== \"Enum\") {\n throw new Error(\"Invalid child kind.\");\n }\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n data.currentFile.imports.push({\n moduleName: data.kmpModuleName!,\n name: childSchematic.name!,\n });\n return [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n code`\n <SelectMultipleControl\n options={[\n ${childSchematic\n .children!.map(\n (child) =>\n `{ value: ${childSchematic.name}.${\n child.childName\n }, text: ${JSON.stringify(sentenceCase(child.childName!))} }`,\n )\n .join(\",\\n\")}\n ]}\n />\n `,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n },\n};\nexport const localDateSchematicKind: SchematicKind = {\n ...kFormLocalDateSchematicKind,\n nullable: true,\n control: \"@ostack.tech/ui-kform.DateControl\",\n};\nexport const longSchematicKind: SchematicKind = {\n ...kFormLongSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const shortSchematicKind: SchematicKind = {\n ...kFormShortSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const stringSchematicKind: SchematicKind = {\n ...kFormStringSchematicKind,\n control: \"@ostack.tech/ui-kform.TextControl\",\n};\nexport const tableAnnexesSchematicKind: SchematicKind = {\n ...kFormTableSchematicKind,\n kind: \"Table (Annexes)\",\n nullable: false,\n builder: ListableBuilderWithoutKindSelect,\n initChildren: (childName) => [\n createSchematic({\n kind: \"Class (Annex)\",\n packageSuffix: `annexes.${childName.toLowerCase()}`,\n name: pascalCase(childName),\n nullable: false,\n children: [],\n }),\n ],\n propertyAnnotations: (schematic, data) => {\n const annotations = arrayify(\n typeof kFormTableSchematicKind.propertyAnnotations === \"function\"\n ? kFormTableSchematicKind.propertyAnnotations?.(schematic, data)\n : kFormTableSchematicKind.propertyAnnotations,\n );\n if (data.serializationFormat === \"xml\") {\n data.currentFile.imports.add(\n \"nl.adaptivity.xmlutil.serialization.XmlChildrenName\",\n );\n annotations.push(\n `@XmlChildrenName(\"${camelCase(schematic.children![0].name!)}\")`,\n );\n }\n return annotations;\n },\n};\nexport const tableSchematicKind: SchematicKind = {\n ...kFormTableSchematicKind,\n nullable: false,\n builder: ListableBuilderWithoutKindSelect,\n initChildren: (childName) => [\n createSchematic({\n kind: \"Class\",\n name: `${pascalCase(childName)}Row`,\n nullable: false,\n children: [],\n }),\n ],\n propertyAnnotations: tableAnnexesSchematicKind.propertyAnnotations,\n control: \"@ostack.tech/ui-kform.TableControl\",\n scaffoldControl: (schematic, data) => {\n const rowSchematic = schematic.children![0];\n if (rowSchematic.kind !== \"Class\") {\n throw new Error(\"Table child schematic is not of Class kind.\");\n }\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui\", name: \"Label\" },\n {\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"tableControlIndexColumn\",\n },\n {\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"tableControlActionsColumn\",\n },\n {\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"TableControlAddRowTrigger\",\n },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"TableControlContent\" },\n );\n\n return code`\n <TableControl\n columns={[\n tableControlIndexColumn(),\n ${rowSchematic\n .children!.map(\n (child) => code`\n {\n label: ${JSON.stringify(sentenceCase(child.childName!))},\n render: () => (\n ${scaffoldField(child, {\n ...data,\n omitLabel: true,\n currentPath: child.childName!,\n })}\n )\n }\n `,\n )\n .join(\",\\n\")},\n tableControlActionsColumn()\n ]}\n >\n <Label>${sentenceCase(schematic.childName!)}</Label>\n <TableControlAddRowTrigger />\n <TableControlContent />\n </TableControl>\n `;\n },\n};\n\nexport const defaultSchematicKinds = [\n anySchematicKind,\n bigDecimalSchematicKind,\n bigIntegerSchematicKind,\n booleanSchematicKind,\n byteSchematicKind,\n classSchematicKind,\n classAnnexSchematicKind,\n classFormPageSchematicKind,\n doubleSchematicKind,\n enumSchematicKind,\n enumSelectSchematicKind,\n enumRadioGroupSchematicKind,\n fileSchematicKind,\n floatSchematicKind,\n intSchematicKind,\n listCheckboxGroupSchematicKind,\n listSelectMultipleSchematicKind,\n localDateSchematicKind,\n longSchematicKind,\n shortSchematicKind,\n stringSchematicKind,\n tableAnnexesSchematicKind,\n tableSchematicKind,\n];\n","import { joinPaths, type Schematic } from \"@ostack.tech/kform-scaffolder\";\nimport { camelCase } from \"change-case\";\n\nimport {\n classAnnexSchematicKind,\n classFormPageSchematicKind,\n tableAnnexesSchematicKind,\n} from \"../../../SchematicKind.ts\";\nimport type { ReactAppData } from \"../ReactAppData.ts\";\n\nexport interface LayoutAnnex {\n schematic: Schematic;\n data: ReactAppData;\n formPages: LayoutFormPage[];\n}\n\nexport interface LayoutFormPage {\n schematic: Schematic;\n data: ReactAppData;\n}\n\nexport function reactAppLayout(\n schematic: Schematic,\n data: ReactAppData,\n): LayoutAnnex[] {\n const annexes: LayoutAnnex[] = [];\n if (\n schematic.children?.every(\n (child) =>\n child.kind === classAnnexSchematicKind.kind ||\n child.kind === tableAnnexesSchematicKind.kind,\n )\n ) {\n for (const annex of schematic.children) {\n if (annex.kind === classAnnexSchematicKind.kind) {\n annexes.push(\n layoutAnnex(annex, {\n ...data,\n currentPath: joinPaths(data.currentPath, annex.childName),\n currentDir: joinPaths(\n data.currentDir,\n annex.packageSuffix?.replaceAll(\".\", \"/\"),\n ),\n }),\n );\n } else {\n annexes.push(\n layoutRepetitiveAnnex(annex, {\n ...data,\n currentPath: joinPaths(data.currentPath, annex.childName),\n }),\n );\n }\n }\n } else if (\n schematic.children?.every(\n (child) => child.kind === classFormPageSchematicKind.kind,\n )\n ) {\n annexes.push(layoutAnnex(schematic, data));\n } else if (\n schematic.children?.some(\n (child) =>\n child.kind === classAnnexSchematicKind.kind ||\n child.kind === tableAnnexesSchematicKind.kind ||\n child.kind === classFormPageSchematicKind.kind,\n )\n ) {\n throw new Error(\n \"Annexes/form pages cannot be mixed with other kinds of fields.\",\n );\n } else {\n annexes.push(layoutAnnex(schematic, data));\n }\n return annexes;\n}\n\nfunction layoutRepetitiveAnnex(\n schematic: Schematic,\n data: ReactAppData,\n): LayoutAnnex {\n const childSchematic = schematic.children![0];\n return layoutAnnex(childSchematic, {\n ...data,\n currentPath: joinPaths(data.currentPath, \"*\"),\n currentDir: joinPaths(\n data.currentDir,\n childSchematic.packageSuffix?.replaceAll(\".\", \"/\"),\n ),\n });\n}\n\nfunction layoutAnnex(schematic: Schematic, data: ReactAppData): LayoutAnnex {\n if (\n schematic.children?.some(\n (child) =>\n child.kind === classAnnexSchematicKind.kind ||\n child.kind === tableAnnexesSchematicKind.kind,\n )\n ) {\n throw new Error(\n \"Annexes must only appear at the top level of the schematic.\",\n );\n }\n\n let formPages: LayoutFormPage[];\n if (\n schematic.children?.every(\n (child) => child.kind === classFormPageSchematicKind.kind,\n )\n ) {\n formPages = schematic.children?.map((formPage) => ({\n schematic: formPage,\n data: {\n ...data,\n currentPath: joinPaths(\n data.currentPath,\n camelCase(formPage.childName!),\n ),\n currentDir: joinPaths(\n data.currentDir,\n formPage.packageSuffix?.replaceAll(\".\", \"/\"),\n ),\n },\n }));\n } else if (\n schematic.children?.some(\n (child) => child.kind === classFormPageSchematicKind.kind,\n )\n ) {\n throw new Error(\"Form pages cannot be mixed with other kinds of fields.\");\n } else {\n formPages = [{ schematic, data }];\n }\n\n return { schematic, data, formPages };\n}\n","import {\n code,\n joinPaths,\n type Schematic,\n type TsFile,\n tsFile,\n} from \"@ostack.tech/kform-scaffolder\";\nimport {\n capitalCase,\n constantCase,\n kebabCase,\n sentenceCase,\n} from \"change-case\";\n\nimport { DEFAULT_LOCALE } from \"../../configs/DefaultLocaleConfig.tsx\";\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport {\n type LayoutAnnex,\n type LayoutFormPage,\n reactAppLayout,\n} from \"../reactApp/util/reactAppLayout.ts\";\nimport {\n scaffoldIssueMessages,\n shouldScaffoldIssueMessages,\n} from \"./scaffoldIssueMessages.ts\";\n\nexport const DEFAULT_ACTIVE_PATH_SEARCH_PARAM = \"page\";\n\nexport function scaffoldAppComponent(schematic: Schematic, data: ReactAppData) {\n const fileName = joinPaths(data.currentDir, `${schematic.name}App.tsx`);\n let file = data.files.get(fileName) as TsFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = tsFile()));\n }\n scaffoldAppComponentFile(schematic, {\n kmpModuleName: `${kebabCase(schematic.name!)}-shared`,\n ...data,\n currentFile: file,\n });\n scaffoldIssueMessages(schematic, data);\n}\n\nfunction scaffoldAppComponentFile(schematic: Schematic, data: ReactAppData) {\n const localeVar = (data.defaultLocale ?? DEFAULT_LOCALE).replaceAll(\"-\", \"\");\n const activePathSearchParam =\n data.activePathSearchParam ?? DEFAULT_ACTIVE_PATH_SEARCH_PARAM;\n\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/kform\", name: \"ktMapToObject\" },\n { moduleName: \"@ostack.tech/ui\", name: \"useSearchParam\" },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"FormApp\" },\n { moduleName: \"@ostack.tech/ui-kform\", name: localeVar },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"IssuesPanel\" },\n { moduleName: \"react\", name: \"useMemo\" },\n { moduleName: data.kmpModuleName!, name: `${schematic.name}FormMode` },\n { moduleName: data.kmpModuleName!, name: `${schematic.name}Schema` },\n { moduleName: `./api/reportError.ts`, name: \"reportError\" },\n {\n moduleName: `./${schematic.name}Context.ts`,\n name: `use${schematic.name}Context`,\n },\n );\n\n let issueMessagesProp = \"\";\n if (shouldScaffoldIssueMessages(data)) {\n data.currentFile.imports.push({\n moduleName: `./${schematic.name}IssueMessages.tsx`,\n name: `${constantCase(schematic.name!)}_ISSUE_MESSAGES`,\n });\n issueMessagesProp = `\\nissueMessages={${constantCase(schematic.name!)}_ISSUE_MESSAGES}`;\n }\n\n data.currentFile.declarations.push(code`\n export function ${schematic.name}App() {\n const { externalContexts } = use${schematic.name}Context();\n const [activePath, setActivePath] = useSearchParam(\"${activePathSearchParam}\");\n\n return (\n <FormApp\n schema={${schematic.name}Schema.get()}\n initialValue={\n externalContexts.mode !== ${schematic.name}FormMode.NEW\n ? externalContexts.initialValue\n : undefined\n }\n externalContexts={useMemo(\n () => ktMapToObject(externalContexts.toMap()),\n [externalContexts],\n )}\n readOnly={externalContexts.mode === ${schematic.name}FormMode.READ}\n validationMode={\n externalContexts.mode === ${schematic.name}FormMode.READ\n ? \"manual\"\n : \"auto\"\n }\n formTitle=\"${capitalCase(schematic.name!)}\"\n activePath={activePath}\n onActivePathChange={setActivePath}${issueMessagesProp}\n defaultLocale={${localeVar}}\n reportError={reportError}\n >\n ${scaffoldAppLayout(schematic, data)}\n\n <IssuesPanel />\n </FormApp>\n );\n }\n `);\n}\n\nexport function scaffoldAppLayout(\n schematic: Schematic,\n data: ReactAppData,\n scaffoldTopBarFn: (\n data: ReactAppData,\n annexesManager?: string,\n ) => string = scaffoldTopBar,\n): string {\n const layout = reactAppLayout(schematic, data);\n\n if (layout.length === 1 && layout[0].data.currentPath === \"/\") {\n return code`\n ${scaffoldTopBarFn(data)}\n\n ${scaffoldFormPages(data, layout[0])}\n `;\n }\n\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui-kform\", name: \"Annexes\" },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"AnnexesManager\" },\n );\n\n return code`\n <Annexes>\n ${scaffoldTopBarFn(data, \"<AnnexesManager />\")}\n\n ${layout.map((annex) => scaffoldAnnex(data, annex)).join(\"\\n\\n\")}\n </Annexes>\n `;\n}\n\nfunction scaffoldTopBar(data: ReactAppData, annexesManager?: string) {\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui-kform\", name: \"TopBar\" },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"TopBarActions\" },\n { moduleName: \"./actions/Load.tsx\", name: \"Load\" },\n { moduleName: \"./actions/Save.tsx\", name: \"Save\" },\n { moduleName: \"./actions/Validate.tsx\", name: \"Validate\" },\n { moduleName: \"./actions/Submit.tsx\", name: \"Submit\" },\n );\n\n return code`\n <TopBar>${annexesManager ? `\\n ${annexesManager}\\n` : \"\"}\n <TopBarActions>\n <Load />\n <Save />\n <Validate />\n <Submit />\n </TopBarActions>\n </TopBar>\n `;\n}\n\nfunction scaffoldAnnex(data: ReactAppData, annex: LayoutAnnex): string {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"Annex\",\n });\n\n return code`\n <Annex path=\"${annex.data.currentPath}\" title=\"${sentenceCase(annex.schematic.name!)}\"${\n annex.formPages.length === 1 &&\n annex.schematic === annex.formPages[0].schematic\n ? \" documentTitle={null}\"\n : \"\"\n }>\n ${scaffoldFormPages(data, annex)}\n </Annex>\n `;\n}\n\nfunction scaffoldFormPages(data: ReactAppData, annex: LayoutAnnex) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"FormPages\",\n });\n\n let formPagesNavigation = \"\";\n if (annex.formPages.length > 1) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"FormPagesNavigation\",\n });\n formPagesNavigation = \"\\n <FormPagesNavigation />\\n\";\n }\n\n return code`\n <FormPages>${formPagesNavigation}\n ${annex.formPages.map((formPage) => scaffoldFormPage(data, annex, formPage)).join(\"\\n\\n\")}\n </FormPages>\n `;\n}\n\nfunction scaffoldFormPage(\n data: ReactAppData,\n annex: LayoutAnnex,\n formPage: LayoutFormPage,\n) {\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui-kform\", name: \"FormPage\" },\n {\n moduleName: `./${joinPaths(\n formPage.data.currentDir!.slice(\n data.currentDir!.length + (data.currentDir!.endsWith(\"/\") ? 0 : 1),\n ),\n formPage.schematic.name,\n )}.tsx`,\n name: formPage.schematic.name!,\n },\n );\n\n let issueMessagesProp = \"\";\n if (shouldScaffoldIssueMessages(data) && formPage.data.currentPath !== \"/\") {\n data.currentFile.imports.push({\n moduleName: `./${joinPaths(\n formPage.data.currentDir!.slice(\n data.currentDir!.length + (data.currentDir!.endsWith(\"/\") ? 0 : 1),\n ),\n formPage.schematic.name,\n )}IssueMessages.tsx`,\n name: `${constantCase(formPage.schematic.name!)}_ISSUE_MESSAGES`,\n });\n issueMessagesProp = ` issueMessages={${constantCase(formPage.schematic.name!)}_ISSUE_MESSAGES}`;\n }\n\n const pathProp =\n annex.schematic === formPage.schematic\n ? \"\"\n : ` path=\"${formPage.data.currentPath!.slice(\n annex.data.currentPath!.length +\n (annex.data.currentPath!.endsWith(\"/\") ? 0 : 1),\n )}\"`;\n const documentTitleProp =\n formPage.data.currentPath === \"/\" ? \" documentTitle={null}\" : \"\";\n\n return code`\n <FormPage${pathProp} title=\"${sentenceCase(\n formPage.schematic.name!,\n )}\" code=\"${formPage.schematic.name?.[0].toUpperCase()}\"${\n documentTitleProp\n }${issueMessagesProp}>\n <${formPage.schematic.name!} />\n </FormPage>\n `;\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport contextTsEjs from \"../templates/react-app/src/Context.ts.ejs?raw\";\n\nexport function scaffoldAppContext(schematic: Schematic, data: ReactAppData) {\n const ejsData = {\n kmpModuleName: data.kmpModuleName ?? `${kebabCase(schematic.name!)}-shared`,\n formClass: schematic.name,\n };\n\n addEjsTemplateFile(\n data,\n `${schematic.name}Context.ts`,\n contextTsEjs,\n ejsData,\n );\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\n\nimport type { KtData } from \"../kotlin/KtData.ts\";\nimport externalContextsKt from \"../templates/shared/src/commonMain/kotlin/ExternalContexts.kt.ejs?raw\";\n\nexport function scaffoldExternalContexts(\n schematic: Schematic,\n data: KtData,\n): void {\n const ejsData = {\n filePackage: data.currentPackage,\n formClass: schematic.name,\n };\n\n addEjsTemplateFile(\n data,\n `${schematic.name}ExternalContexts.kt`,\n externalContextsKt,\n ejsData,\n );\n}\n","import {\n addEjsTemplateFile,\n addTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { capitalCase, kebabCase } from \"change-case\";\n\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport buildGradleKts from \"../templates/build.gradle.kts?raw\";\nimport gradlePropertiesEjs from \"../templates/gradle.properties.ejs?raw\";\nimport libsVersionsTomlEjs from \"../templates/gradle/libs.versions.toml.ejs?raw\";\nimport reactAppBuildGradleKtsEjs from \"../templates/react-app/build.gradle.kts.ejs?raw\";\nimport settingsGradleKtsEjs from \"../templates/settings.gradle.kts.ejs?raw\";\nimport sharedBuildGradleKtsEjs from \"../templates/shared/build.gradle.kts.ejs?raw\";\nimport jsJodaTimeZoneKtEjs from \"../templates/shared/src/jsMain/kotlin/JsJodaTimeZone.kt.ejs?raw\";\n\nexport const DEFAULT_JVM_TOOLCHAIN_VERSION = \"21\";\nexport const DEFAULT_NODEJS_VERSION = \"24.16.0\";\n\nexport function scaffoldGradleProject(\n schematic: Schematic,\n data: ScaffoldingData,\n) {\n const ejsData = {\n gradlePropertiesGroup: data.gradlePropertiesGroup ?? data.currentPackage,\n filePackage: data.currentPackage,\n formId: kebabCase(schematic.name!),\n formTitle: capitalCase(schematic.name!),\n kFormVersion: import.meta.env.VITE_KFORM_VERSION,\n serializationFormat: data.serializationFormat ?? \"json\",\n includeKotlinxDatetime:\n data.includeKotlinxDatetime ?? usesKotlinxDatetime(schematic, data),\n includeKtMath: data.includeKtMath ?? usesKtMath(schematic),\n jvmToolchainVersion:\n data.jvmToolchainVersion ?? DEFAULT_JVM_TOOLCHAIN_VERSION,\n nodejsVersion: data.nodejsVersion ?? DEFAULT_NODEJS_VERSION,\n };\n\n addEjsTemplateFile(data, \"gradle.properties\", gradlePropertiesEjs, ejsData);\n addEjsTemplateFile(\n data,\n \"settings.gradle.kts\",\n settingsGradleKtsEjs,\n ejsData,\n );\n addEjsTemplateFile(\n data,\n \"gradle/libs.versions.toml\",\n libsVersionsTomlEjs,\n ejsData,\n );\n addTemplateFile(data, \"build.gradle.kts\", buildGradleKts);\n addEjsTemplateFile(\n data,\n \"shared/build.gradle.kts\",\n sharedBuildGradleKtsEjs,\n ejsData,\n );\n if (ejsData.includeKotlinxDatetime) {\n addEjsTemplateFile(\n data,\n \"shared/src/jsMain/kotlin/JsJodaTimeZone.kt\",\n jsJodaTimeZoneKtEjs,\n ejsData,\n );\n }\n addEjsTemplateFile(\n data,\n \"react-app/build.gradle.kts\",\n reactAppBuildGradleKtsEjs,\n ejsData,\n );\n}\n\nfunction usesKotlinxDatetime(\n schematic: Schematic,\n data: ScaffoldingData,\n): boolean {\n const schematicKind = data.schematicKinds.get(schematic.kind);\n return (\n schematicKind?.package === \"kotlinx.datetime\" ||\n schematic.children?.some((child) => usesKotlinxDatetime(child, data)) ===\n true\n );\n}\n\nfunction usesKtMath(schematic: Schematic): boolean {\n return (\n [\"BigInteger\", \"BigDecimal\"].includes(schematic.kind) ||\n schematic.children?.some((child) => usesKtMath(child)) === true\n );\n}\n","export default \"data:application/java-archive;base64,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\"","import { addTemplateFile, type Schematic } from \"@ostack.tech/kform-scaffolder\";\n\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport gradleWrapperJarUrl from \"../templates/gradle/wrapper/gradle-wrapper.jar?url\";\nimport gradleWrapperProperties from \"../templates/gradle/wrapper/gradle-wrapper.properties?raw\";\nimport gradlewBat from \"../templates/gradlew.bat?raw\";\nimport gradlew from \"../templates/gradlew?raw\";\n\nexport function scaffoldGradleWrapper(\n _schematic: Schematic,\n data: ScaffoldingData,\n) {\n // Gradle\n addTemplateFile(data, \"gradlew\", gradlew, { executable: true });\n addTemplateFile(data, \"gradlew.bat\", gradlewBat);\n addTemplateFile(\n data,\n \"gradle/wrapper/gradle-wrapper.jar\",\n fetch(gradleWrapperJarUrl).then((res) => res.arrayBuffer()),\n );\n addTemplateFile(\n data,\n \"gradle/wrapper/gradle-wrapper.properties\",\n gradleWrapperProperties,\n );\n}\n","import {\n code,\n joinPaths,\n type Schematic,\n type TsFile,\n tsFile,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\n\nexport function scaffoldMain(schematic: Schematic, data: ReactAppData) {\n const fileName = joinPaths(data.currentDir, \"main.tsx\");\n let file = data.files.get(fileName) as TsFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = tsFile()));\n }\n scaffoldMainDeclarations(schematic, {\n kmpModuleName: `${kebabCase(schematic.name!)}-shared`,\n ...data,\n currentFile: file,\n });\n}\n\nfunction scaffoldMainDeclarations(schematic: Schematic, data: ReactAppData) {\n data.currentFile.imports.push(\n { moduleName: \"./index.scss\" },\n { moduleName: \"react\", name: \"StrictMode\" },\n { moduleName: \"react-dom/client\", name: \"createRoot\" },\n {\n moduleName: data.kmpModuleName!,\n name: `decode${schematic.name}ExternalContextsFromString`,\n },\n {\n moduleName: `./${schematic.name}Context.ts`,\n name: `${schematic.name}Context`,\n },\n {\n moduleName: `./${schematic.name!}App.tsx`,\n name: `${schematic.name!}App`,\n },\n );\n\n data.currentFile.declarations.push(code`\n export function renderRoot(encodedExternalContexts: string) {\n createRoot(document.getElementById(\"${kebabCase(schematic.name!)}-app-root\")!).render(\n <StrictMode>\n <${schematic.name}Context.Provider\n value={{\n externalContexts: decode${schematic.name}ExternalContextsFromString(\n encodedExternalContexts,\n ),\n }}\n >\n <${schematic.name!}App />\n </${schematic.name}Context.Provider>\n </StrictMode>,\n );\n }\n `);\n}\n","import { addTemplateFile, type Schematic } from \"@ostack.tech/kform-scaffolder\";\n\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport editorconfig from \"../templates/_editorconfig?raw\";\nimport gitattributes from \"../templates/_gitattributes?raw\";\nimport gitignore from \"../templates/_gitignore?raw\";\n\nexport function scaffoldProjectMisc(\n _schematic: Schematic,\n data: ScaffoldingData,\n) {\n addTemplateFile(data, \".gitignore\", gitignore);\n addTemplateFile(data, \".gitattributes\", gitattributes);\n addTemplateFile(data, \".editorconfig\", editorconfig);\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\n\nimport type { KtData } from \"../kotlin/KtData.ts\";\nimport responsesKt from \"../templates/shared/src/commonMain/kotlin/Responses.kt.ejs?raw\";\n\nexport function scaffoldResponses(schematic: Schematic, data: KtData): void {\n const ejsData = {\n filePackage: data.currentPackage,\n formClass: schematic.name,\n };\n\n addEjsTemplateFile(\n data,\n `${schematic.name}Responses.kt`,\n responsesKt,\n ejsData,\n );\n}\n","import { addTemplateFile, type Schematic } from \"@ostack.tech/kform-scaffolder\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport indexScss from \"../templates/react-app/src/index.scss?raw\";\n\nexport function scaffoldStyles(_schematic: Schematic, data: ReactAppData) {\n addTemplateFile(data, \"index.scss\", indexScss);\n}\n","import {\n addEjsTemplateFile,\n addTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { capitalCase, kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport eslintConfigJs from \"../templates/react-app/eslint.config.js?raw\";\nimport indexHtmlEjs from \"../templates/react-app/index.html.ejs?raw\";\nimport packageJsonEjs from \"../templates/react-app/package.json.ejs?raw\";\nimport viteSvg from \"../templates/react-app/public/vite.svg?raw\";\nimport tsConfigAppJson from \"../templates/react-app/tsconfig.app.json?raw\";\nimport tsConfigJson from \"../templates/react-app/tsconfig.json?raw\";\nimport tsConfigNodeJson from \"../templates/react-app/tsconfig.node.json?raw\";\nimport viteConfigTsEjs from \"../templates/react-app/vite.config.ts.ejs?raw\";\nimport { DEFAULT_API_BASE_PATH } from \"./scaffoldApi.ts\";\n\nexport const DEFAULT_VITE_CONFIG_OUT_DIR = \"build/dist/\";\nexport const DEFAULT_VITE_CONFIG_PROXY_TARGET = \"http://127.0.0.1:8080/\";\n\nexport function scaffoldViteProject(schematic: Schematic, data: ReactAppData) {\n const ejsData = {\n formId: kebabCase(schematic.name!),\n formClass: schematic.name,\n formTitle: capitalCase(schematic.name!),\n ostackUiVersion: import.meta.env.VITE_OSTACK_UI_VERSION,\n kFormVersion: import.meta.env.VITE_KFORM_VERSION,\n dependencyVersions: JSON.parse(import.meta.env.VITE_DEPENDENCY_VERSIONS),\n encodedExternalContexts: JSON.stringify(\n data.serializationFormat === \"json\"\n ? \"{}\"\n : `<${schematic.name}ExternalContexts />`,\n ),\n apiBasePath: data.apiBasePath ?? DEFAULT_API_BASE_PATH,\n viteConfigOutDir: data.viteConfigOutDir ?? DEFAULT_VITE_CONFIG_OUT_DIR,\n viteConfigProxyTarget:\n data.viteConfigProxyTarget ?? DEFAULT_VITE_CONFIG_PROXY_TARGET,\n };\n\n addEjsTemplateFile(data, \"react-app/package.json\", packageJsonEjs, ejsData);\n addEjsTemplateFile(\n data,\n \"react-app/vite.config.ts\",\n viteConfigTsEjs,\n ejsData,\n );\n addTemplateFile(data, \"react-app/tsconfig.json\", tsConfigJson);\n addTemplateFile(data, \"react-app/tsconfig.app.json\", tsConfigAppJson);\n addTemplateFile(data, \"react-app/tsconfig.node.json\", tsConfigNodeJson);\n addTemplateFile(data, \"react-app/eslint.config.js\", eslintConfigJs);\n addEjsTemplateFile(data, \"react-app/index.html\", indexHtmlEjs, ejsData);\n addTemplateFile(data, \"react-app/public/vite.svg\", viteSvg);\n}\n","import {\n configScaffolder,\n scaffoldModels,\n scaffoldSchemas,\n scaffoldValidator,\n SchematicBuilder as KFormSchematicBuilder,\n type SchematicBuilderProps as KFormSchematicBuilderProps,\n} from \"@ostack.tech/kform-scaffolder\";\n\nimport { DefaultLocaleConfig } from \"./configs/DefaultLocaleConfig.tsx\";\nimport { SerializationFormatConfig } from \"./configs/SerializationFormatConfig.tsx\";\nimport { UseTableValuesSerializerConfig } from \"./configs/UseTableValuesSerializerConfig.tsx\";\nimport type { KtData } from \"./scaffolding/kotlin/KtData.ts\";\nimport type { ReactAppData } from \"./scaffolding/reactApp/ReactAppData.ts\";\nimport { scaffoldActions } from \"./scaffolding/scaffolders/scaffoldActions.ts\";\nimport { scaffoldApi } from \"./scaffolding/scaffolders/scaffoldApi.ts\";\nimport { scaffoldAppComponent } from \"./scaffolding/scaffolders/scaffoldAppComponent.ts\";\nimport { scaffoldAppContext } from \"./scaffolding/scaffolders/scaffoldAppContext.ts\";\nimport { scaffoldExternalContexts } from \"./scaffolding/scaffolders/scaffoldExternalContexts.ts\";\nimport { scaffoldGradleProject } from \"./scaffolding/scaffolders/scaffoldGradleProject.ts\";\nimport { scaffoldGradleWrapper } from \"./scaffolding/scaffolders/scaffoldGradleWrapper.ts\";\nimport { scaffoldMain } from \"./scaffolding/scaffolders/scaffoldMain.ts\";\nimport { scaffoldPageComponents } from \"./scaffolding/scaffolders/scaffoldPageComponents.ts\";\nimport { scaffoldProjectMisc } from \"./scaffolding/scaffolders/scaffoldProjectMisc.ts\";\nimport { scaffoldResponses } from \"./scaffolding/scaffolders/scaffoldResponses.ts\";\nimport { scaffoldSerializer } from \"./scaffolding/scaffolders/scaffoldSerializer.ts\";\nimport { scaffoldStyles } from \"./scaffolding/scaffolders/scaffoldStyles.ts\";\nimport { scaffoldViteProject } from \"./scaffolding/scaffolders/scaffoldViteProject.ts\";\nimport { defaultSchematicKinds, type SchematicKind } from \"./SchematicKind.ts\";\n\nexport interface SchematicBuilderProps extends KFormSchematicBuilderProps {\n schematicKinds?: SchematicKind[];\n}\n\nconst kotlinMainData: Partial<KtData> = {\n currentDir: \"shared/src/commonMain/kotlin\",\n};\nconst kotlinTestData: Partial<KtData> = {\n currentDir: \"shared/src/commonTest/kotlin\",\n};\nconst reactAppData: Partial<ReactAppData> = {\n currentDir: \"react-app/src\",\n};\n\nexport function SchematicBuilder({\n name = \"ostack-ui-kform\",\n schematicKinds = defaultSchematicKinds,\n scaffolders = [\n scaffoldProjectMisc,\n scaffoldGradleWrapper,\n scaffoldGradleProject,\n scaffoldViteProject,\n configScaffolder(scaffoldSchemas, kotlinMainData),\n configScaffolder(scaffoldModels, kotlinMainData),\n configScaffolder(scaffoldResponses, kotlinMainData),\n configScaffolder(scaffoldExternalContexts, kotlinMainData),\n configScaffolder(scaffoldSerializer, kotlinMainData),\n configScaffolder(scaffoldValidator, kotlinTestData),\n configScaffolder(scaffoldMain, reactAppData),\n configScaffolder(scaffoldStyles, reactAppData),\n configScaffolder(scaffoldAppComponent, reactAppData),\n configScaffolder(scaffoldAppContext, reactAppData),\n configScaffolder(scaffoldActions, reactAppData),\n configScaffolder(scaffoldApi, reactAppData),\n configScaffolder(scaffoldPageComponents, reactAppData),\n ],\n scaffoldingData = (schematic) => ({\n useFileBase64Serializer: true,\n ...schematic.config,\n }),\n configs = (\n <>\n <DefaultLocaleConfig />\n <SerializationFormatConfig />\n <UseTableValuesSerializerConfig />\n </>\n ),\n version = import.meta.env.VITE_OSTACK_UI_VERSION,\n ...otherProps\n}: SchematicBuilderProps) {\n return (\n <KFormSchematicBuilder\n name={name}\n schematicKinds={schematicKinds}\n scaffolders={scaffolders}\n scaffoldingData={scaffoldingData}\n configs={configs}\n version={version}\n {...otherProps}\n />\n );\n}\n"],"mappings":"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"}